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 |