]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/perf/strsrchperf/strsrchperf.cpp
ICU-59117.0.1.tar.gz
[apple/icu.git] / icuSources / test / perf / strsrchperf / strsrchperf.cpp
CommitLineData
f3c0d7a5
A
1/************************************************************************
2 * © 2016 and later: Unicode, Inc. and others.
3 * License & terms of use: http://www.unicode.org/copyright.html#License
4 *
5 *************************************************************************
6 ********************************************************************
46f4442e 7 * COPYRIGHT:
51004dcb 8 * Copyright (C) 2008-2012 IBM, Inc. All Rights Reserved.
46f4442e
A
9 *
10 ********************************************************************/
11/**
12 * This program tests string search performance.
13 * APIs tested:
14 * ICU4C
15 */
16
17#include "strsrchperf.h"
18
19StringSearchPerformanceTest::StringSearchPerformanceTest(int32_t argc, const char *argv[], UErrorCode &status)
20:UPerfTest(argc,argv,status){
21 int32_t start, end;
22 srch = NULL;
23 pttrn = NULL;
24 if(status== U_ILLEGAL_ARGUMENT_ERROR || line_mode){
25 fprintf(stderr,gUsageString, "strsrchperf");
26 return;
27 }
28 /* Get the Text */
29 src = getBuffer(srcLen, status);
729e4ab9
A
30
31#if 0
46f4442e
A
32 /* Get a word to find. Do this by selecting a random word with a word breakiterator. */
33 UBreakIterator* brk = ubrk_open(UBRK_WORD, locale, src, srcLen, &status);
34 if(U_FAILURE(status)){
35 fprintf(stderr, "FAILED to create pattern for searching. Error: %s\n", u_errorName(status));
36 return;
37 }
38 start = ubrk_preceding(brk, 1000);
39 end = ubrk_following(brk, start);
40 pttrnLen = end - start;
41 UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
42 for (int i = 0; i < pttrnLen; i++) {
43 temp[i] = src[start++];
44 }
45 pttrn = temp; /* store word in pttrn */
46 ubrk_close(brk);
729e4ab9
A
47#else
48 /* The first line of the file contains the pattern */
49 start = 0;
50
51 for(end = start; ; end += 1) {
52 UChar ch = src[end];
53
54 if (ch == 0x000A || ch == 0x000D || ch == 0x2028) {
55 break;
56 }
57 }
58
59 pttrnLen = end - start;
60 UChar* temp = (UChar*)malloc(sizeof(UChar)*(pttrnLen));
61 for (int i = 0; i < pttrnLen; i++) {
62 temp[i] = src[start++];
63 }
64 pttrn = temp; /* store word in pttrn */
65#endif
46f4442e
A
66
67 /* Create the StringSearch object to be use in performance test. */
68 srch = usearch_open(pttrn, pttrnLen, src, srcLen, locale, NULL, &status);
729e4ab9 69
46f4442e
A
70 if(U_FAILURE(status)){
71 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", u_errorName(status));
72 return;
73 }
74
75}
76
77StringSearchPerformanceTest::~StringSearchPerformanceTest() {
78 if (pttrn != NULL) {
79 free(pttrn);
80 }
81 if (srch != NULL) {
82 usearch_close(srch);
83 }
84}
85
86UPerfFunction* StringSearchPerformanceTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char *par) {
87 switch (index) {
88 TESTCASE(0,Test_ICU_Forward_Search);
89 TESTCASE(1,Test_ICU_Backward_Search);
90
91 default:
92 name = "";
93 return NULL;
94 }
95 return NULL;
96}
97
98UPerfFunction* StringSearchPerformanceTest::Test_ICU_Forward_Search(){
99 StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUForwardSearch, srch, src, srcLen, pttrn, pttrnLen);
100 return func;
101}
102
103UPerfFunction* StringSearchPerformanceTest::Test_ICU_Backward_Search(){
104 StringSearchPerfFunction* func = new StringSearchPerfFunction(ICUBackwardSearch, srch, src, srcLen, pttrn, pttrnLen);
105 return func;
106}
107
108int main (int argc, const char* argv[]) {
109 UErrorCode status = U_ZERO_ERROR;
110 StringSearchPerformanceTest test(argc, argv, status);
111 if(U_FAILURE(status)){
112 return status;
113 }
114 if(test.run()==FALSE){
115 fprintf(stderr,"FAILED: Tests could not be run please check the arguments.\n");
116 return -1;
117 }
118 return 0;
119}