16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2008-2012 IBM, Inc. All Rights Reserved. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This program tests string search performance. 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * APIs tested: 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU4C 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "strsrchperf.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgStringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status) 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org:UPerfTest(argc,argv,status){ 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t start, end; 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srch = NULL; 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pttrn = NULL; 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){ 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr,gUsageString, "strsrchperf"); 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Get the Text */ 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org src = getBuffer(srcLen, status); 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Get a word to find. Do this by selecting a random word with a word breakiterator. */ 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status); 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status)); 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = ubrk_preceding(brk, 1000); 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org end = ubrk_following(brk, start); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pttrnLen = end - start; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen)); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < pttrnLen; i++) { 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp[i] = src[start++]; 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pttrn = temp; /* store word in pttrn */ 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ubrk_close(brk); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The first line of the file contains the pattern */ 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org start = 0; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(end = start; ; end += 1) { 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ch = src[end]; 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ch == 0x000A || ch == 0x000D || ch == 0x2028) { 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pttrnLen = end - start; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen)); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < pttrnLen; i++) { 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp[i] = src[start++]; 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pttrn = temp; /* store word in pttrn */ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Create the StringSearch object to be use in performance test. */ 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status)); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgStringSearchPerformanceTest::~StringSearchPerformanceTest() { 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pttrn != NULL) { 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(pttrn); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (srch != NULL) { 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org usearch_close(srch); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) { 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (index) { 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(0,Test_ICU_Forward_Search); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(1,Test_ICU_Backward_Search); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name = ""; 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){ 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return func; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){ 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return func; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint main (int argc, const char* argv[]) { 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringSearchPerformanceTest test(argc, argv, status); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return status; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(test.run()==FALSE){ 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return -1; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 115