]> git.saurik.com Git - apple/icu.git/blob - icuSources/test/perf/strsrchperf/strsrchperf.cpp
ICU-461.18.tar.gz
[apple/icu.git] / icuSources / test / perf / strsrchperf / strsrchperf.cpp
1 /********************************************************************
2 * COPYRIGHT:
3 * Copyright (C) 2008-2009 IBM, Inc. All Rights Reserved.
4 *
5 ********************************************************************/
6 /**
7 * This program tests string search performance.
8 * APIs tested:
9 * ICU4C
10 */
11
12 #include "strsrchperf.h"
13
14 StringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status)
15 :UPerfTest(argc,argv,status){
16 int32_t start, end;
17
18 #ifdef TEST_BOYER_MOORE_SEARCH
19 bms = NULL;
20 #else
21 srch = NULL;
22 #endif
23
24 pttrn = NULL;
25 if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){
26 fprintf(stderr,gUsageString, "strsrchperf");
27 return;
28 }
29 /* Get the Text */
30 src = getBuffer(srcLen, status);
31
32 #if 0
33 /* Get a word to find. Do this by selecting a random word with a word breakiterator. */
34 UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status);
35 if(U_FAILURE(status)){
36 fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status));
37 return;
38 }
39 start = ubrk_preceding(brk, 1000);
40 end = ubrk_following(brk, start);
41 pttrnLen = end - start;
42 UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
43 for (int i = 0; i < pttrnLen; i++) {
44 temp[i] = src[start++];
45 }
46 pttrn = temp; /* store word in pttrn */
47 ubrk_close(brk);
48 #else
49 /* The first line of the file contains the pattern */
50 start = 0;
51
52 for(end = start; ; end += 1) {
53 UChar ch = src[end];
54
55 if (ch == 0x000A || ch == 0x000D || ch == 0x2028) {
56 break;
57 }
58 }
59
60 pttrnLen = end - start;
61 UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
62 for (int i = 0; i < pttrnLen; i++) {
63 temp[i] = src[start++];
64 }
65 pttrn = temp; /* store word in pttrn */
66 #endif
67
68 #ifdef TEST_BOYER_MOORE_SEARCH
69 UnicodeString patternString(pttrn, pttrnLen);
70 UCollator *coll = ucol_open(locale, &status);
71 CollData *data = CollData::open(coll, status);
72
73 targetString = new UnicodeString(src, srcLen);
74 bms = new BoyerMooreSearch(data, patternString, targetString, status);
75 #else
76 /* Create the StringSearch object to be use in performance test. */
77 srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status);
78 #endif
79
80 if(U_FAILURE(status)){
81 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status));
82 return;
83 }
84
85 }
86
87 StringSearchPerformanceTest::~StringSearchPerformanceTest() {
88 CollData *data = bms->getData();
89 UCollator *coll = data->getCollator();
90
91 delete bms;
92 delete targetString;
93 CollData::close(data);
94 ucol_close(coll);
95
96 if (pttrn != NULL) {
97 free(pttrn);
98 }
99
100 #ifndef TEST_BOYER_MOORE_SEARCH
101 if (srch != NULL) {
102 usearch_close(srch);
103 }
104 #endif
105 }
106
107 UPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) {
108 switch (index) {
109 TESTCASE(0,Test_ICU_Forward_Search);
110 TESTCASE(1,Test_ICU_Backward_Search);
111
112 default:
113 name = "";
114 return NULL;
115 }
116 return NULL;
117 }
118
119 UPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){
120 #ifdef TEST_BOYER_MOORE_SEARCH
121 StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUForwardSearch, bms, src, srcLen, pttrn, pttrnLen);
122 #else
123 StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen);
124 #endif
125 return func;
126 }
127
128 UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){
129 #ifdef TEST_BOYER_MOORE_SEARCH
130 StringSearchPerfFunction *func = new StringSearchPerfFunction(ICUBackwardSearch, bms, src, srcLen, pttrn, pttrnLen);
131 #else
132 StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen);
133 #endif
134 return func;
135 }
136
137 int main (int argc, const char* argv[]) {
138 UErrorCode status = U_ZERO_ERROR;
139 StringSearchPerformanceTest test(argc, argv, status);
140 if(U_FAILURE(status)){
141 return status;
142 }
143 if(test.run()==FALSE){
144 fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n");
145 return -1;
146 }
147 return 0;
148 }