X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/fd0068a84e9996f225edba706498f6ed413d0673..46f4442e9a5a4f3b98b7c1083586332f6a8a99a4:/icuSources/test/perf/strsrchperf/strsrchperf.cpp diff --git a/icuSources/test/perf/strsrchperf/strsrchperf.cpp b/icuSources/test/perf/strsrchperf/strsrchperf.cpp new file mode 100644 index 00000000..4d899211 --- /dev/null +++ b/icuSources/test/perf/strsrchperf/strsrchperf.cpp @@ -0,0 +1,93 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (C) 2008 IBM, Inc. All Rights Reserved. + * + ********************************************************************/ +/** + * This program tests string search performance. + * APIs tested: + * ICU4C + */ + +#include "strsrchperf.h" + +StringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status) +:UPerfTest(argc,argv,status){ + int32_t start, end; + srch = NULL; + pttrn = NULL; + if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){ + fprintf(stderr,gUsageString, "strsrchperf"); + return; + } + /* Get the Text */ + src = getBuffer(srcLen, status); + + /* Get a word to find. Do this by selecting a random word with a word breakiterator. */ + UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status); + if(U_FAILURE(status)){ + fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status)); + return; + } + start = ubrk_preceding(brk, 1000); + end = ubrk_following(brk, start); + pttrnLen = end - start; + UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen)); + for (int i = 0; i < pttrnLen; i++) { + temp[i] = src[start++]; + } + pttrn = temp; /* store word in pttrn */ + ubrk_close(brk); + + /* Create the StringSearch object to be use in performance test. */ + srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status); + if(U_FAILURE(status)){ + fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status)); + return; + } + +} + +StringSearchPerformanceTest::~StringSearchPerformanceTest() { + if (pttrn != NULL) { + free(pttrn); + } + if (srch != NULL) { + usearch_close(srch); + } +} + +UPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) { + switch (index) { + TESTCASE(0,Test_ICU_Forward_Search); + TESTCASE(1,Test_ICU_Backward_Search); + + default: + name = ""; + return NULL; + } + return NULL; +} + +UPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){ + StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen); + return func; +} + +UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){ + StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen); + return func; +} + +int main (int argc, const char* argv[]) { + UErrorCode status = U_ZERO_ERROR; + StringSearchPerformanceTest test(argc, argv, status); + if(U_FAILURE(status)){ + return status; + } + if(test.run()==FALSE){ + fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n"); + return -1; + } + return 0; +}