howExpensiveIs.cpp revision 8de051c3d18a56cc126f0f44e368495a52f9148c
1103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* 2103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ********************************************************************** 38de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Copyright (c) 2011-2016,International Business Machines 4103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Corporation and others. All Rights Reserved. 5103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ********************************************************************** 6103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 7103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include <stdio.h> 854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <string.h> 954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 108de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h" 11103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "sieve.h" 12103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/utimer.h" 13103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "udbgutil.h" 1454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/ustring.h" 15103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/decimfmt.h" 1654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/udat.h" 17fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusU_NAMESPACE_USE 1854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM_IMPLEMENTS_POSIX 2054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <unistd.h> 2154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 2254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic void usage(const char *prog) { 2354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "Usage: %s [ -f outfile.xml ] [ -t 'TestName' ]\n", prog); 2454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 2554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 2654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 27103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTests(void); 28103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef ITERATIONS 3054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define ITERATIONS 5 3154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 3254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 33fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef TEST_LOCALE 34fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define TEST_LOCALE "en_US" 35fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 3654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusFILE *out = NULL; 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUErrorCode setupStatus = U_ZERO_ERROR; 3954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *outName = NULL; 4054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint listmode = 0; 4154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *testName = NULL; 4254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *progname = NULL; 4354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint errflg = 0; 4454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint testhit = 0; 4554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 4654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint testMatch(const char *aName) { 4754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(testName==NULL) return 1; 4854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int len = strlen(testName); 4954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(testName[len-1]=='*') { 5054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return strncmp(testName,aName,len-1); 5154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 5254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return strcmp(testName,aName); 5354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 5454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 55103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 5654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint main(int argc, char * const * argv){ 57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG 58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(stderr,"%s: warning: U_DEBUG is on.\n", argv[0]); 59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 60103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG 61103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 62103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double m; 63103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double s = uprv_getSieveTime(&m); 64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(stderr, "** Standard sieve time: %.9fs +/- %.9fs (%d iterations)\n", s,m, (int)U_LOTS_OF_TIMES); 65103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 66103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 67103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM_IMPLEMENTS_POSIX 6954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int c; 70fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius //extern int optind; 7154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius extern char *optarg; 7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius while((c=getopt(argc,argv,"lf:t:")) != EOF) { 7354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius switch(c) { 7454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 'f': 7554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius outName = optarg; 7654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 7754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 'l': 7854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius listmode++; 7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 8054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 't': 8154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testName = optarg; 8254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 8354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case '?': 8454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errflg++; 8554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 8654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(errflg) { 8754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius usage(progname); 8854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return 0; 8954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 9054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 9154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* for ( ; optind < argc; optind++) { ... argv[optind] } */ 9254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#else 93103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(argc==2) { 9454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius outName = argv[1]; 9554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(argc>2) { 9654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "Err: usage: %s [ output-file.xml ]\n", argv[0]); 9754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 9854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 9954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 10054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(listmode && outName != NULL ) { 10154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "Warning: no output when list mode\n"); 10254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius outName=NULL; 10354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 10454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 10554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(outName != NULL) { 10654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 10754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 10854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius out=fopen(outName,"w"); 109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(out==NULL) { 11054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr,"Err: can't open %s for writing.\n", outName); 111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return 1; 11254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 11354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "# writing results to %s\n", outName); 114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); 116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(out, "<tests icu=\"%s\">\n", U_ICU_VERSION); 117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(out, "<!-- %s -->\n", U_COPYRIGHT_STRING); 11854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 11954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "# (no output)\n"); 12054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 121fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 12254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(listmode && testName!=NULL) { 12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "ERR: no -l mode when specific test with -t\n"); 12454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius usage(progname); 125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return 1; 126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 12854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTests(); 130fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(out!=NULL) { 13354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_INFO 134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius udbg_writeIcuInfo(out); 13554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(out, "</tests>\n"); 137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fclose(out); 138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_FAILURE(setupStatus)) { 141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); 142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return 1; 143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 144fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return 0; 146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass HowExpensiveTest { 149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~HowExpensiveTest(){} 151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(name), fFile(file), fLine(line) {} 153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /** 155fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @return number of iterations 156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual int32_t run() = 0; 158fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius virtual void warmup() { run(); } 159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 16054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual const char *getName() { return fName; } 16154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliuspublic: 162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual int32_t runTest(double *subTime) { 163103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UTimer a,b; 164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius utimer_getTime(&a); 165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t iter = run(); 166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius utimer_getTime(&b); 167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius *subTime = utimer_getDeltaSeconds(&a,&b); 168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return iter; 169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual int32_t runTests(double *subTime, double *marginOfError) { 172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius warmup(); /* warmup */ 173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double times[ITERATIONS]; 174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int subIterations = 0; 175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for(int i=0;i<ITERATIONS;i++) { 176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius subIterations = runTest(×[i]); 177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(stderr, "trial: %d/%d = %.9fs\n", i, ITERATIONS,times[i]); 179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(stderr); 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 18254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius uint32_t iterations = ITERATIONS; 18354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius *subTime = uprv_getMeanTime(times,&iterations,marginOfError); 184103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return subIterations; 185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 186103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 187103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fName; 188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fFile; 189103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fLine; 190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fIterations; 191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTestOn(HowExpensiveTest &t) { 19454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(setupStatus)) return; // silently 19554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char *tn = t.getName(); 19654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(testName!=NULL && testMatch(tn)) return; // skipped. 19754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(listmode) { 19854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "%s:%d:\t%s\n", t.fFile, t.fLine, t.getName()); 19954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testhit++; 20054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return; 20154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 20254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "%s:%d: Running: %s\n", t.fFile, t.fLine, t.getName()); 20354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testhit++; 20454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 205103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double sieveTime = uprv_getSieveTime(NULL); 206103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double st; 207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double me; 208fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(stdout); 210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(stderr); 211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t iter = t.runTests(&st,&me); 21254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(setupStatus)) { 21354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); 21454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return; 21554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 216103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(stdout); 217103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(stderr); 218fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double stn = st/sieveTime; 220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 22154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius printf("%s\t%.9f\t%.9f +/- %.9f, @ %d iter\n", t.getName(),stn,st,me,iter); 222103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(out!=NULL) { 224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fprintf(out, " <test name=\"%s\" standardizedTime=\"%f\" realDuration=\"%f\" marginOfError=\"%f\" iterations=\"%d\" />\n", 22554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tn,stn,st,me,iter); 226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fflush(out); 227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 229103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* ------------------- test code here --------------------- */ 231103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 232103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass SieveTest : public HowExpensiveTest { 233103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 234103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~SieveTest(){} 235103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SieveTest():HowExpensiveTest("SieveTest",__FILE__,__LINE__){} 236103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual int32_t run(){return 0;} // dummy 237103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t runTest(double *subTime) { 238103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius *subTime = uprv_getSieveTime(NULL); 239103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return U_LOTS_OF_TIMES; 240103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 241103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual int32_t runTests(double *subTime, double *marginOfError) { 242103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius *subTime = uprv_getSieveTime(marginOfError); 243103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return U_LOTS_OF_TIMES; 244103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 245103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 246103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 248103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* ------- NumParseTest ------------- */ 249103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/unum.h" 250103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* open and close tests */ 251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCName(svc,ub,testn,suffix,n) testn ## svc ## ub ## suffix ## n 252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCStr(svc,ub,suffix,n) "Test_" # svc # ub # suffix # n 253103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCRun(svc,ub,suffix) svc ## ub ## suffix 254103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: run away screaming 255103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OpenCloseTest(n, svc,suffix,c,a,d) class OCName(svc,_,Test_,suffix,n) : public HowExpensiveTest { public: OCName(svc,_,Test_,suffix,n)():HowExpensiveTest(OCStr(svc,_,suffix,n),__FILE__,__LINE__) c int32_t run() { int32_t i; for(i=0;i<U_LOTS_OF_TIMES;i++){ OCRun(svc,_,close) ( OCRun(svc,_,suffix) a ); } return i; } void warmup() { OCRun(svc,_,close) ( OCRun(svc,_,suffix) a); } virtual ~ OCName(svc,_,Test_,suffix,n) () d }; 256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define QuickTest(n,c,r,d) class n : public HowExpensiveTest { public: n():HowExpensiveTest(#n,__FILE__,__LINE__) c int32_t run() r virtual ~n () d }; 257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumTest : public HowExpensiveTest { 259103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 260103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double fExpect; 261103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat *fFmt; 262103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fPat; 263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fString; 264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar *fStr; 265103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fLen; 266103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fFile; 267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int fLine; 268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCPat; 269103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCStr; 270103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char name[100]; 271103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 272103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getName() { 273103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(name[0]==0) { 274103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); 275103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 276103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return name; 277103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 278103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 279103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual UNumberFormat* initFmt() { 280fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus); 281103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 282103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getClassName() { 283103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return "NumTest"; 284103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 285103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 286fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE) 287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius : HowExpensiveTest("(n/a)",FILE, LINE), 288103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fExpect(expect), 289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt(0), 290103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fPat(pat, -1, US_INV), 291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fString(num,-1,US_INV), 292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fStr(fString.getTerminatedBuffer()), 293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLen(u_strlen(fStr)), 294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile(FILE), 295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLine(LINE), 296103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCPat(pat), 297103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCStr(num) 298103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 299103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name[0]=0; 300103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 301103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void warmup() { 302103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt = initFmt(); 303103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 304103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double trial = unum_parseDouble(fFmt,fStr,fLen, NULL, &setupStatus); 305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus) && trial!=fExpect) { 306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius setupStatus = U_INTERNAL_PROGRAM_ERROR; 307fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius printf("%s:%d: warmup() %s got %.8f expected %.8f\n", 308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile,fLine,getName(),trial,fExpect); 309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 310103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 311103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t run() { 313103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double trial=0.0; 314103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int i; 315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for(i=0;i<U_LOTS_OF_TIMES;i++){ 316103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius trial = unum_parse(fFmt,fStr,fLen, NULL, &setupStatus); 317103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 318103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return i; 319103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 320103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~NumTest(){} 321103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } 324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusclass AttrNumTest : public NumTest 327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormatAttribute fAttr; 330103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fAttrValue; 331103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char name2[100]; 332103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 333103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getClassName() { 334103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sprintf(name2,"AttrNumTest:%d=%d", fAttr,fAttrValue); 335103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return name2; 336103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 337103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius AttrNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE, UNumberFormatAttribute attr, int32_t newValue) 339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius : NumTest(pat,num,expect,FILE,LINE), 340103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fAttr(attr), 341103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fAttrValue(newValue) 342103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 343103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual UNumberFormat* initFmt() { 345103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat *fmt = NumTest::initFmt(); 346103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setAttribute(fmt, fAttr,fAttrValue); 347103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return fmt; 348103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 349103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 350103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 351103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v); runTestOn(t); } 352103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 35354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusclass NOXNumTest : public NumTest 35554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius{ 35654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusprivate: 35754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UNumberFormatAttribute fAttr; 35854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t fAttrValue; 35954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius char name2[100]; 36054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusprotected: 36154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual const char *getClassName() { 36254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sprintf(name2,"NOXNumTest:%d=%d", fAttr,fAttrValue); 36354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return name2; 36454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 36554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliuspublic: 366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NOXNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE /*, UNumberFormatAttribute attr, int32_t newValue */) 36754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius : NumTest(pat,num,expect,FILE,LINE) /* , 36854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fAttr(attr), 36954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fAttrValue(newValue) */ 37054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 37154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 37254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius virtual UNumberFormat* initFmt() { 37354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UNumberFormat *fmt = NumTest::initFmt(); 37454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius //unum_setAttribute(fmt, fAttr,fAttrValue); 37554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return fmt; 37654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 37754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}; 37854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 37954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define DO_NOXNumTest(p,n,x) { NOXNumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } 38054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 381103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_TripleNumTest(p,n,x) DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_YES) \ 382103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_NO) \ 383103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE) 384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 385103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtTest : public HowExpensiveTest { 387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double fExpect; 389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat *fFmt; 390103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fPat; 391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fString; 392103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar *fStr; 393103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fLen; 394103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fFile; 395103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int fLine; 396103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCPat; 397103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCStr; 398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char name[100]; 399103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 400103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getName() { 401103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(name[0]==0) { 402103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); 403103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 404103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return name; 405103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 406103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 407103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual UNumberFormat* initFmt() { 408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus); 409103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 410103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getClassName() { 411103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return "NumFmtTest"; 412103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumFmtTest(const char *pat, const char *num, double expect, const char *FILE, int LINE) 415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius : HowExpensiveTest("(n/a)",FILE, LINE), 416103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fExpect(expect), 417103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt(0), 418103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fPat(pat, -1, US_INV), 419103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fString(num,-1,US_INV), 420103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fStr(fString.getTerminatedBuffer()), 421103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLen(u_strlen(fStr)), 422103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile(FILE), 423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLine(LINE), 424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCPat(pat), 425103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCStr(num) 426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name[0]=0; 428103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void warmup() { 430103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt = initFmt(); 431103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar buf[100]; 432103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 433103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus); 434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(!U_SUCCESS(setupStatus) 435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius || trial!=fLen 436103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ||trial<=0 437103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius || u_strncmp(fStr,buf,trial) ) { 438103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char strBuf[200]; 439103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); 440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius printf("%s:%d: warmup() %s got %s expected %s, err %s\n", 441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile,fLine,getName(),strBuf,fCStr, u_errorName(setupStatus)); 442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius setupStatus = U_INTERNAL_PROGRAM_ERROR; 443103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 444103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t run() { 447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t trial; 448103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int i; 449103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar buf[100]; 450103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 451103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for(i=0;i<U_LOTS_OF_TIMES;i++){ 452103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus); 453103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 454103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 455103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return i; 456103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 457103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~NumFmtTest(){} 458103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 459103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 460103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumFmtTest(p,n,x) { NumFmtTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } 461103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 462103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtInt64Test : public HowExpensiveTest { 463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliuspublic: 464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius enum EMode { 465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kDefault, 466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kPattern, 467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kApplyPattern, 468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kGroupOff, 469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius kApplyGroupOff 470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 471103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius EMode fMode; 473103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int64_t fExpect; 474103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat *fFmt; 475103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fPat; 476103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fString; 477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar *fStr; 478103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fLen; 479103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fFile; 480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int fLine; 481103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCPat; 482103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCStr; 483103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char name[100]; 484103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 485103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getName() { 486103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(name[0]==0) { 487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr); 488103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return name; 490103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 491103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 492103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual UNumberFormat* initFmt() { 493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius switch(fMode) { 494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case kPattern: 495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus); 496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case kApplyPattern: 497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus); 499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus); 500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return fmt; 501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case kGroupOff: 503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormat *fmt = unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus); 505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO); 506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return fmt; 507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case kApplyGroupOff: 509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus); 511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus); 512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO); 513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return fmt; 514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius default: 516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case kDefault: 517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return unum_open(UNUM_DEFAULT, NULL, -1, TEST_LOCALE, 0, &setupStatus); 518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 519103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 520103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getClassName() { 521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius switch(fMode) { 522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case EMode::kDefault: 523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (default)"; 524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case EMode::kPattern: 525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (pattern)"; 526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case EMode::kApplyPattern: 527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (applypattern)"; 528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case EMode::kGroupOff: 529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (pattern, group=off)"; 530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case EMode::kApplyGroupOff: 531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (applypattern, group=off)"; 532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius default: 533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return "NumFmtInt64Test (? ? ?)"; 534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 535103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 536103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumFmtInt64Test(const char *pat, const char *num, int64_t expect, const char *FILE, int LINE, EMode mode) 538103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius : HowExpensiveTest("(n/a)",FILE, LINE), 539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fMode(mode), 540103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fExpect(expect), 541103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt(0), 542103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fPat(pat, -1, US_INV), 543103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fString(num,-1,US_INV), 544103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fStr(fString.getTerminatedBuffer()), 545103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLen(u_strlen(fStr)), 546103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile(FILE), 547103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLine(LINE), 548103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCPat(pat), 549103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCStr(num) 550103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 551103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name[0]=0; 552103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 553103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void warmup() { 554103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt = initFmt(); 555103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar buf[100]; 556103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 557103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus); 558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(!U_SUCCESS(setupStatus) 559103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius || trial!=fLen 560103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ||trial<=0 561103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius || u_strncmp(fStr,buf,trial) ) { 562103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char strBuf[200]; 563103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus); 564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n", 565103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile,fLine,getName(),strBuf,trial,fCStr,fLen, u_errorName(setupStatus)); 566103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius setupStatus = U_INTERNAL_PROGRAM_ERROR; 567103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 568103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 569103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 570103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t run() { 571103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t trial; 572103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int i; 573103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar buf[100]; 574103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 575103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for(i=0;i<U_LOTS_OF_TIMES;i++){ 576103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus); 577103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 578103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return i; 580103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~NumFmtInt64Test(){} 582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/** 585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * unum_open .. with pattern, == new DecimalFormat(pattern) 586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kPattern); runTestOn(t); } 588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/** 589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * unum_open(UNUM_DECIMAL), then 590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */ 591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_apply(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyPattern); runTestOn(t); } 592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_default(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kDefault); runTestOn(t); } 594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_gr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kGroupOff); runTestOn(t); } 595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_applygr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyGroupOff); runTestOn(t); } 596103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 597103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 598103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtStringPieceTest : public HowExpensiveTest { 599103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate: 600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const StringPiece &fExpect; 601103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat *fFmt; 602103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fPat; 603103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString fString; 604103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar *fStr; 605103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t fLen; 606103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fFile; 607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int fLine; 608103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCPat; 609103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *fCStr; 610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char name[100]; 611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 612103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getName() { 613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(name[0]==0) { 614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sprintf(name,"%s:p=|%s|,str=|%s|,sp=|%s|",getClassName(),fCPat,fCStr, fExpect.data()); 615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return name; 617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected: 619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual UNumberFormat* initFmt() { 620103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormat *d = new DecimalFormat(setupStatus); 621103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UParseError pe; 622103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius d->applyPattern(fPat, pe, setupStatus); 623103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return (UNumberFormat*) d; 624103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual const char *getClassName() { 626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return "NumFmtStringPieceTest"; 627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 628103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic: 629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& expect, const char *FILE, int LINE) 630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius : HowExpensiveTest("(n/a)",FILE, LINE), 631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fExpect(expect), 632103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt(0), 633103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fPat(pat, -1, US_INV), 634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fString(num,-1,US_INV), 635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fStr(fString.getTerminatedBuffer()), 636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLen(u_strlen(fStr)), 637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile(FILE), 638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fLine(LINE), 639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCPat(pat), 640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fCStr(num) 641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius name[0]=0; 643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius void warmup() { 645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFmt = initFmt(); 646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString buf; 647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius buf.remove(); 649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); 650fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(!U_SUCCESS(setupStatus) 651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius || fString!=buf 652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ) { 653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char strBuf[200]; 654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_strToUTF8(strBuf,200,NULL,buf.getTerminatedBuffer(),buf.length()+1,&setupStatus); 655fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n", 656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius fFile,fLine,getName(),strBuf,buf.length(),fCStr,fLen, u_errorName(setupStatus)); 657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius setupStatus = U_INTERNAL_PROGRAM_ERROR; 658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t run() { 663fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if U_DEBUG 664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t trial; 665fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 66654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int i=0; 667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString buf; 668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(U_SUCCESS(setupStatus)) { 669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for(i=0;i<U_LOTS_OF_TIMES;i++){ 670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius buf.remove(); 671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus); 672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return i; 675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius virtual ~NumFmtStringPieceTest(){} 677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumFmtStringPieceTest(p,n,x) { NumFmtStringPieceTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); } 680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: move, scope. 682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic UChar pattern[] = { 0x23 }; // '#' 68354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strdot[] = { '2', '.', '0', 0 }; 68454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strspc[] = { '2', ' ', 0 }; 68554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strgrp[] = {'2',',','2','2','2', 0 }; 68654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strbeng[] = {0x09E8,0x09E8,0x09E8,0x09E8, 0 }; 687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 688103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUNumberFormat *NumParseTest_fmt; 689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: de-uglify. 691fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(NumParseTest,{ static UChar pattern[] = { 0x23 }; NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1, TEST_LOCALE, 0, &setupStatus); },{ 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,&setupStatus); } return i; },{unum_close(NumParseTest_fmt);}) 692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 693fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(NumParseTestdot,{ static UChar pattern[] = { 0x23 }; NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1, TEST_LOCALE, 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; },{unum_close(NumParseTest_fmt);}) 694fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(NumParseTestspc,{ static UChar pattern[] = { 0x23 }; NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1, TEST_LOCALE, 0, &setupStatus); },{ 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);}) 695fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(NumParseTestgrp,{ static UChar pattern[] = { 0x23 }; NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1, TEST_LOCALE, 0, &setupStatus); },{ 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);}) 69654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 697fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(NumParseTestbeng,{ static UChar pattern[] = { 0x23 }; NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL, pattern, 1, TEST_LOCALE, 0, &setupStatus); },{ 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);}) 69854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 69954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUDateFormat *DateFormatTest_fmt = NULL; 70054dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUDate sometime = 100000000.0; 70154dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUChar onekbuf[1024]; 7028de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubertconst int32_t onekbuf_len = UPRV_LENGTHOF(onekbuf); 70354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 704fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 70554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusQuickTest(DateFormatTestBasic, \ 70654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { \ 70754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &setupStatus); \ 70854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius }, \ 70954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { \ 71054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int i; \ 71154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for(i=0;i<U_LOTS_OF_TIMES;i++) \ 71254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { \ 71354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius udat_format(DateFormatTest_fmt, sometime, onekbuf, onekbuf_len, NULL, &setupStatus); \ 71454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } \ 71554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return i; \ 71654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius }, \ 71754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { \ 71854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius udat_close(DateFormatTest_fmt); \ 71954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } \ 72054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ) 72154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 723103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusQuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;},{}) 72454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 72554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if 0 72654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <time.h> 72754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 72854dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusQuickTest(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); return j;} return U_LOTS_OF_TIMES;},{}) 72954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 73054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 731fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusOpenCloseTest(pattern,unum,open,{},(UNUM_PATTERN_DECIMAL,pattern,1,TEST_LOCALE,0,&setupStatus),{}) 732fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusOpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,TEST_LOCALE,0,&setupStatus),{}) 73354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_CONVERSION 734103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/ucnv.h" 735103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusOpenCloseTest(gb18030,ucnv,open,{},("gb18030",&setupStatus),{}) 73654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/ures.h" 738103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusOpenCloseTest(root,ures,open,{},(NULL,"root",&setupStatus),{}) 739103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 740103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTests() { 741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 742103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius SieveTest t; 743103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 744103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 74554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if 0 74654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 74754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius RandomTest t; 74854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius runTestOn(t); 74954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 75054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 751103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 752103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius NullTest t; 753103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 754103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 75554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 75654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_DATEFMT_TESTS 757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 75854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DateFormatTestBasic t; 759103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 760103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 761103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 762103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 76354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_NUMPARSE_TESTS 76454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 76554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // parse tests 76654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 76754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#","0",0.0); 76854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#","2.0",2.0); 76954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#","2 ",2); 77054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#","-2 ",-2); 77154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("+#","+2",2); 77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#,###.0","2222.0",2222.0); 77354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0); 77454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_NumTest("#","123456",123456); 77554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // attr 77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifdef HAVE_UNUM_MAYBE 77854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_YES); 77954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_NO); 78054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE); 78154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_TripleNumTest("#","2.0",2.0); 78254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DO_AttrNumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0,UNUM_PARSE_ALL_INPUT,UNUM_NO); 78354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 78454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // { NumParseTestgrp t; runTestOn(t); } 78754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NumParseTestbeng t; runTestOn(t); } 78854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 78954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 79054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 791103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 792103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifndef SKIP_NUMFORMAT_TESTS 793103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // format tests 794fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 795fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 796103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("0000","0001",1); 797103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("0000","0000",0); 798103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringPiece sp3456("3456"); 799103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("0000","3456",sp3456); 800103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("#","3456",sp3456); 801103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringPiece sp3("3"); 802103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("0000","0003",sp3); 803103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("#","3",sp3); 804103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringPiece spn3("-3"); 805103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("0000","-0003",spn3); 806103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("#","-3",spn3); 807103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringPiece spPI("123.456"); 808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("#.0000","123.4560",spPI); 809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtStringPieceTest("#.00","123.46",spPI); 810fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 811103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtTest("#","0",0.0); 812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtTest("#","12345",12345); 813103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtTest("#","-2",-2); 814103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtTest("+#","+2",2); 815fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 816103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","-682",-682); 817103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","0",0); 818103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","12345",12345); 819fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test("#,###","12,345",12345); 820103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","1234",1234); 821103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","123",123); 822fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test("#,###","123",123); 823fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_apply("#","123",123); 824fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_apply("#","12345",12345); 825fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_apply("#,###","123",123); 826fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_apply("#,###","12,345",12345); 827fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_default("","123",123); 828fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_default("","12,345",12345); 829fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_applygr0("#","123",123); 830fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_applygr0("#","12345",12345); 831fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_applygr0("#,###","123",123); 832fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_applygr0("#,###","12345",12345); 833fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_gr0("#","123",123); 834fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_gr0("#","12345",12345); 835fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_gr0("#,###","123",123); 836fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DO_NumFmtInt64Test_gr0("#,###","12345",12345); 837103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("#","-2",-2); 838103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DO_NumFmtInt64Test("+#","+2",2); 839103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 840103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 84154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_NUM_OPEN_TEST 842103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 843103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Test_unum_opendefault t; 844103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 845103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 846103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 84754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Test_unum_openpattern t; 848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 849103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 85054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 85154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 85254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif /* skip numformat tests */ 85354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_CONVERSION 854103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 85554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius Test_ucnv_opengb18030 t; 856103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 857103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 85854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 859103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 860103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Test_ures_openroot t; 861103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius runTestOn(t); 862103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 86354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 86454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(testhit==0) { 86554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fprintf(stderr, "ERROR: no tests matched.\n"); 86654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 867103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 868