| 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 |