OLD | NEW |
| (Empty) |
1 /******************************************************************** | |
2 * COPYRIGHT: | |
3 * Copyright (C) 2002-2006 IBM, Inc. All Rights Reserved. | |
4 * | |
5 ********************************************************************/ | |
6 /***************************************************************************** | |
7 * File charperf.cpp | |
8 * | |
9 * Modification History: | |
10 * Name Description | |
11 * Syn Wee Quek First Version | |
12 ****************************************************************************** | |
13 */ | |
14 | |
15 /** | |
16 * This program tests character properties performance. | |
17 * APIs tested: | |
18 * ICU4C | |
19 * Windows | |
20 */ | |
21 | |
22 #include "charperf.h" | |
23 #include "uoptions.h" | |
24 | |
25 UOption options[] = { | |
26 UOPTION_DEF("min", 'n', UOPT_REQUIRES_ARG), | |
27 UOPTION_DEF("min", 'x', UOPT_REQUIRES_ARG), | |
28 }; | |
29 int MIN_OPTION_ = 0; | |
30 int MAX_OPTION_ = 1; | |
31 | |
32 int main(int argc, const char *argv[]) | |
33 { | |
34 UErrorCode status = U_ZERO_ERROR; | |
35 CharPerformanceTest test(argc, argv, status); | |
36 if (U_FAILURE(status)){ | |
37 return status; | |
38 } | |
39 if (test.run() == FALSE){ | |
40 fprintf(stderr, "FAILED: Tests could not be run please check the " | |
41 "arguments.\n"); | |
42 return -1; | |
43 } | |
44 return 0; | |
45 } | |
46 | |
47 CharPerformanceTest::CharPerformanceTest(int32_t argc, const char *argv[], | |
48 UErrorCode &status) | |
49 : UPerfTest(argc, argv, status) | |
50 { | |
51 if (status== U_ILLEGAL_ARGUMENT_ERROR){ | |
52 fprintf(stderr,gUsageString, "charperf"); | |
53 return; | |
54 } | |
55 if (U_FAILURE(status)){ | |
56 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", | |
57 u_errorName(status)); | |
58 return; | |
59 } | |
60 | |
61 if (_remainingArgc < 0) { | |
62 // that means there are some -names not matched in the super class | |
63 // first tag is always skipped in u_parseArgs | |
64 int size = - _remainingArgc; | |
65 argv += argc - size; | |
66 argc = size; | |
67 _remainingArgc = u_parseArgs(argc, (char**)argv, | |
68 (int32_t)(sizeof(options)/sizeof(options[0])), options); | |
69 } | |
70 MIN_ = 0; | |
71 if (sizeof(wchar_t) > 2) { | |
72 // for stdlibs like glibc that supports 32 bits wchar | |
73 // we test for the whole unicode character set by default | |
74 MAX_ = 0x10ffff; | |
75 } | |
76 else { | |
77 MAX_ = 0xffff; | |
78 } | |
79 printf("MAX_ size will be 0x%x\n", MAX_); | |
80 if (options[MIN_OPTION_].doesOccur) { | |
81 MIN_ = atoi(options[MIN_OPTION_].value); | |
82 } | |
83 if (options[MAX_OPTION_].doesOccur) { | |
84 MAX_ = atoi(options[MAX_OPTION_].value); | |
85 } | |
86 } | |
87 | |
88 CharPerformanceTest::~CharPerformanceTest() | |
89 { | |
90 } | |
91 | |
92 UPerfFunction* CharPerformanceTest::runIndexedTest(int32_t index, UBool exec, | |
93 const char *&name, | |
94 char* par) | |
95 { | |
96 switch (index) { | |
97 TESTCASE(0, TestIsAlpha); | |
98 TESTCASE(1, TestIsUpper); | |
99 TESTCASE(2, TestIsLower); | |
100 TESTCASE(3, TestIsDigit); | |
101 TESTCASE(4, TestIsSpace); | |
102 TESTCASE(5, TestIsAlphaNumeric); | |
103 TESTCASE(6, TestIsPrint); | |
104 TESTCASE(7, TestIsControl); | |
105 TESTCASE(8, TestToLower); | |
106 TESTCASE(9, TestToUpper); | |
107 TESTCASE(10, TestIsWhiteSpace); | |
108 TESTCASE(11, TestStdLibIsAlpha); | |
109 TESTCASE(12, TestStdLibIsUpper); | |
110 TESTCASE(13, TestStdLibIsLower); | |
111 TESTCASE(14, TestStdLibIsDigit); | |
112 TESTCASE(15, TestStdLibIsSpace); | |
113 TESTCASE(16, TestStdLibIsAlphaNumeric); | |
114 TESTCASE(17, TestStdLibIsPrint); | |
115 TESTCASE(18, TestStdLibIsControl); | |
116 TESTCASE(19, TestStdLibToLower); | |
117 TESTCASE(20, TestStdLibToUpper); | |
118 TESTCASE(21, TestStdLibIsWhiteSpace); | |
119 default: | |
120 name = ""; | |
121 return NULL; | |
122 } | |
123 return NULL; | |
124 } | |
125 | |
126 UPerfFunction* CharPerformanceTest::TestIsAlpha() | |
127 { | |
128 return new CharPerfFunction(isAlpha, MIN_, MAX_); | |
129 } | |
130 | |
131 UPerfFunction* CharPerformanceTest::TestIsUpper() | |
132 { | |
133 return new CharPerfFunction(isUpper, MIN_, MAX_); | |
134 } | |
135 | |
136 UPerfFunction* CharPerformanceTest::TestIsLower() | |
137 { | |
138 return new CharPerfFunction(isLower, MIN_, MAX_); | |
139 } | |
140 | |
141 UPerfFunction* CharPerformanceTest::TestIsDigit() | |
142 { | |
143 return new CharPerfFunction(isDigit, MIN_, MAX_); | |
144 } | |
145 | |
146 UPerfFunction* CharPerformanceTest::TestIsSpace() | |
147 { | |
148 return new CharPerfFunction(isSpace, MIN_, MAX_); | |
149 } | |
150 | |
151 UPerfFunction* CharPerformanceTest::TestIsAlphaNumeric() | |
152 { | |
153 return new CharPerfFunction(isAlphaNumeric, MIN_, MAX_); | |
154 } | |
155 | |
156 /** | |
157 * This test may be different since c lib has a type PUNCT and it is printable. | |
158 * iswgraph is not used for testing since it is a subset of iswprint with the | |
159 * exception of returning true for white spaces. no match found in icu4c. | |
160 */ | |
161 UPerfFunction* CharPerformanceTest::TestIsPrint() | |
162 { | |
163 return new CharPerfFunction(isPrint, MIN_, MAX_); | |
164 } | |
165 | |
166 UPerfFunction* CharPerformanceTest::TestIsControl() | |
167 { | |
168 return new CharPerfFunction(isControl, MIN_, MAX_); | |
169 } | |
170 | |
171 UPerfFunction* CharPerformanceTest::TestToLower() | |
172 { | |
173 return new CharPerfFunction(toLower, MIN_, MAX_); | |
174 } | |
175 | |
176 UPerfFunction* CharPerformanceTest::TestToUpper() | |
177 { | |
178 return new CharPerfFunction(toUpper, MIN_, MAX_); | |
179 } | |
180 | |
181 UPerfFunction* CharPerformanceTest::TestIsWhiteSpace() | |
182 { | |
183 return new CharPerfFunction(isWhiteSpace, MIN_, MAX_); | |
184 } | |
185 | |
186 UPerfFunction* CharPerformanceTest::TestStdLibIsAlpha() | |
187 { | |
188 return new StdLibCharPerfFunction(StdLibIsAlpha, (wchar_t)MIN_, | |
189 (wchar_t)MAX_); | |
190 } | |
191 | |
192 UPerfFunction* CharPerformanceTest::TestStdLibIsUpper() | |
193 { | |
194 return new StdLibCharPerfFunction(StdLibIsUpper, (wchar_t)MIN_, | |
195 (wchar_t)MAX_); | |
196 } | |
197 | |
198 UPerfFunction* CharPerformanceTest::TestStdLibIsLower() | |
199 { | |
200 return new StdLibCharPerfFunction(StdLibIsLower, (wchar_t)MIN_, | |
201 (wchar_t)MAX_); | |
202 } | |
203 | |
204 UPerfFunction* CharPerformanceTest::TestStdLibIsDigit() | |
205 { | |
206 return new StdLibCharPerfFunction(StdLibIsDigit, (wchar_t)MIN_, | |
207 (wchar_t)MAX_); | |
208 } | |
209 | |
210 UPerfFunction* CharPerformanceTest::TestStdLibIsSpace() | |
211 { | |
212 return new StdLibCharPerfFunction(StdLibIsSpace, (wchar_t)MIN_, | |
213 (wchar_t)MAX_); | |
214 } | |
215 | |
216 UPerfFunction* CharPerformanceTest::TestStdLibIsAlphaNumeric() | |
217 { | |
218 return new StdLibCharPerfFunction(StdLibIsAlphaNumeric, (wchar_t)MIN_, | |
219 (wchar_t)MAX_); | |
220 } | |
221 | |
222 /** | |
223 * This test may be different since c lib has a type PUNCT and it is printable. | |
224 * iswgraph is not used for testing since it is a subset of iswprint with the | |
225 * exception of returning true for white spaces. no match found in icu4c. | |
226 */ | |
227 UPerfFunction* CharPerformanceTest::TestStdLibIsPrint() | |
228 { | |
229 return new StdLibCharPerfFunction(StdLibIsPrint, (wchar_t)MIN_, | |
230 (wchar_t)MAX_); | |
231 } | |
232 | |
233 UPerfFunction* CharPerformanceTest::TestStdLibIsControl() | |
234 { | |
235 return new StdLibCharPerfFunction(StdLibIsControl, (wchar_t)MIN_, | |
236 (wchar_t)MAX_); | |
237 } | |
238 | |
239 UPerfFunction* CharPerformanceTest::TestStdLibToLower() | |
240 { | |
241 return new StdLibCharPerfFunction(StdLibToLower, (wchar_t)MIN_, | |
242 (wchar_t)MAX_); | |
243 } | |
244 | |
245 UPerfFunction* CharPerformanceTest::TestStdLibToUpper() | |
246 { | |
247 return new StdLibCharPerfFunction(StdLibToUpper, (wchar_t)MIN_, | |
248 (wchar_t)MAX_); | |
249 } | |
250 | |
251 UPerfFunction* CharPerformanceTest::TestStdLibIsWhiteSpace() | |
252 { | |
253 return new StdLibCharPerfFunction(StdLibIsWhiteSpace, (wchar_t)MIN_, | |
254 (wchar_t)MAX_); | |
255 } | |
OLD | NEW |