| OLD | NEW |
| 1 /* | 1 /* |
| 2 ********************************************************************** | 2 ********************************************************************** |
| 3 * Copyright (c) 2011-2012,International Business Machines | 3 * Copyright (c) 2011-2014,International Business Machines |
| 4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
| 5 ********************************************************************** | 5 ********************************************************************** |
| 6 */ | 6 */ |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include "sieve.h" | 10 #include "sieve.h" |
| 11 #include "unicode/utimer.h" | 11 #include "unicode/utimer.h" |
| 12 #include "udbgutil.h" | 12 #include "udbgutil.h" |
| 13 #include "unicode/ustring.h" | 13 #include "unicode/ustring.h" |
| 14 #include "unicode/decimfmt.h" | 14 #include "unicode/decimfmt.h" |
| 15 #include "unicode/udat.h" | 15 #include "unicode/udat.h" |
| 16 U_NAMESPACE_USE |
| 16 | 17 |
| 17 #if U_PLATFORM_IMPLEMENTS_POSIX | 18 #if U_PLATFORM_IMPLEMENTS_POSIX |
| 18 #include <unistd.h> | 19 #include <unistd.h> |
| 19 | 20 |
| 20 static void usage(const char *prog) { | 21 static void usage(const char *prog) { |
| 21 fprintf(stderr, "Usage: %s [ -f outfile.xml ] [ -t 'TestName' ]\n", prog); | 22 fprintf(stderr, "Usage: %s [ -f outfile.xml ] [ -t 'TestName' ]\n", prog); |
| 22 } | 23 } |
| 23 #endif | 24 #endif |
| 24 | 25 |
| 25 void runTests(void); | 26 void runTests(void); |
| 26 | 27 |
| 27 #ifndef ITERATIONS | 28 #ifndef ITERATIONS |
| 28 #define ITERATIONS 5 | 29 #define ITERATIONS 5 |
| 29 #endif | 30 #endif |
| 30 | 31 |
| 32 #ifndef TEST_LOCALE |
| 33 #define TEST_LOCALE "en_US" |
| 34 #endif |
| 31 | 35 |
| 32 FILE *out = NULL; | 36 FILE *out = NULL; |
| 33 UErrorCode setupStatus = U_ZERO_ERROR; | 37 UErrorCode setupStatus = U_ZERO_ERROR; |
| 34 const char *outName = NULL; | 38 const char *outName = NULL; |
| 35 int listmode = 0; | 39 int listmode = 0; |
| 36 const char *testName = NULL; | 40 const char *testName = NULL; |
| 37 const char *progname = NULL; | 41 const char *progname = NULL; |
| 38 int errflg = 0; | 42 int errflg = 0; |
| 39 int testhit = 0; | 43 int testhit = 0; |
| 40 | 44 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 55 #if U_DEBUG | 59 #if U_DEBUG |
| 56 { | 60 { |
| 57 double m; | 61 double m; |
| 58 double s = uprv_getSieveTime(&m); | 62 double s = uprv_getSieveTime(&m); |
| 59 fprintf(stderr, "** Standard sieve time: %.9fs +/- %.9fs (%d iterations)\n",
s,m, (int)U_LOTS_OF_TIMES); | 63 fprintf(stderr, "** Standard sieve time: %.9fs +/- %.9fs (%d iterations)\n",
s,m, (int)U_LOTS_OF_TIMES); |
| 60 } | 64 } |
| 61 #endif | 65 #endif |
| 62 | 66 |
| 63 #if U_PLATFORM_IMPLEMENTS_POSIX | 67 #if U_PLATFORM_IMPLEMENTS_POSIX |
| 64 int c; | 68 int c; |
| 65 extern int optind; | 69 //extern int optind; |
| 66 extern char *optarg; | 70 extern char *optarg; |
| 67 while((c=getopt(argc,argv,"lf:t:")) != EOF) { | 71 while((c=getopt(argc,argv,"lf:t:")) != EOF) { |
| 68 switch(c) { | 72 switch(c) { |
| 69 case 'f': | 73 case 'f': |
| 70 outName = optarg; | 74 outName = optarg; |
| 71 break; | 75 break; |
| 72 case 'l': | 76 case 'l': |
| 73 listmode++; | 77 listmode++; |
| 74 break; | 78 break; |
| 75 case 't': | 79 case 't': |
| (...skipping 30 matching lines...) Expand all Loading... |
| 106 return 1; | 110 return 1; |
| 107 } else { | 111 } else { |
| 108 fprintf(stderr, "# writing results to %s\n", outName); | 112 fprintf(stderr, "# writing results to %s\n", outName); |
| 109 } | 113 } |
| 110 fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); | 114 fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); |
| 111 fprintf(out, "<tests icu=\"%s\">\n", U_ICU_VERSION); | 115 fprintf(out, "<tests icu=\"%s\">\n", U_ICU_VERSION); |
| 112 fprintf(out, "<!-- %s -->\n", U_COPYRIGHT_STRING); | 116 fprintf(out, "<!-- %s -->\n", U_COPYRIGHT_STRING); |
| 113 } else { | 117 } else { |
| 114 fprintf(stderr, "# (no output)\n"); | 118 fprintf(stderr, "# (no output)\n"); |
| 115 } | 119 } |
| 116 | 120 |
| 117 if(listmode && testName!=NULL) { | 121 if(listmode && testName!=NULL) { |
| 118 fprintf(stderr, "ERR: no -l mode when specific test with -t\n"); | 122 fprintf(stderr, "ERR: no -l mode when specific test with -t\n"); |
| 119 usage(progname); | 123 usage(progname); |
| 120 return 1; | 124 return 1; |
| 121 } | 125 } |
| 122 | 126 |
| 123 | 127 |
| 124 runTests(); | 128 runTests(); |
| 125 | 129 |
| 126 | 130 |
| 127 if(out!=NULL) { | 131 if(out!=NULL) { |
| 128 #ifndef SKIP_INFO | 132 #ifndef SKIP_INFO |
| 129 udbg_writeIcuInfo(out); | 133 udbg_writeIcuInfo(out); |
| 130 #endif | 134 #endif |
| 131 fprintf(out, "</tests>\n"); | 135 fprintf(out, "</tests>\n"); |
| 132 fclose(out); | 136 fclose(out); |
| 133 } | 137 } |
| 134 | 138 |
| 135 if(U_FAILURE(setupStatus)) { | 139 if(U_FAILURE(setupStatus)) { |
| 136 fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); | 140 fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); |
| 137 return 1; | 141 return 1; |
| 138 } | 142 } |
| 139 | 143 |
| 140 return 0; | 144 return 0; |
| 141 } | 145 } |
| 142 | 146 |
| 143 class HowExpensiveTest { | 147 class HowExpensiveTest { |
| 144 public: | 148 public: |
| 145 virtual ~HowExpensiveTest(){} | 149 virtual ~HowExpensiveTest(){} |
| 146 protected: | 150 protected: |
| 147 HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(nam
e), fFile(file), fLine(line) {} | 151 HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(nam
e), fFile(file), fLine(line) {} |
| 148 protected: | 152 protected: |
| 149 /** | 153 /** |
| 150 * @return number of iterations | 154 * @return number of iterations |
| 151 */ | 155 */ |
| 152 virtual int32_t run() = 0; | 156 virtual int32_t run() = 0; |
| 153 virtual void warmup() { run(); } | 157 virtual void warmup() { run(); } |
| 154 public: | 158 public: |
| 155 virtual const char *getName() { return fName; } | 159 virtual const char *getName() { return fName; } |
| 156 public: | 160 public: |
| 157 virtual int32_t runTest(double *subTime) { | 161 virtual int32_t runTest(double *subTime) { |
| 158 UTimer a,b; | 162 UTimer a,b; |
| 159 utimer_getTime(&a); | 163 utimer_getTime(&a); |
| 160 int32_t iter = run(); | 164 int32_t iter = run(); |
| 161 utimer_getTime(&b); | 165 utimer_getTime(&b); |
| 162 *subTime = utimer_getDeltaSeconds(&a,&b); | 166 *subTime = utimer_getDeltaSeconds(&a,&b); |
| 163 return iter; | 167 return iter; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 193 fprintf(stderr, "%s:%d:\t%s\n", t.fFile, t.fLine, t.getName()); | 197 fprintf(stderr, "%s:%d:\t%s\n", t.fFile, t.fLine, t.getName()); |
| 194 testhit++; | 198 testhit++; |
| 195 return; | 199 return; |
| 196 } else { | 200 } else { |
| 197 fprintf(stderr, "%s:%d: Running: %s\n", t.fFile, t.fLine, t.getName()); | 201 fprintf(stderr, "%s:%d: Running: %s\n", t.fFile, t.fLine, t.getName()); |
| 198 testhit++; | 202 testhit++; |
| 199 } | 203 } |
| 200 double sieveTime = uprv_getSieveTime(NULL); | 204 double sieveTime = uprv_getSieveTime(NULL); |
| 201 double st; | 205 double st; |
| 202 double me; | 206 double me; |
| 203 | 207 |
| 204 fflush(stdout); | 208 fflush(stdout); |
| 205 fflush(stderr); | 209 fflush(stderr); |
| 206 int32_t iter = t.runTests(&st,&me); | 210 int32_t iter = t.runTests(&st,&me); |
| 207 if(U_FAILURE(setupStatus)) { | 211 if(U_FAILURE(setupStatus)) { |
| 208 fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); | 212 fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); |
| 209 return; | 213 return; |
| 210 } | 214 } |
| 211 fflush(stdout); | 215 fflush(stdout); |
| 212 fflush(stderr); | 216 fflush(stderr); |
| 213 | 217 |
| 214 double stn = st/sieveTime; | 218 double stn = st/sieveTime; |
| 215 | 219 |
| 216 printf("%s\t%.9f\t%.9f +/- %.9f, @ %d iter\n", t.getName(),stn,st,me,iter); | 220 printf("%s\t%.9f\t%.9f +/- %.9f, @ %d iter\n", t.getName(),stn,st,me,iter); |
| 217 | 221 |
| 218 if(out!=NULL) { | 222 if(out!=NULL) { |
| 219 fprintf(out, " <test name=\"%s\" standardizedTime=\"%f\" realDuration=\"%f
\" marginOfError=\"%f\" iterations=\"%d\" />\n", | 223 fprintf(out, " <test name=\"%s\" standardizedTime=\"%f\" realDuration=\"%f
\" marginOfError=\"%f\" iterations=\"%d\" />\n", |
| 220 tn,stn,st,me,iter); | 224 tn,stn,st,me,iter); |
| 221 fflush(out); | 225 fflush(out); |
| 222 } | 226 } |
| 223 } | 227 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 char name[100]; | 269 char name[100]; |
| 266 public: | 270 public: |
| 267 virtual const char *getName() { | 271 virtual const char *getName() { |
| 268 if(name[0]==0) { | 272 if(name[0]==0) { |
| 269 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); | 273 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); |
| 270 } | 274 } |
| 271 return name; | 275 return name; |
| 272 } | 276 } |
| 273 protected: | 277 protected: |
| 274 virtual UNumberFormat* initFmt() { | 278 virtual UNumberFormat* initFmt() { |
| 275 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_U
S", 0, &setupStatus); | 279 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_
LOCALE, 0, &setupStatus); |
| 276 } | 280 } |
| 277 virtual const char *getClassName() { | 281 virtual const char *getClassName() { |
| 278 return "NumTest"; | 282 return "NumTest"; |
| 279 } | 283 } |
| 280 public: | 284 public: |
| 281 NumTest(const char *pat, const char *num, double expect, const char *FILE, int
LINE) | 285 NumTest(const char *pat, const char *num, double expect, const char *FILE, int
LINE) |
| 282 : HowExpensiveTest("(n/a)",FILE, LINE), | 286 : HowExpensiveTest("(n/a)",FILE, LINE), |
| 283 fExpect(expect), | 287 fExpect(expect), |
| 284 fFmt(0), | 288 fFmt(0), |
| 285 fPat(pat, -1, US_INV), | 289 fPat(pat, -1, US_INV), |
| 286 fString(num,-1,US_INV), | 290 fString(num,-1,US_INV), |
| 287 fStr(fString.getTerminatedBuffer()), | 291 fStr(fString.getTerminatedBuffer()), |
| 288 fLen(u_strlen(fStr)), | 292 fLen(u_strlen(fStr)), |
| 289 fFile(FILE), | 293 fFile(FILE), |
| 290 fLine(LINE), | 294 fLine(LINE), |
| 291 fCPat(pat), | 295 fCPat(pat), |
| 292 fCStr(num) | 296 fCStr(num) |
| 293 { | 297 { |
| 294 name[0]=0; | 298 name[0]=0; |
| 295 } | 299 } |
| 296 void warmup() { | 300 void warmup() { |
| 297 fFmt = initFmt(); | 301 fFmt = initFmt(); |
| 298 if(U_SUCCESS(setupStatus)) { | 302 if(U_SUCCESS(setupStatus)) { |
| 299 double trial = unum_parseDouble(fFmt,fStr,fLen, NULL, &setupStatus); | 303 double trial = unum_parseDouble(fFmt,fStr,fLen, NULL, &setupStatus); |
| 300 if(U_SUCCESS(setupStatus) && trial!=fExpect) { | 304 if(U_SUCCESS(setupStatus) && trial!=fExpect) { |
| 301 setupStatus = U_INTERNAL_PROGRAM_ERROR; | 305 setupStatus = U_INTERNAL_PROGRAM_ERROR; |
| 302 printf("%s:%d: warmup() %s got %.8f expected %.8f\n", | 306 printf("%s:%d: warmup() %s got %.8f expected %.8f\n", |
| 303 fFile,fLine,getName(),trial,fExpect); | 307 fFile,fLine,getName(),trial,fExpect); |
| 304 } | 308 } |
| 305 } | 309 } |
| 306 } | 310 } |
| 307 int32_t run() { | 311 int32_t run() { |
| 308 double trial=0.0; | 312 double trial=0.0; |
| 309 int i; | 313 int i; |
| 310 for(i=0;i<U_LOTS_OF_TIMES;i++){ | 314 for(i=0;i<U_LOTS_OF_TIMES;i++){ |
| 311 trial = unum_parse(fFmt,fStr,fLen, NULL, &setupStatus); | 315 trial = unum_parse(fFmt,fStr,fLen, NULL, &setupStatus); |
| 312 } | 316 } |
| 313 return i; | 317 return i; |
| 314 } | 318 } |
| 315 virtual ~NumTest(){} | 319 virtual ~NumTest(){} |
| 316 }; | 320 }; |
| 317 | 321 |
| 318 #define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } | 322 #define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } |
| 319 | 323 |
| 320 | 324 |
| 321 class AttrNumTest : public NumTest | 325 class AttrNumTest : public NumTest |
| 322 { | 326 { |
| 323 private: | 327 private: |
| 324 UNumberFormatAttribute fAttr; | 328 UNumberFormatAttribute fAttr; |
| 325 int32_t fAttrValue; | 329 int32_t fAttrValue; |
| 326 char name2[100]; | 330 char name2[100]; |
| 327 protected: | 331 protected: |
| 328 virtual const char *getClassName() { | 332 virtual const char *getClassName() { |
| 329 sprintf(name2,"AttrNumTest:%d=%d", fAttr,fAttrValue); | 333 sprintf(name2,"AttrNumTest:%d=%d", fAttr,fAttrValue); |
| 330 return name2; | 334 return name2; |
| 331 } | 335 } |
| 332 public: | 336 public: |
| 333 AttrNumTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE, UNumberFormatAttribute attr, int32_t newValue) | 337 AttrNumTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE, UNumberFormatAttribute attr, int32_t newValue) |
| 334 : NumTest(pat,num,expect,FILE,LINE), | 338 : NumTest(pat,num,expect,FILE,LINE), |
| 335 fAttr(attr), | 339 fAttr(attr), |
| 336 fAttrValue(newValue) | 340 fAttrValue(newValue) |
| 337 { | 341 { |
| 338 } | 342 } |
| 339 virtual UNumberFormat* initFmt() { | 343 virtual UNumberFormat* initFmt() { |
| 340 UNumberFormat *fmt = NumTest::initFmt(); | 344 UNumberFormat *fmt = NumTest::initFmt(); |
| 341 unum_setAttribute(fmt, fAttr,fAttrValue); | 345 unum_setAttribute(fmt, fAttr,fAttrValue); |
| 342 return fmt; | 346 return fmt; |
| 343 } | 347 } |
| 344 }; | 348 }; |
| 345 | 349 |
| 346 #define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v);
runTestOn(t); } | 350 #define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v);
runTestOn(t); } |
| 347 | 351 |
| 348 | 352 |
| 349 class NOXNumTest : public NumTest | 353 class NOXNumTest : public NumTest |
| 350 { | 354 { |
| 351 private: | 355 private: |
| 352 UNumberFormatAttribute fAttr; | 356 UNumberFormatAttribute fAttr; |
| 353 int32_t fAttrValue; | 357 int32_t fAttrValue; |
| 354 char name2[100]; | 358 char name2[100]; |
| 355 protected: | 359 protected: |
| 356 virtual const char *getClassName() { | 360 virtual const char *getClassName() { |
| 357 sprintf(name2,"NOXNumTest:%d=%d", fAttr,fAttrValue); | 361 sprintf(name2,"NOXNumTest:%d=%d", fAttr,fAttrValue); |
| 358 return name2; | 362 return name2; |
| 359 } | 363 } |
| 360 public: | 364 public: |
| 361 NOXNumTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE /*, UNumberFormatAttribute attr, int32_t newValue */) | 365 NOXNumTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE /*, UNumberFormatAttribute attr, int32_t newValue */) |
| 362 : NumTest(pat,num,expect,FILE,LINE) /* , | 366 : NumTest(pat,num,expect,FILE,LINE) /* , |
| 363 fAttr(attr), | 367 fAttr(attr), |
| 364 fAttrValue(newValue) */ | 368 fAttrValue(newValue) */ |
| 365 { | 369 { |
| 366 } | 370 } |
| 367 virtual UNumberFormat* initFmt() { | 371 virtual UNumberFormat* initFmt() { |
| 368 UNumberFormat *fmt = NumTest::initFmt(); | 372 UNumberFormat *fmt = NumTest::initFmt(); |
| 369 //unum_setAttribute(fmt, fAttr,fAttrValue); | 373 //unum_setAttribute(fmt, fAttr,fAttrValue); |
| 370 return fmt; | 374 return fmt; |
| 371 } | 375 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 393 char name[100]; | 397 char name[100]; |
| 394 public: | 398 public: |
| 395 virtual const char *getName() { | 399 virtual const char *getName() { |
| 396 if(name[0]==0) { | 400 if(name[0]==0) { |
| 397 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); | 401 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); |
| 398 } | 402 } |
| 399 return name; | 403 return name; |
| 400 } | 404 } |
| 401 protected: | 405 protected: |
| 402 virtual UNumberFormat* initFmt() { | 406 virtual UNumberFormat* initFmt() { |
| 403 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_U
S", 0, &setupStatus); | 407 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_
LOCALE, 0, &setupStatus); |
| 404 } | 408 } |
| 405 virtual const char *getClassName() { | 409 virtual const char *getClassName() { |
| 406 return "NumFmtTest"; | 410 return "NumFmtTest"; |
| 407 } | 411 } |
| 408 public: | 412 public: |
| 409 NumFmtTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE) | 413 NumFmtTest(const char *pat, const char *num, double expect, const char *FILE,
int LINE) |
| 410 : HowExpensiveTest("(n/a)",FILE, LINE), | 414 : HowExpensiveTest("(n/a)",FILE, LINE), |
| 411 fExpect(expect), | 415 fExpect(expect), |
| 412 fFmt(0), | 416 fFmt(0), |
| 413 fPat(pat, -1, US_INV), | 417 fPat(pat, -1, US_INV), |
| 414 fString(num,-1,US_INV), | 418 fString(num,-1,US_INV), |
| 415 fStr(fString.getTerminatedBuffer()), | 419 fStr(fString.getTerminatedBuffer()), |
| 416 fLen(u_strlen(fStr)), | 420 fLen(u_strlen(fStr)), |
| 417 fFile(FILE), | 421 fFile(FILE), |
| 418 fLine(LINE), | 422 fLine(LINE), |
| 419 fCPat(pat), | 423 fCPat(pat), |
| 420 fCStr(num) | 424 fCStr(num) |
| 421 { | 425 { |
| 422 name[0]=0; | 426 name[0]=0; |
| 423 } | 427 } |
| 424 void warmup() { | 428 void warmup() { |
| 425 fFmt = initFmt(); | 429 fFmt = initFmt(); |
| 426 UChar buf[100]; | 430 UChar buf[100]; |
| 427 if(U_SUCCESS(setupStatus)) { | 431 if(U_SUCCESS(setupStatus)) { |
| 428 int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStat
us); | 432 int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStat
us); |
| 429 if(!U_SUCCESS(setupStatus) | 433 if(!U_SUCCESS(setupStatus) |
| 430 || trial!=fLen | 434 || trial!=fLen |
| 431 ||trial<=0 | 435 ||trial<=0 |
| 432 || u_strncmp(fStr,buf,trial) ) { | 436 || u_strncmp(fStr,buf,trial) ) { |
| 433 char strBuf[200]; | 437 char strBuf[200]; |
| 434 u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); | 438 u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); |
| 435 printf("%s:%d: warmup() %s got %s expected %s, err %s\n", | 439 printf("%s:%d: warmup() %s got %s expected %s, err %s\n", |
| 436 fFile,fLine,getName(),strBuf,fCStr, u_errorName(setupStatus)); | 440 fFile,fLine,getName(),strBuf,fCStr, u_errorName(setupStatus)); |
| 437 setupStatus = U_INTERNAL_PROGRAM_ERROR; | 441 setupStatus = U_INTERNAL_PROGRAM_ERROR; |
| 438 } | 442 } |
| 439 } | 443 } |
| 440 } | 444 } |
| 441 int32_t run() { | 445 int32_t run() { |
| 442 int32_t trial; | 446 int32_t trial; |
| 443 int i; | 447 int i; |
| 444 UChar buf[100]; | 448 UChar buf[100]; |
| 445 if(U_SUCCESS(setupStatus)) { | 449 if(U_SUCCESS(setupStatus)) { |
| 446 for(i=0;i<U_LOTS_OF_TIMES;i++){ | 450 for(i=0;i<U_LOTS_OF_TIMES;i++){ |
| 447 trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus); | 451 trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus); |
| 448 } | 452 } |
| 449 } | 453 } |
| 450 return i; | 454 return i; |
| 451 } | 455 } |
| 452 virtual ~NumFmtTest(){} | 456 virtual ~NumFmtTest(){} |
| 453 }; | 457 }; |
| 454 | 458 |
| 455 #define DO_NumFmtTest(p,n,x) { NumFmtTest t(p,n,x,__FILE__,__LINE__); runTestOn(
t); } | 459 #define DO_NumFmtTest(p,n,x) { NumFmtTest t(p,n,x,__FILE__,__LINE__); runTestOn(
t); } |
| 456 | 460 |
| 457 | |
| 458 class NumFmtInt64Test : public HowExpensiveTest { | 461 class NumFmtInt64Test : public HowExpensiveTest { |
| 462 public: |
| 463 enum EMode { |
| 464 kDefault, |
| 465 kPattern, |
| 466 kApplyPattern, |
| 467 kGroupOff, |
| 468 kApplyGroupOff |
| 469 }; |
| 459 private: | 470 private: |
| 471 EMode fMode; |
| 460 int64_t fExpect; | 472 int64_t fExpect; |
| 461 UNumberFormat *fFmt; | 473 UNumberFormat *fFmt; |
| 462 UnicodeString fPat; | 474 UnicodeString fPat; |
| 463 UnicodeString fString; | 475 UnicodeString fString; |
| 464 const UChar *fStr; | 476 const UChar *fStr; |
| 465 int32_t fLen; | 477 int32_t fLen; |
| 466 const char *fFile; | 478 const char *fFile; |
| 467 int fLine; | 479 int fLine; |
| 468 const char *fCPat; | 480 const char *fCPat; |
| 469 const char *fCStr; | 481 const char *fCStr; |
| 470 char name[100]; | 482 char name[100]; |
| 471 public: | 483 public: |
| 472 virtual const char *getName() { | 484 virtual const char *getName() { |
| 473 if(name[0]==0) { | 485 if(name[0]==0) { |
| 474 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); | 486 sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); |
| 475 } | 487 } |
| 476 return name; | 488 return name; |
| 477 } | 489 } |
| 478 protected: | 490 protected: |
| 479 virtual UNumberFormat* initFmt() { | 491 virtual UNumberFormat* initFmt() { |
| 480 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_U
S", 0, &setupStatus); | 492 switch(fMode) { |
| 493 case kPattern: |
| 494 return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TES
T_LOCALE, 0, &setupStatus); |
| 495 case kApplyPattern: |
| 496 { |
| 497 UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &
setupStatus); |
| 498 unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &set
upStatus); |
| 499 return fmt; |
| 500 } |
| 501 case kGroupOff: |
| 502 { |
| 503 UNumberFormat *fmt = unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedB
uffer(), -1, TEST_LOCALE, 0, &setupStatus); |
| 504 unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO); |
| 505 return fmt; |
| 506 } |
| 507 case kApplyGroupOff: |
| 508 { |
| 509 UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &
setupStatus); |
| 510 unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &set
upStatus); |
| 511 unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO); |
| 512 return fmt; |
| 513 } |
| 514 default: |
| 515 case kDefault: |
| 516 return unum_open(UNUM_DEFAULT, NULL, -1, TEST_LOCALE, 0, &setupStatus); |
| 517 } |
| 481 } | 518 } |
| 482 virtual const char *getClassName() { | 519 virtual const char *getClassName() { |
| 483 return "NumFmtInt64Test"; | 520 switch(fMode) { |
| 521 case EMode::kDefault: |
| 522 return "NumFmtInt64Test (default)"; |
| 523 case EMode::kPattern: |
| 524 return "NumFmtInt64Test (pattern)"; |
| 525 case EMode::kApplyPattern: |
| 526 return "NumFmtInt64Test (applypattern)"; |
| 527 case EMode::kGroupOff: |
| 528 return "NumFmtInt64Test (pattern, group=off)"; |
| 529 case EMode::kApplyGroupOff: |
| 530 return "NumFmtInt64Test (applypattern, group=off)"; |
| 531 default: |
| 532 return "NumFmtInt64Test (? ? ?)"; |
| 533 } |
| 484 } | 534 } |
| 485 public: | 535 public: |
| 486 NumFmtInt64Test(const char *pat, const char *num, int64_t expect, const char *
FILE, int LINE) | 536 NumFmtInt64Test(const char *pat, const char *num, int64_t expect, const char *
FILE, int LINE, EMode mode) |
| 487 : HowExpensiveTest("(n/a)",FILE, LINE), | 537 : HowExpensiveTest("(n/a)",FILE, LINE), |
| 538 fMode(mode), |
| 488 fExpect(expect), | 539 fExpect(expect), |
| 489 fFmt(0), | 540 fFmt(0), |
| 490 fPat(pat, -1, US_INV), | 541 fPat(pat, -1, US_INV), |
| 491 fString(num,-1,US_INV), | 542 fString(num,-1,US_INV), |
| 492 fStr(fString.getTerminatedBuffer()), | 543 fStr(fString.getTerminatedBuffer()), |
| 493 fLen(u_strlen(fStr)), | 544 fLen(u_strlen(fStr)), |
| 494 fFile(FILE), | 545 fFile(FILE), |
| 495 fLine(LINE), | 546 fLine(LINE), |
| 496 fCPat(pat), | 547 fCPat(pat), |
| 497 fCStr(num) | 548 fCStr(num) |
| 498 { | 549 { |
| 499 name[0]=0; | 550 name[0]=0; |
| 500 } | 551 } |
| 501 void warmup() { | 552 void warmup() { |
| 502 fFmt = initFmt(); | 553 fFmt = initFmt(); |
| 503 UChar buf[100]; | 554 UChar buf[100]; |
| 504 if(U_SUCCESS(setupStatus)) { | 555 if(U_SUCCESS(setupStatus)) { |
| 505 int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatu
s); | 556 int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatu
s); |
| 506 if(!U_SUCCESS(setupStatus) | 557 if(!U_SUCCESS(setupStatus) |
| 507 || trial!=fLen | 558 || trial!=fLen |
| 508 ||trial<=0 | 559 ||trial<=0 |
| 509 || u_strncmp(fStr,buf,trial) ) { | 560 || u_strncmp(fStr,buf,trial) ) { |
| 510 char strBuf[200]; | 561 char strBuf[200]; |
| 511 u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); | 562 u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); |
| 512 printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\
n", | 563 printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\
n", |
| 513 fFile,fLine,getName(),strBuf,trial,fCStr,fLen, u_errorName(setupS
tatus)); | 564 fFile,fLine,getName(),strBuf,trial,fCStr,fLen, u_errorName(setupS
tatus)); |
| 514 setupStatus = U_INTERNAL_PROGRAM_ERROR; | 565 setupStatus = U_INTERNAL_PROGRAM_ERROR; |
| 515 } | 566 } |
| 516 } | 567 } |
| 517 } | 568 } |
| 518 int32_t run() { | 569 int32_t run() { |
| 519 int32_t trial; | 570 int32_t trial; |
| 520 int i; | 571 int i; |
| 521 UChar buf[100]; | 572 UChar buf[100]; |
| 522 if(U_SUCCESS(setupStatus)) { | 573 if(U_SUCCESS(setupStatus)) { |
| 523 for(i=0;i<U_LOTS_OF_TIMES;i++){ | 574 for(i=0;i<U_LOTS_OF_TIMES;i++){ |
| 524 trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus); | 575 trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus); |
| 525 } | 576 } |
| 526 } | 577 } |
| 527 return i; | 578 return i; |
| 528 } | 579 } |
| 529 virtual ~NumFmtInt64Test(){} | 580 virtual ~NumFmtInt64Test(){} |
| 530 }; | 581 }; |
| 531 | 582 |
| 532 #define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__);
runTestOn(t); } | 583 /** |
| 584 * unum_open .. with pattern, == new DecimalFormat(pattern) |
| 585 */ |
| 586 #define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,Nu
mFmtInt64Test::EMode::kPattern); runTestOn(t); } |
| 587 /** |
| 588 * unum_open(UNUM_DECIMAL), then |
| 589 */ |
| 590 #define DO_NumFmtInt64Test_apply(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LIN
E__,NumFmtInt64Test::EMode::kApplyPattern); runTestOn(t); } |
| 591 |
| 592 #define DO_NumFmtInt64Test_default(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__L
INE__,NumFmtInt64Test::EMode::kDefault); runTestOn(t); } |
| 593 #define DO_NumFmtInt64Test_gr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE_
_,NumFmtInt64Test::EMode::kGroupOff); runTestOn(t); } |
| 594 #define DO_NumFmtInt64Test_applygr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__
LINE__,NumFmtInt64Test::EMode::kApplyGroupOff); runTestOn(t); } |
| 533 | 595 |
| 534 | 596 |
| 535 class NumFmtStringPieceTest : public HowExpensiveTest { | 597 class NumFmtStringPieceTest : public HowExpensiveTest { |
| 536 private: | 598 private: |
| 537 const StringPiece &fExpect; | 599 const StringPiece &fExpect; |
| 538 UNumberFormat *fFmt; | 600 UNumberFormat *fFmt; |
| 539 UnicodeString fPat; | 601 UnicodeString fPat; |
| 540 UnicodeString fString; | 602 UnicodeString fString; |
| 541 const UChar *fStr; | 603 const UChar *fStr; |
| 542 int32_t fLen; | 604 int32_t fLen; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 556 virtual UNumberFormat* initFmt() { | 618 virtual UNumberFormat* initFmt() { |
| 557 DecimalFormat *d = new DecimalFormat(setupStatus); | 619 DecimalFormat *d = new DecimalFormat(setupStatus); |
| 558 UParseError pe; | 620 UParseError pe; |
| 559 d->applyPattern(fPat, pe, setupStatus); | 621 d->applyPattern(fPat, pe, setupStatus); |
| 560 return (UNumberFormat*) d; | 622 return (UNumberFormat*) d; |
| 561 } | 623 } |
| 562 virtual const char *getClassName() { | 624 virtual const char *getClassName() { |
| 563 return "NumFmtStringPieceTest"; | 625 return "NumFmtStringPieceTest"; |
| 564 } | 626 } |
| 565 public: | 627 public: |
| 566 NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& exp
ect, const char *FILE, int LINE) | 628 NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& exp
ect, const char *FILE, int LINE) |
| 567 : HowExpensiveTest("(n/a)",FILE, LINE), | 629 : HowExpensiveTest("(n/a)",FILE, LINE), |
| 568 fExpect(expect), | 630 fExpect(expect), |
| 569 fFmt(0), | 631 fFmt(0), |
| 570 fPat(pat, -1, US_INV), | 632 fPat(pat, -1, US_INV), |
| 571 fString(num,-1,US_INV), | 633 fString(num,-1,US_INV), |
| 572 fStr(fString.getTerminatedBuffer()), | 634 fStr(fString.getTerminatedBuffer()), |
| 573 fLen(u_strlen(fStr)), | 635 fLen(u_strlen(fStr)), |
| 574 fFile(FILE), | 636 fFile(FILE), |
| 575 fLine(LINE), | 637 fLine(LINE), |
| 576 fCPat(pat), | 638 fCPat(pat), |
| 577 fCStr(num) | 639 fCStr(num) |
| 578 { | 640 { |
| 579 name[0]=0; | 641 name[0]=0; |
| 580 } | 642 } |
| 581 void warmup() { | 643 void warmup() { |
| 582 fFmt = initFmt(); | 644 fFmt = initFmt(); |
| 583 UnicodeString buf; | 645 UnicodeString buf; |
| 584 if(U_SUCCESS(setupStatus)) { | 646 if(U_SUCCESS(setupStatus)) { |
| 585 buf.remove(); | 647 buf.remove(); |
| 586 ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); | 648 ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); |
| 587 if(!U_SUCCESS(setupStatus) | 649 if(!U_SUCCESS(setupStatus) |
| 588 || fString!=buf | 650 || fString!=buf |
| 589 ) { | 651 ) { |
| 590 char strBuf[200]; | 652 char strBuf[200]; |
| 591 u_strToUTF8(strBuf,200,NULL,buf.getTerminatedBuffer(),buf.length()+1,&se
tupStatus); | 653 u_strToUTF8(strBuf,200,NULL,buf.getTerminatedBuffer(),buf.length()+1,&se
tupStatus); |
| 592 printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\
n", | 654 printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\
n", |
| 593 fFile,fLine,getName(),strBuf,buf.length(),fCStr,fLen, u_errorName
(setupStatus)); | 655 fFile,fLine,getName(),strBuf,buf.length(),fCStr,fLen, u_errorName
(setupStatus)); |
| 594 setupStatus = U_INTERNAL_PROGRAM_ERROR; | 656 setupStatus = U_INTERNAL_PROGRAM_ERROR; |
| 595 } | 657 } |
| 596 } | 658 } |
| 597 } | 659 } |
| 598 | 660 |
| 599 int32_t run() { | 661 int32_t run() { |
| 662 #if U_DEBUG |
| 600 int32_t trial; | 663 int32_t trial; |
| 664 #endif |
| 601 int i=0; | 665 int i=0; |
| 602 UnicodeString buf; | 666 UnicodeString buf; |
| 603 if(U_SUCCESS(setupStatus)) { | 667 if(U_SUCCESS(setupStatus)) { |
| 604 for(i=0;i<U_LOTS_OF_TIMES;i++){ | 668 for(i=0;i<U_LOTS_OF_TIMES;i++){ |
| 605 buf.remove(); | 669 buf.remove(); |
| 606 ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); | 670 ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); |
| 607 } | 671 } |
| 608 } | 672 } |
| 609 return i; | 673 return i; |
| 610 } | 674 } |
| 611 virtual ~NumFmtStringPieceTest(){} | 675 virtual ~NumFmtStringPieceTest(){} |
| 612 }; | 676 }; |
| 613 | 677 |
| 614 #define DO_NumFmtStringPieceTest(p,n,x) { NumFmtStringPieceTest t(p,n,x,__FILE__
,__LINE__); runTestOn(t); } | 678 #define DO_NumFmtStringPieceTest(p,n,x) { NumFmtStringPieceTest t(p,n,x,__FILE__
,__LINE__); runTestOn(t); } |
| 615 | 679 |
| 616 // TODO: move, scope. | 680 // TODO: move, scope. |
| 617 static UChar pattern[] = { 0x23 }; // '#' | 681 static UChar pattern[] = { 0x23 }; // '#' |
| 618 static UChar strdot[] = { '2', '.', '0', 0 }; | 682 static UChar strdot[] = { '2', '.', '0', 0 }; |
| 619 static UChar strspc[] = { '2', ' ', 0 }; | 683 static UChar strspc[] = { '2', ' ', 0 }; |
| 620 static UChar strgrp[] = {'2',',','2','2','2', 0 }; | 684 static UChar strgrp[] = {'2',',','2','2','2', 0 }; |
| 621 static UChar strbeng[] = {0x09E8,0x09E8,0x09E8,0x09E8, 0 }; | 685 static UChar strbeng[] = {0x09E8,0x09E8,0x09E8,0x09E8, 0 }; |
| 622 | 686 |
| 623 UNumberFormat *NumParseTest_fmt; | 687 UNumberFormat *NumParseTest_fmt; |
| 624 | 688 |
| 625 // TODO: de-uglify. | 689 // TODO: de-uglify. |
| 626 QuickTest(NumParseTest,{ static UChar pattern[] = { 0x23 }; NumParseTest_f
mt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
"en_US", 0, &setupStatus);
},{ int32_t i; static UChar str[] = { 0x31 };double val; for(i=0;i<U_L
OTS_OF_TIMES;i++) { val=unum_parse(NumParseTest_fmt,str,1,NULL,&setupStatus
); } return i; },{unum_close(NumParseTest_fmt);}) | 690 QuickTest(NumParseTest,{ static UChar pattern[] = { 0x23 }; NumParseTest_f
mt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
TEST_LOCALE, 0, &setupStatu
s); },{ int32_t i; static UChar str[] = { 0x31 };double val; for(i=0;i
<U_LOTS_OF_TIMES;i++) { val=unum_parse(NumParseTest_fmt,str,1,NULL,&setupSt
atus); } return i; },{unum_close(NumParseTest_fmt);}) |
| 627 | 691 |
| 628 QuickTest(NumParseTestdot,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
"en_US", 0, &setupStatus
); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) { val=
unum_parse(NumParseTest_fmt,strdot,1,NULL,&setupStatus); } return i; },{u
num_close(NumParseTest_fmt);}) | 692 QuickTest(NumParseTestdot,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
TEST_LOCALE, 0, &setupSt
atus); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) {
val=unum_parse(NumParseTest_fmt,strdot,1,NULL,&setupStatus); } return i;
},{unum_close(NumParseTest_fmt);}) |
| 629 QuickTest(NumParseTestspc,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
"en_US", 0, &setupStatus
); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) { va
l=unum_parse(NumParseTest_fmt,strspc,1,NULL,&setupStatus); } return i; },
{unum_close(NumParseTest_fmt);}) | 693 QuickTest(NumParseTestspc,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
TEST_LOCALE, 0, &setupSt
atus); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) {
val=unum_parse(NumParseTest_fmt,strspc,1,NULL,&setupStatus); } return i;
},{unum_close(NumParseTest_fmt);}) |
| 630 QuickTest(NumParseTestgrp,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
"en_US", 0, &setupStatus
); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) { va
l=unum_parse(NumParseTest_fmt,strgrp,-1,NULL,&setupStatus); } return i; }
,{unum_close(NumParseTest_fmt);}) | 694 QuickTest(NumParseTestgrp,{ static UChar pattern[] = { 0x23 }; NumParseTes
t_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
TEST_LOCALE, 0, &setupSt
atus); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) {
val=unum_parse(NumParseTest_fmt,strgrp,-1,NULL,&setupStatus); } return i
; },{unum_close(NumParseTest_fmt);}) |
| 631 | 695 |
| 632 QuickTest(NumParseTestbeng,{ static UChar pattern[] = { 0x23 }; NumParseTe
st_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
"en_US", 0, &setupStatu
s); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) { v
al=unum_parse(NumParseTest_fmt,strbeng,-1,NULL,&setupStatus); } return i;
},{unum_close(NumParseTest_fmt);}) | 696 QuickTest(NumParseTestbeng,{ static UChar pattern[] = { 0x23 }; NumParseTe
st_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1,
TEST_LOCALE, 0, &setupS
tatus); },{ int32_t i; double val; for(i=0;i<U_LOTS_OF_TIMES;i++) {
val=unum_parse(NumParseTest_fmt,strbeng,-1,NULL,&setupStatus); } return
i; },{unum_close(NumParseTest_fmt);}) |
| 633 | 697 |
| 634 UDateFormat *DateFormatTest_fmt = NULL; | 698 UDateFormat *DateFormatTest_fmt = NULL; |
| 635 UDate sometime = 100000000.0; | 699 UDate sometime = 100000000.0; |
| 636 UChar onekbuf[1024]; | 700 UChar onekbuf[1024]; |
| 637 const int32_t onekbuf_len = sizeof(onekbuf)/sizeof(onekbuf[0]); | 701 const int32_t onekbuf_len = sizeof(onekbuf)/sizeof(onekbuf[0]); |
| 638 | 702 |
| 639 | 703 |
| 640 QuickTest(DateFormatTestBasic, \ | 704 QuickTest(DateFormatTestBasic, \ |
| 641 { \ | 705 { \ |
| 642 DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NUL
L, -1, NULL, -1, &setupStatus); \ | 706 DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NUL
L, -1, NULL, -1, &setupStatus); \ |
| 643 }, \ | 707 }, \ |
| 644 { \ | 708 { \ |
| 645 int i; \ | 709 int i; \ |
| 646 for(i=0;i<U_LOTS_OF_TIMES;i++) \ | 710 for(i=0;i<U_LOTS_OF_TIMES;i++) \ |
| 647 { \ | 711 { \ |
| 648 udat_format(DateFormatTest_fmt, sometime, onekbuf, onekbuf_len, NU
LL, &setupStatus); \ | 712 udat_format(DateFormatTest_fmt, sometime, onekbuf, onekbuf_len, NU
LL, &setupStatus); \ |
| 649 } \ | 713 } \ |
| 650 return i; \ | 714 return i; \ |
| 651 }, \ | 715 }, \ |
| 652 { \ | 716 { \ |
| 653 udat_close(DateFormatTest_fmt); \ | 717 udat_close(DateFormatTest_fmt); \ |
| 654 } \ | 718 } \ |
| 655 ) | 719 ) |
| 656 | 720 |
| 657 | 721 |
| 658 QuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;}
,{}) | 722 QuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;}
,{}) |
| 659 | 723 |
| 660 #if 0 | 724 #if 0 |
| 661 #include <time.h> | 725 #include <time.h> |
| 662 | 726 |
| 663 QuickTest(RandomTest,{},{timespec ts; ts.tv_sec=rand()%4; int j=U_LOTS_OF_TIMES;
while(--j) { ts.tv_nsec=100000+(rand()%10000)*1000000; nanosleep(&ts,NULL); retu
rn j;} return U_LOTS_OF_TIMES;},{}) | 727 QuickTest(RandomTest,{},{timespec ts; ts.tv_sec=rand()%4; int j=U_LOTS_OF_TIMES;
while(--j) { ts.tv_nsec=100000+(rand()%10000)*1000000; nanosleep(&ts,NULL); retu
rn j;} return U_LOTS_OF_TIMES;},{}) |
| 664 #endif | 728 #endif |
| 665 | 729 |
| 666 OpenCloseTest(pattern,unum,open,{},(UNUM_PATTERN_DECIMAL,pattern,1,"en_US",0,&se
tupStatus),{}) | 730 OpenCloseTest(pattern,unum,open,{},(UNUM_PATTERN_DECIMAL,pattern,1,TEST_LOCALE,0
,&setupStatus),{}) |
| 667 OpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,"en_US",0,&setupStatus)
,{}) | 731 OpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,TEST_LOCALE,0,&setupSta
tus),{}) |
| 668 #if !UCONFIG_NO_CONVERSION | 732 #if !UCONFIG_NO_CONVERSION |
| 669 #include "unicode/ucnv.h" | 733 #include "unicode/ucnv.h" |
| 670 OpenCloseTest(gb18030,ucnv,open,{},("gb18030",&setupStatus),{}) | 734 OpenCloseTest(gb18030,ucnv,open,{},("gb18030",&setupStatus),{}) |
| 671 #endif | 735 #endif |
| 672 #include "unicode/ures.h" | 736 #include "unicode/ures.h" |
| 673 OpenCloseTest(root,ures,open,{},(NULL,"root",&setupStatus),{}) | 737 OpenCloseTest(root,ures,open,{},(NULL,"root",&setupStatus),{}) |
| 674 | 738 |
| 675 void runTests() { | 739 void runTests() { |
| 676 { | 740 { |
| 677 SieveTest t; | 741 SieveTest t; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 | 783 |
| 720 | 784 |
| 721 // { NumParseTestgrp t; runTestOn(t); } | 785 // { NumParseTestgrp t; runTestOn(t); } |
| 722 { NumParseTestbeng t; runTestOn(t); } | 786 { NumParseTestbeng t; runTestOn(t); } |
| 723 | 787 |
| 724 } | 788 } |
| 725 #endif | 789 #endif |
| 726 | 790 |
| 727 #ifndef SKIP_NUMFORMAT_TESTS | 791 #ifndef SKIP_NUMFORMAT_TESTS |
| 728 // format tests | 792 // format tests |
| 729 { | 793 { |
| 730 | 794 |
| 731 DO_NumFmtInt64Test("0000","0001",1); | 795 DO_NumFmtInt64Test("0000","0001",1); |
| 732 DO_NumFmtInt64Test("0000","0000",0); | 796 DO_NumFmtInt64Test("0000","0000",0); |
| 733 StringPiece sp3456("3456"); | 797 StringPiece sp3456("3456"); |
| 734 DO_NumFmtStringPieceTest("0000","3456",sp3456); | 798 DO_NumFmtStringPieceTest("0000","3456",sp3456); |
| 735 DO_NumFmtStringPieceTest("#","3456",sp3456); | 799 DO_NumFmtStringPieceTest("#","3456",sp3456); |
| 736 StringPiece sp3("3"); | 800 StringPiece sp3("3"); |
| 737 DO_NumFmtStringPieceTest("0000","0003",sp3); | 801 DO_NumFmtStringPieceTest("0000","0003",sp3); |
| 738 DO_NumFmtStringPieceTest("#","3",sp3); | 802 DO_NumFmtStringPieceTest("#","3",sp3); |
| 739 StringPiece spn3("-3"); | 803 StringPiece spn3("-3"); |
| 740 DO_NumFmtStringPieceTest("0000","-0003",spn3); | 804 DO_NumFmtStringPieceTest("0000","-0003",spn3); |
| 741 DO_NumFmtStringPieceTest("#","-3",spn3); | 805 DO_NumFmtStringPieceTest("#","-3",spn3); |
| 742 StringPiece spPI("123.456"); | 806 StringPiece spPI("123.456"); |
| 743 DO_NumFmtStringPieceTest("#.0000","123.4560",spPI); | 807 DO_NumFmtStringPieceTest("#.0000","123.4560",spPI); |
| 744 DO_NumFmtStringPieceTest("#.00","123.46",spPI); | 808 DO_NumFmtStringPieceTest("#.00","123.46",spPI); |
| 745 | 809 |
| 746 DO_NumFmtTest("#","0",0.0); | 810 DO_NumFmtTest("#","0",0.0); |
| 747 DO_NumFmtTest("#","12345",12345); | 811 DO_NumFmtTest("#","12345",12345); |
| 748 DO_NumFmtTest("#","-2",-2); | 812 DO_NumFmtTest("#","-2",-2); |
| 749 DO_NumFmtTest("+#","+2",2); | 813 DO_NumFmtTest("+#","+2",2); |
| 814 |
| 750 DO_NumFmtInt64Test("#","-682",-682); | 815 DO_NumFmtInt64Test("#","-682",-682); |
| 751 DO_NumFmtInt64Test("#","0",0); | 816 DO_NumFmtInt64Test("#","0",0); |
| 752 DO_NumFmtInt64Test("#","12345",12345); | 817 DO_NumFmtInt64Test("#","12345",12345); |
| 818 DO_NumFmtInt64Test("#,###","12,345",12345); |
| 753 DO_NumFmtInt64Test("#","1234",1234); | 819 DO_NumFmtInt64Test("#","1234",1234); |
| 754 DO_NumFmtInt64Test("#","123",123); | 820 DO_NumFmtInt64Test("#","123",123); |
| 821 DO_NumFmtInt64Test("#,###","123",123); |
| 822 DO_NumFmtInt64Test_apply("#","123",123); |
| 823 DO_NumFmtInt64Test_apply("#","12345",12345); |
| 824 DO_NumFmtInt64Test_apply("#,###","123",123); |
| 825 DO_NumFmtInt64Test_apply("#,###","12,345",12345); |
| 826 DO_NumFmtInt64Test_default("","123",123); |
| 827 DO_NumFmtInt64Test_default("","12,345",12345); |
| 828 DO_NumFmtInt64Test_applygr0("#","123",123); |
| 829 DO_NumFmtInt64Test_applygr0("#","12345",12345); |
| 830 DO_NumFmtInt64Test_applygr0("#,###","123",123); |
| 831 DO_NumFmtInt64Test_applygr0("#,###","12345",12345); |
| 832 DO_NumFmtInt64Test_gr0("#","123",123); |
| 833 DO_NumFmtInt64Test_gr0("#","12345",12345); |
| 834 DO_NumFmtInt64Test_gr0("#,###","123",123); |
| 835 DO_NumFmtInt64Test_gr0("#,###","12345",12345); |
| 755 DO_NumFmtInt64Test("#","-2",-2); | 836 DO_NumFmtInt64Test("#","-2",-2); |
| 756 DO_NumFmtInt64Test("+#","+2",2); | 837 DO_NumFmtInt64Test("+#","+2",2); |
| 757 } | 838 } |
| 758 | 839 |
| 759 #ifndef SKIP_NUM_OPEN_TEST | 840 #ifndef SKIP_NUM_OPEN_TEST |
| 760 { | 841 { |
| 761 Test_unum_opendefault t; | 842 Test_unum_opendefault t; |
| 762 runTestOn(t); | 843 runTestOn(t); |
| 763 } | 844 } |
| 764 { | 845 { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 776 #endif | 857 #endif |
| 777 { | 858 { |
| 778 Test_ures_openroot t; | 859 Test_ures_openroot t; |
| 779 runTestOn(t); | 860 runTestOn(t); |
| 780 } | 861 } |
| 781 | 862 |
| 782 if(testhit==0) { | 863 if(testhit==0) { |
| 783 fprintf(stderr, "ERROR: no tests matched.\n"); | 864 fprintf(stderr, "ERROR: no tests matched.\n"); |
| 784 } | 865 } |
| 785 } | 866 } |
| OLD | NEW |