Index: icu46/source/test/perf/strsrchperf/strsrchperf.cpp |
=================================================================== |
--- icu46/source/test/perf/strsrchperf/strsrchperf.cpp (revision 0) |
+++ icu46/source/test/perf/strsrchperf/strsrchperf.cpp (revision 0) |
@@ -0,0 +1,148 @@ |
+/******************************************************************** |
+ * COPYRIGHT: |
+ * Copyright (C) 2008-2009 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; |
+ |
+#ifdef TEST_BOYER_MOORE_SEARCH |
+ bms = NULL; |
+#else |
+ srch = NULL; |
+#endif |
+ |
+ pttrn = NULL; |
+ if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){ |
+ fprintf(stderr,gUsageString, "strsrchperf"); |
+ return; |
+ } |
+ /* Get the Text */ |
+ src = getBuffer(srcLen, status); |
+ |
+#if 0 |
+ /* 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); |
+#else |
+ /* The first line of the file contains the pattern */ |
+ start = 0; |
+ |
+ for(end = start; ; end += 1) { |
+ UChar ch = src[end]; |
+ |
+ if (ch == 0x000A || ch == 0x000D || ch == 0x2028) { |
+ break; |
+ } |
+ } |
+ |
+ 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 */ |
+#endif |
+ |
+#ifdef TEST_BOYER_MOORE_SEARCH |
+ UnicodeString patternString(pttrn, pttrnLen); |
+ UCollator *coll = ucol_open(locale, &status); |
+ CollData *data = CollData::open(coll, status); |
+ |
+ targetString = new UnicodeString(src, srcLen); |
+ bms = new BoyerMooreSearch(data, patternString, targetString, status); |
+#else |
+ /* Create the StringSearch object to be use in performance test. */ |
+ srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status); |
+#endif |
+ |
+ if(U_FAILURE(status)){ |
+ fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status)); |
+ return; |
+ } |
+ |
+} |
+ |
+StringSearchPerformanceTest::~StringSearchPerformanceTest() { |
+ CollData *data = bms->getData(); |
+ UCollator *coll = data->getCollator(); |
+ |
+ delete bms; |
+ delete targetString; |
+ CollData::close(data); |
+ ucol_close(coll); |
+ |
+ if (pttrn != NULL) { |
+ free(pttrn); |
+ } |
+ |
+#ifndef TEST_BOYER_MOORE_SEARCH |
+ if (srch != NULL) { |
+ usearch_close(srch); |
+ } |
+#endif |
+} |
+ |
+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(){ |
+#ifdef TEST_BOYER_MOORE_SEARCH |
+ StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUForwardSearch, bms, src, srcLen, pttrn, pttrnLen); |
+#else |
+ StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen); |
+#endif |
+ return func; |
+} |
+ |
+UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){ |
+#ifdef TEST_BOYER_MOORE_SEARCH |
+ StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUBackwardSearch, bms, src, srcLen, pttrn, pttrnLen); |
+#else |
+ StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen); |
+#endif |
+ 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; |
+} |
Property changes on: icu46/source/test/perf/strsrchperf/strsrchperf.cpp |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |