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(&times[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