OLD | NEW |
| (Empty) |
1 /******************************************************************** | |
2 * COPYRIGHT: | |
3 * Copyright (C) 2002-2006 International Business Machines Corporation | |
4 * and others. All Rights Reserved. | |
5 * | |
6 ********************************************************************/ | |
7 /***************************************************************************** | |
8 * File stringperf.cpp | |
9 * | |
10 * Modification History: | |
11 * Name Description | |
12 * Doug Wang Second version | |
13 * Doug Wang First Version | |
14 ****************************************************************************** | |
15 */ | |
16 | |
17 /** | |
18 * This program tests UnicodeString performance. | |
19 * APIs tested: UnicodeString | |
20 * ICU4C | |
21 * Windows 2000/XP, Linux | |
22 */ | |
23 | |
24 #include "stringperf.h" | |
25 | |
26 | |
27 int main(int argc, const char *argv[]) | |
28 { | |
29 UErrorCode status = U_ZERO_ERROR; | |
30 | |
31 bCatenatePrealloc=TRUE; | |
32 | |
33 StringPerformanceTest test(argc, argv, status); | |
34 if (U_FAILURE(status)){ | |
35 return status; | |
36 } | |
37 | |
38 int loops = LOOPS; | |
39 if (bCatenatePrealloc) { | |
40 int to_alloc = loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN); | |
41 catICU = new UnicodeString(to_alloc,'a',0); | |
42 //catICU = new UnicodeString(); | |
43 | |
44 catStd = new stlstring(); | |
45 catStd -> reserve(loops * MAXNUMLINES * (MAXSRCLEN + catenate_STRLEN)); | |
46 //catStd -> reserve(110000000); | |
47 } else { | |
48 catICU = new UnicodeString(); | |
49 catStd = new stlstring(); | |
50 } | |
51 | |
52 if (test.run() == FALSE){ | |
53 fprintf(stderr, "FAILED: Tests could not be run please check the " | |
54 "arguments.\n"); | |
55 return -1; | |
56 } | |
57 | |
58 delete catICU; | |
59 delete catStd; | |
60 return 0; | |
61 } | |
62 | |
63 StringPerformanceTest::StringPerformanceTest(int32_t argc, const char *argv[], | |
64 UErrorCode &status) | |
65 : UPerfTest(argc, argv, status) | |
66 { | |
67 filelines_=NULL; | |
68 StrBuffer=NULL; | |
69 StrBufferLen=0; | |
70 | |
71 int32_t len =0; | |
72 | |
73 if (status== U_ILLEGAL_ARGUMENT_ERROR){ | |
74 //fprintf(stderr,gUsageString, "stringperf"); | |
75 return; | |
76 } | |
77 if (U_FAILURE(status)){ | |
78 fprintf(stderr, "FAILED to create UPerfTest object. Error: %s\n", | |
79 u_errorName(status)); | |
80 return; | |
81 } | |
82 | |
83 | |
84 if(line_mode){ | |
85 ULine* filelines = getLines(status); | |
86 if(U_FAILURE(status)){ | |
87 fprintf(stderr, "FAILED to read lines from file and create UPerfTest
object. Error: %s\n", u_errorName(status)); | |
88 return; | |
89 } | |
90 | |
91 filelines_ = new ULine[numLines]; | |
92 for (int i =0; i < numLines; i++) { | |
93 len = filelines[i].len; | |
94 filelines_[i].name = new UChar[len]; | |
95 filelines_[i].len = len; | |
96 memcpy(filelines_[i].name, filelines[i].name, len * U_SIZEOF_UCHAR); | |
97 } | |
98 | |
99 }else if(bulk_mode){ | |
100 int32_t srcLen = 0; | |
101 const UChar* src = getBuffer(srcLen,status); | |
102 if(U_FAILURE(status)){ | |
103 fprintf(stderr, "FAILED to read buffer from file and create UPerfTes
t object. Error: %s\n", u_errorName(status)); | |
104 return; | |
105 } | |
106 | |
107 StrBuffer = new UChar[srcLen]; | |
108 StrBufferLen = srcLen; | |
109 memcpy(StrBuffer, src, srcLen * U_SIZEOF_UCHAR); | |
110 | |
111 } | |
112 } | |
113 | |
114 StringPerformanceTest::~StringPerformanceTest() | |
115 { | |
116 delete[] filelines_; | |
117 delete[] StrBuffer; | |
118 } | |
119 | |
120 UPerfFunction* StringPerformanceTest::runIndexedTest(int32_t index, UBool exec, | |
121 const char *&name, | |
122 char* par) | |
123 { | |
124 switch (index) { | |
125 TESTCASE(0, TestCtor); | |
126 TESTCASE(1, TestCtor1); | |
127 TESTCASE(2, TestCtor2); | |
128 TESTCASE(3, TestCtor3); | |
129 TESTCASE(4, TestAssign); | |
130 TESTCASE(5, TestAssign1); | |
131 TESTCASE(6, TestAssign2); | |
132 TESTCASE(7, TestGetch); | |
133 TESTCASE(8, TestCatenate); | |
134 TESTCASE(9, TestScan); | |
135 TESTCASE(10, TestScan1); | |
136 TESTCASE(11, TestScan2); | |
137 | |
138 TESTCASE(12, TestStdLibCtor); | |
139 TESTCASE(13, TestStdLibCtor1); | |
140 TESTCASE(14, TestStdLibCtor2); | |
141 TESTCASE(15, TestStdLibCtor3); | |
142 TESTCASE(16, TestStdLibAssign); | |
143 TESTCASE(17, TestStdLibAssign1); | |
144 TESTCASE(18, TestStdLibAssign2); | |
145 TESTCASE(19, TestStdLibGetch); | |
146 TESTCASE(20, TestStdLibCatenate); | |
147 TESTCASE(21, TestStdLibScan); | |
148 TESTCASE(22, TestStdLibScan1); | |
149 TESTCASE(23, TestStdLibScan2); | |
150 | |
151 default: | |
152 name = ""; | |
153 return NULL; | |
154 } | |
155 return NULL; | |
156 } | |
157 | |
158 UPerfFunction* StringPerformanceTest::TestCtor() | |
159 { | |
160 if (line_mode) { | |
161 return new StringPerfFunction(ctor, filelines_, numLines, uselen); | |
162 } else { | |
163 return new StringPerfFunction(ctor, StrBuffer, StrBufferLen, uselen); | |
164 } | |
165 } | |
166 | |
167 UPerfFunction* StringPerformanceTest::TestCtor1() | |
168 { | |
169 if (line_mode) { | |
170 return new StringPerfFunction(ctor1, filelines_, numLines, uselen); | |
171 } else { | |
172 return new StringPerfFunction(ctor1, StrBuffer, StrBufferLen, uselen); | |
173 } | |
174 } | |
175 | |
176 UPerfFunction* StringPerformanceTest::TestCtor2() | |
177 { | |
178 if (line_mode) { | |
179 return new StringPerfFunction(ctor2, filelines_, numLines, uselen); | |
180 } else { | |
181 return new StringPerfFunction(ctor2, StrBuffer, StrBufferLen, uselen); | |
182 } | |
183 } | |
184 | |
185 UPerfFunction* StringPerformanceTest::TestCtor3() | |
186 { | |
187 if (line_mode) { | |
188 return new StringPerfFunction(ctor3, filelines_, numLines, uselen); | |
189 } else { | |
190 return new StringPerfFunction(ctor3, StrBuffer, StrBufferLen, uselen); | |
191 } | |
192 } | |
193 | |
194 UPerfFunction* StringPerformanceTest::TestAssign() | |
195 { | |
196 if (line_mode) { | |
197 return new StringPerfFunction(assign, filelines_, numLines, uselen); | |
198 } else { | |
199 return new StringPerfFunction(assign, StrBuffer, StrBufferLen, uselen); | |
200 } | |
201 } | |
202 | |
203 UPerfFunction* StringPerformanceTest::TestAssign1() | |
204 { | |
205 if (line_mode) { | |
206 return new StringPerfFunction(assign1, filelines_, numLines, uselen); | |
207 } else { | |
208 return new StringPerfFunction(assign1, StrBuffer, StrBufferLen, uselen); | |
209 } | |
210 } | |
211 | |
212 UPerfFunction* StringPerformanceTest::TestAssign2() | |
213 { | |
214 if (line_mode) { | |
215 return new StringPerfFunction(assign2, filelines_, numLines, uselen); | |
216 } else { | |
217 return new StringPerfFunction(assign2, StrBuffer, StrBufferLen, uselen); | |
218 } | |
219 } | |
220 | |
221 | |
222 UPerfFunction* StringPerformanceTest::TestGetch() | |
223 { | |
224 if (line_mode) { | |
225 return new StringPerfFunction(getch, filelines_, numLines, uselen); | |
226 } else { | |
227 return new StringPerfFunction(getch, StrBuffer, StrBufferLen, uselen); | |
228 } | |
229 } | |
230 | |
231 UPerfFunction* StringPerformanceTest::TestCatenate() | |
232 { | |
233 if (line_mode) { | |
234 return new StringPerfFunction(catenate, filelines_, numLines, uselen); | |
235 } else { | |
236 //return new StringPerfFunction(catenate, buffer, bufferLen, uselen); | |
237 return new StringPerfFunction(catenate, StrBuffer, StrBufferLen, uselen)
; | |
238 } | |
239 } | |
240 | |
241 UPerfFunction* StringPerformanceTest::TestScan() | |
242 { | |
243 if (line_mode) { | |
244 return new StringPerfFunction(scan, filelines_, numLines, uselen); | |
245 } else { | |
246 return new StringPerfFunction(scan, StrBuffer, StrBufferLen, uselen); | |
247 } | |
248 } | |
249 | |
250 UPerfFunction* StringPerformanceTest::TestScan1() | |
251 { | |
252 if (line_mode) { | |
253 return new StringPerfFunction(scan1, filelines_, numLines, uselen); | |
254 } else { | |
255 return new StringPerfFunction(scan1, StrBuffer, StrBufferLen, uselen); | |
256 } | |
257 } | |
258 | |
259 UPerfFunction* StringPerformanceTest::TestScan2() | |
260 { | |
261 if (line_mode) { | |
262 return new StringPerfFunction(scan2, filelines_, numLines, uselen); | |
263 } else { | |
264 return new StringPerfFunction(scan2, StrBuffer, StrBufferLen, uselen); | |
265 } | |
266 } | |
267 | |
268 UPerfFunction* StringPerformanceTest::TestStdLibCtor() | |
269 { | |
270 if (line_mode) { | |
271 return new StringPerfFunction(StdLibCtor, filelines_, numLines, uselen); | |
272 } else { | |
273 return new StringPerfFunction(StdLibCtor, StrBuffer, StrBufferLen, usele
n); | |
274 } | |
275 } | |
276 | |
277 UPerfFunction* StringPerformanceTest::TestStdLibCtor1() | |
278 { | |
279 if (line_mode) { | |
280 return new StringPerfFunction(StdLibCtor1, filelines_, numLines, uselen)
; | |
281 } else { | |
282 return new StringPerfFunction(StdLibCtor1, StrBuffer, StrBufferLen, usel
en); | |
283 } | |
284 } | |
285 | |
286 UPerfFunction* StringPerformanceTest::TestStdLibCtor2() | |
287 { | |
288 if (line_mode) { | |
289 return new StringPerfFunction(StdLibCtor2, filelines_, numLines, uselen)
; | |
290 } else { | |
291 return new StringPerfFunction(StdLibCtor2, StrBuffer, StrBufferLen, usel
en); | |
292 } | |
293 } | |
294 | |
295 UPerfFunction* StringPerformanceTest::TestStdLibCtor3() | |
296 { | |
297 if (line_mode) { | |
298 return new StringPerfFunction(StdLibCtor3, filelines_, numLines, uselen)
; | |
299 } else { | |
300 return new StringPerfFunction(StdLibCtor3, StrBuffer, StrBufferLen, usel
en); | |
301 } | |
302 } | |
303 | |
304 UPerfFunction* StringPerformanceTest::TestStdLibAssign() | |
305 { | |
306 if (line_mode) { | |
307 return new StringPerfFunction(StdLibAssign, filelines_, numLines, uselen
); | |
308 } else { | |
309 return new StringPerfFunction(StdLibAssign, StrBuffer, StrBufferLen, use
len); | |
310 } | |
311 } | |
312 | |
313 UPerfFunction* StringPerformanceTest::TestStdLibAssign1() | |
314 { | |
315 if (line_mode) { | |
316 return new StringPerfFunction(StdLibAssign1, filelines_, numLines, usele
n); | |
317 } else { | |
318 return new StringPerfFunction(StdLibAssign1, StrBuffer, StrBufferLen, us
elen); | |
319 } | |
320 } | |
321 | |
322 UPerfFunction* StringPerformanceTest::TestStdLibAssign2() | |
323 { | |
324 if (line_mode) { | |
325 return new StringPerfFunction(StdLibAssign2, filelines_, numLines, usele
n); | |
326 } else { | |
327 return new StringPerfFunction(StdLibAssign2, StrBuffer, StrBufferLen, us
elen); | |
328 } | |
329 } | |
330 | |
331 UPerfFunction* StringPerformanceTest::TestStdLibGetch() | |
332 { | |
333 if (line_mode) { | |
334 return new StringPerfFunction(StdLibGetch, filelines_, numLines, uselen)
; | |
335 } else { | |
336 return new StringPerfFunction(StdLibGetch, StrBuffer, StrBufferLen, usel
en); | |
337 } | |
338 } | |
339 | |
340 UPerfFunction* StringPerformanceTest::TestStdLibCatenate() | |
341 { | |
342 if (line_mode) { | |
343 return new StringPerfFunction(StdLibCatenate, filelines_, numLines, usel
en); | |
344 } else { | |
345 //return new StringPerfFunction(StdLibCatenate, buffer, bufferLen, usele
n); | |
346 return new StringPerfFunction(StdLibCatenate, StrBuffer, StrBufferLen, u
selen); | |
347 } | |
348 } | |
349 | |
350 UPerfFunction* StringPerformanceTest::TestStdLibScan() | |
351 { | |
352 if (line_mode) { | |
353 return new StringPerfFunction(StdLibScan, filelines_, numLines, uselen); | |
354 } else { | |
355 return new StringPerfFunction(StdLibScan, StrBuffer, StrBufferLen, usele
n); | |
356 } | |
357 } | |
358 | |
359 UPerfFunction* StringPerformanceTest::TestStdLibScan1() | |
360 { | |
361 if (line_mode) { | |
362 return new StringPerfFunction(StdLibScan1, filelines_, numLines, uselen)
; | |
363 } else { | |
364 return new StringPerfFunction(StdLibScan1, StrBuffer, StrBufferLen, usel
en); | |
365 } | |
366 } | |
367 | |
368 UPerfFunction* StringPerformanceTest::TestStdLibScan2() | |
369 { | |
370 if (line_mode) { | |
371 return new StringPerfFunction(StdLibScan2, filelines_, numLines, uselen)
; | |
372 } else { | |
373 return new StringPerfFunction(StdLibScan2, StrBuffer, StrBufferLen, usel
en); | |
374 } | |
375 } | |
376 | |
377 | |
OLD | NEW |