1103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*
264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert ***********************************************************************
30596faeddefbf198de137d5e893708495ab1584cFredrik Roubert * © 2016 and later: Unicode, Inc. and others.
464339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * License & terms of use: http://www.unicode.org/copyright.html#License
564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert ***********************************************************************
664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert ***********************************************************************
78de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Copyright (c) 2011-2016,International Business Machines
8103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Corporation and others.  All Rights Reserved.
964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert ***********************************************************************
10103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
11103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include <stdio.h>
1254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <string.h>
1354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
148de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h"
15103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "sieve.h"
16103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/utimer.h"
17103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "udbgutil.h"
1854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/ustring.h"
19103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/decimfmt.h"
2054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "unicode/udat.h"
21fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusU_NAMESPACE_USE
2254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
2354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM_IMPLEMENTS_POSIX
2454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <unistd.h>
2554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
2654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic void usage(const char *prog) {
2754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  fprintf(stderr, "Usage: %s [ -f outfile.xml ] [ -t 'TestName' ]\n", prog);
2854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
2954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
3054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
31103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTests(void);
32103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef ITERATIONS
3454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define ITERATIONS 5
3554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
3654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
37fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef TEST_LOCALE
38fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define TEST_LOCALE "en_US"
39fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif
4054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
41103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusFILE *out = NULL;
42103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUErrorCode setupStatus = U_ZERO_ERROR;
4354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *outName = NULL;
4454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint listmode = 0;
4554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *testName = NULL;
4654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusconst char *progname = NULL;
4754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint errflg = 0;
4854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint testhit = 0;
4954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
5054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint testMatch(const char *aName) {
5154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(testName==NULL) return 1;
5254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  int len = strlen(testName);
5354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(testName[len-1]=='*') {
5454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return strncmp(testName,aName,len-1);
5554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
5654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return strcmp(testName,aName);
5754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
5854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusint main(int argc, char * const * argv){
61103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG
62103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  fprintf(stderr,"%s: warning: U_DEBUG is on.\n", argv[0]);
63103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG
65103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
66103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double m;
67103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double s = uprv_getSieveTime(&m);
68103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(stderr, "** Standard sieve time: %.9fs +/- %.9fs (%d iterations)\n", s,m, (int)U_LOTS_OF_TIMES);
69103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
70103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
71103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
7254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM_IMPLEMENTS_POSIX
7354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  int c;
74fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  //extern int optind;
7554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  extern char *optarg;
7654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  while((c=getopt(argc,argv,"lf:t:")) != EOF) {
7754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    switch(c) {
7854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    case 'f':
7954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      outName = optarg;
8054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      break;
8154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    case 'l':
8254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      listmode++;
8354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      break;
8454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    case 't':
8554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      testName = optarg;
8654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      break;
8754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    case '?':
8854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      errflg++;
8954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
9054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(errflg) {
9154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      usage(progname);
9254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      return 0;
9354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
9454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
9554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /* for ( ; optind < argc; optind++) {     ... argv[optind] } */
9654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#else
97103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  if(argc==2) {
9854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    outName = argv[1];
9954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else if(argc>2) {
10054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "Err: usage: %s [ output-file.xml ]\n", argv[0]);
10154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
10254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
10354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
10454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(listmode && outName != NULL ) {
10554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      fprintf(stderr, "Warning: no output when list mode\n");
10654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      outName=NULL;
10754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
10854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
10954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(outName != NULL) {
11054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
11154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
11254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    out=fopen(outName,"w");
113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(out==NULL) {
11454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      fprintf(stderr,"Err: can't open %s for writing.\n", outName);
115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      return 1;
11654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } else {
11754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      fprintf(stderr, "# writing results to %s\n", outName);
118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(out, "<tests icu=\"%s\">\n", U_ICU_VERSION);
121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(out, "<!-- %s -->\n", U_COPYRIGHT_STRING);
12254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
12354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "# (no output)\n");
12454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
125fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
12654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(listmode && testName!=NULL) {
12754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "ERR: no -l mode when specific test with -t\n");
12854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    usage(progname);
129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return 1;
130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
13254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  runTests();
134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  if(out!=NULL) {
13754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_INFO
138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    udbg_writeIcuInfo(out);
13954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(out, "</tests>\n");
141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fclose(out);
142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  if(U_FAILURE(setupStatus)) {
145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus));
146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return 1;
147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
148fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  return 0;
150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass HowExpensiveTest {
153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~HowExpensiveTest(){}
155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(name), fFile(file), fLine(line) {}
157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  /**
159fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius   * @return number of iterations
160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   */
161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual int32_t run() = 0;
162fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  virtual void warmup() {  run(); }
163103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
16454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  virtual const char *getName() { return fName; }
16554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliuspublic:
166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual int32_t runTest(double *subTime) {
167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UTimer a,b;
168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    utimer_getTime(&a);
169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t iter = run();
170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    utimer_getTime(&b);
171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    *subTime = utimer_getDeltaSeconds(&a,&b);
172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return iter;
173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual int32_t runTests(double *subTime, double *marginOfError) {
176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    warmup(); /* warmup */
177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double times[ITERATIONS];
178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int subIterations = 0;
179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for(int i=0;i<ITERATIONS;i++) {
180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      subIterations = runTest(&times[i]);
181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_DEBUG
182103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fprintf(stderr, "trial: %d/%d = %.9fs\n", i, ITERATIONS,times[i]);
183103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fflush(stderr);
184103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
185103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
18654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    uint32_t iterations = ITERATIONS;
18754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    *subTime = uprv_getMeanTime(times,&iterations,marginOfError);
188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return subIterations;
189103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
191103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fName;
192103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fFile;
193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fLine;
194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fIterations;
195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTestOn(HowExpensiveTest &t) {
19854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(U_FAILURE(setupStatus)) return; // silently
19954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  const char *tn = t.getName();
20054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(testName!=NULL && testMatch(tn)) return; // skipped.
20154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(listmode) {
20254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "%s:%d:\t%s\n", t.fFile, t.fLine, t.getName());
20354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    testhit++;
20454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return;
20554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
20654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "%s:%d: Running: %s\n", t.fFile, t.fLine, t.getName());
20754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    testhit++;
20854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
209103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double sieveTime = uprv_getSieveTime(NULL);
210103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double st;
211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double me;
212fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
213103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  fflush(stdout);
214103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  fflush(stderr);
215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t iter = t.runTests(&st,&me);
21654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(U_FAILURE(setupStatus)) {
21754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus));
21854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return;
21954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
220103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  fflush(stdout);
221103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  fflush(stderr);
222fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double stn = st/sieveTime;
224103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
22554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  printf("%s\t%.9f\t%.9f +/- %.9f,  @ %d iter\n", t.getName(),stn,st,me,iter);
226103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  if(out!=NULL) {
228103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fprintf(out, "   <test name=\"%s\" standardizedTime=\"%f\" realDuration=\"%f\" marginOfError=\"%f\" iterations=\"%d\" />\n",
22954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            tn,stn,st,me,iter);
230103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fflush(out);
231103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
232103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
233103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
234103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* ------------------- test code here --------------------- */
235103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
236103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass SieveTest : public HowExpensiveTest {
237103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
238103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~SieveTest(){}
239103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  SieveTest():HowExpensiveTest("SieveTest",__FILE__,__LINE__){}
240103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual int32_t run(){return 0;} // dummy
241103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t runTest(double *subTime) {
242103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    *subTime = uprv_getSieveTime(NULL);
243103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return U_LOTS_OF_TIMES;
244103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
245103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual int32_t runTests(double *subTime, double *marginOfError) {
246103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    *subTime = uprv_getSieveTime(marginOfError);
247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return U_LOTS_OF_TIMES;
248103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
249103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
250103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* ------- NumParseTest ------------- */
253103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/unum.h"
254103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* open and close tests */
255103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCName(svc,ub,testn,suffix,n) testn ## svc ## ub ## suffix ## n
256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCStr(svc,ub,suffix,n) "Test_" # svc # ub # suffix # n
257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define OCRun(svc,ub,suffix) svc ## ub ## suffix
258103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: run away screaming
259103e9ffba2cba345d0078eb8b8db33249f81840aCraig 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 };
260103e9ffba2cba345d0078eb8b8db33249f81840aCraig 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 };
261103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
262103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumTest : public HowExpensiveTest {
263103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate:
264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double fExpect;
265103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNumberFormat *fFmt;
266103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fPat;
267103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fString;
268103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const UChar *fStr;
269103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fLen;
270103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fFile;
271103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int fLine;
272103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCPat;
273103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCStr;
274103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  char name[100];
275103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
276103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getName() {
277103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(name[0]==0) {
278103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
279103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
280103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return name;
281103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
282103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
283103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual UNumberFormat* initFmt() {
284fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
285103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
286103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getClassName() {
287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return "NumTest";
288103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
290fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  NumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    : HowExpensiveTest("(n/a)",FILE, LINE),
292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fExpect(expect),
293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFmt(0),
294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fPat(pat, -1, US_INV),
295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fString(num,-1,US_INV),
296103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fStr(fString.getTerminatedBuffer()),
297103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLen(u_strlen(fStr)),
298103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFile(FILE),
299103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLine(LINE),
300103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCPat(pat),
301103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCStr(num)
302103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
303103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    name[0]=0;
304103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  void warmup() {
306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fFmt = initFmt();
307103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      double trial = unum_parseDouble(fFmt,fStr,fLen, NULL, &setupStatus);
309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      if(U_SUCCESS(setupStatus) && trial!=fExpect) {
310103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        setupStatus = U_INTERNAL_PROGRAM_ERROR;
311fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        printf("%s:%d: warmup() %s got %.8f expected %.8f\n",
312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               fFile,fLine,getName(),trial,fExpect);
313103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
314103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
316103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t run() {
317103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double trial=0.0;
318103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int i;
319103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for(i=0;i<U_LOTS_OF_TIMES;i++){
320103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      trial = unum_parse(fFmt,fStr,fLen, NULL, &setupStatus);
321103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return i;
323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~NumTest(){}
325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
330fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusclass AttrNumTest : public NumTest
331103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
332103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate:
333103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNumberFormatAttribute fAttr;
334103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fAttrValue;
335103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  char name2[100];
336103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
337103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getClassName() {
338103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    sprintf(name2,"AttrNumTest:%d=%d", fAttr,fAttrValue);
339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return name2;
340103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
341103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  AttrNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE, UNumberFormatAttribute attr, int32_t newValue)
343103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    : NumTest(pat,num,expect,FILE,LINE),
344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fAttr(attr),
345103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fAttrValue(newValue)
346103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
347103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
348103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual UNumberFormat* initFmt() {
349103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNumberFormat *fmt = NumTest::initFmt();
350103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setAttribute(fmt, fAttr,fAttrValue);
351103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return fmt;
352103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
353103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
354103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
355103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v); runTestOn(t); }
356103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
35754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusclass NOXNumTest : public NumTest
35954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius{
36054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusprivate:
36154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  UNumberFormatAttribute fAttr;
36254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  int32_t fAttrValue;
36354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  char name2[100];
36454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusprotected:
36554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  virtual const char *getClassName() {
36654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    sprintf(name2,"NOXNumTest:%d=%d", fAttr,fAttrValue);
36754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return name2;
36854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
36954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliuspublic:
370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  NOXNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE /*, UNumberFormatAttribute attr, int32_t newValue */)
37154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    : NumTest(pat,num,expect,FILE,LINE) /* ,
37254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      fAttr(attr),
37354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      fAttrValue(newValue) */
37454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  {
37554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
37654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  virtual UNumberFormat* initFmt() {
37754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    UNumberFormat *fmt = NumTest::initFmt();
37854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    //unum_setAttribute(fmt, fAttr,fAttrValue);
37954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    return fmt;
38054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
38154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius};
38254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
38354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define DO_NOXNumTest(p,n,x) { NOXNumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
38454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
385103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_TripleNumTest(p,n,x) DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_YES) \
386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_NO) \
387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                                DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE)
388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
390103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtTest : public HowExpensiveTest {
391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate:
392103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  double fExpect;
393103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNumberFormat *fFmt;
394103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fPat;
395103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fString;
396103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const UChar *fStr;
397103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fLen;
398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fFile;
399103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int fLine;
400103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCPat;
401103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCStr;
402103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  char name[100];
403103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
404103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getName() {
405103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(name[0]==0) {
406103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
407103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
408103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return name;
409103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
410103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
411103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual UNumberFormat* initFmt() {
412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
414103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getClassName() {
415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return "NumFmtTest";
416103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
417103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  NumFmtTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
419103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    : HowExpensiveTest("(n/a)",FILE, LINE),
420103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fExpect(expect),
421103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFmt(0),
422103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fPat(pat, -1, US_INV),
423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fString(num,-1,US_INV),
424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fStr(fString.getTerminatedBuffer()),
425103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLen(u_strlen(fStr)),
426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFile(FILE),
427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLine(LINE),
428103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCPat(pat),
429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCStr(num)
430103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
431103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    name[0]=0;
432103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
433103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  void warmup() {
434103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fFmt = initFmt();
435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar buf[100];
436103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
437103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus);
438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      if(!U_SUCCESS(setupStatus)
439103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         || trial!=fLen
440103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         ||trial<=0
441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         || u_strncmp(fStr,buf,trial)  ) {
442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        char strBuf[200];
443103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus);
444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        printf("%s:%d: warmup() %s got %s expected %s, err %s\n",
445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               fFile,fLine,getName(),strBuf,fCStr, u_errorName(setupStatus));
446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        setupStatus = U_INTERNAL_PROGRAM_ERROR;
447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
448103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
449103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
450103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t run() {
451103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t trial;
452103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int i;
453103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar buf[100];
454103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
455103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      for(i=0;i<U_LOTS_OF_TIMES;i++){
456103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus);
457103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
458103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
459103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return i;
460103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
461103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~NumFmtTest(){}
462103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
463103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
464103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumFmtTest(p,n,x) { NumFmtTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
465103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
466103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtInt64Test : public HowExpensiveTest {
467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliuspublic:
468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  enum EMode {
469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    kDefault,
470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    kPattern,
471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    kApplyPattern,
472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    kGroupOff,
473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    kApplyGroupOff
474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  };
475103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate:
476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  EMode   fMode;
477103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int64_t fExpect;
478103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNumberFormat *fFmt;
479103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fPat;
480103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fString;
481103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const UChar *fStr;
482103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fLen;
483103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fFile;
484103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int fLine;
485103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCPat;
486103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCStr;
487103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  char name[100];
488103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
489103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getName() {
490103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(name[0]==0) {
491103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
492103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
493103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return name;
494103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
495103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
496103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual UNumberFormat* initFmt() {
497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    switch(fMode) {
498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case kPattern:
499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case kApplyPattern:
501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      {
502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return fmt;
505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      }
506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case kGroupOff:
507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      {
508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UNumberFormat *fmt = unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO);
510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return fmt;
511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      }
512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case kApplyGroupOff:
513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      {
514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO);
517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return fmt;
518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      }
519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    default:
520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case kDefault:
521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return unum_open(UNUM_DEFAULT, NULL, -1, TEST_LOCALE, 0, &setupStatus);
522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
523103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
524103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getClassName() {
525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    switch(fMode) {
526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case EMode::kDefault:
527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (default)";
528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case EMode::kPattern:
529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (pattern)";
530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case EMode::kApplyPattern:
531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (applypattern)";
532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case EMode::kGroupOff:
533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (pattern, group=off)";
534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    case EMode::kApplyGroupOff:
535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (applypattern, group=off)";
536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    default:
537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      return "NumFmtInt64Test (? ? ?)";
538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
539103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
540103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  NumFmtInt64Test(const char *pat, const char *num, int64_t expect, const char *FILE, int LINE, EMode mode)
542103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    : HowExpensiveTest("(n/a)",FILE, LINE),
543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      fMode(mode),
544103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fExpect(expect),
545103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFmt(0),
546103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fPat(pat, -1, US_INV),
547103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fString(num,-1,US_INV),
548103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fStr(fString.getTerminatedBuffer()),
549103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLen(u_strlen(fStr)),
550103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFile(FILE),
551103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLine(LINE),
552103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCPat(pat),
553103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCStr(num)
554103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
555103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    name[0]=0;
556103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
557103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  void warmup() {
558103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fFmt = initFmt();
559103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar buf[100];
560103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
561103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus);
562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      if(!U_SUCCESS(setupStatus)
563103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         || trial!=fLen
564103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         ||trial<=0
565103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         || u_strncmp(fStr,buf,trial)  ) {
566103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        char strBuf[200];
567103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus);
568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n",
569103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               fFile,fLine,getName(),strBuf,trial,fCStr,fLen, u_errorName(setupStatus));
570103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        setupStatus = U_INTERNAL_PROGRAM_ERROR;
571103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
572103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
573103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
574103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t run() {
575103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t trial;
576103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int i;
577103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar buf[100];
578103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      for(i=0;i<U_LOTS_OF_TIMES;i++){
580103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus);
581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return i;
584103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
585103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~NumFmtInt64Test(){}
586103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
587103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/**
589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * unum_open .. with pattern, == new DecimalFormat(pattern)
590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */
591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kPattern); runTestOn(t); }
592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/**
593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * unum_open(UNUM_DECIMAL), then
594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */
595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_apply(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyPattern); runTestOn(t); }
596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_default(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kDefault); runTestOn(t); }
598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_gr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kGroupOff); runTestOn(t); }
599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#define DO_NumFmtInt64Test_applygr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyGroupOff); runTestOn(t); }
600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
601103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
602103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusclass NumFmtStringPieceTest : public HowExpensiveTest {
603103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprivate:
604103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const StringPiece &fExpect;
605103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNumberFormat *fFmt;
606103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fPat;
607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UnicodeString fString;
608103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const UChar *fStr;
609103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t fLen;
610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fFile;
611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int fLine;
612103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCPat;
613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  const char *fCStr;
614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  char name[100];
615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getName() {
617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(name[0]==0) {
618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      sprintf(name,"%s:p=|%s|,str=|%s|,sp=|%s|",getClassName(),fCPat,fCStr, fExpect.data());
619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
620103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return name;
621103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
622103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusprotected:
623103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual UNumberFormat* initFmt() {
624103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DecimalFormat *d = new DecimalFormat(setupStatus);
625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UParseError pe;
626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    d->applyPattern(fPat, pe, setupStatus);
627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return (UNumberFormat*) d;
628103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
629103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual const char *getClassName() {
630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return "NumFmtStringPieceTest";
631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
632103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliuspublic:
633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& expect, const char *FILE, int LINE)
634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    : HowExpensiveTest("(n/a)",FILE, LINE),
635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fExpect(expect),
636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFmt(0),
637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fPat(pat, -1, US_INV),
638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fString(num,-1,US_INV),
639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fStr(fString.getTerminatedBuffer()),
640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLen(u_strlen(fStr)),
641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fFile(FILE),
642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fLine(LINE),
643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCPat(pat),
644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      fCStr(num)
645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    name[0]=0;
647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  void warmup() {
649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    fFmt = initFmt();
650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString buf;
651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      buf.remove();
653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus);
654fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius      if(!U_SUCCESS(setupStatus)
655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         || fString!=buf
656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius         ) {
657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        char strBuf[200];
658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        u_strToUTF8(strBuf,200,NULL,buf.getTerminatedBuffer(),buf.length()+1,&setupStatus);
659fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n",
660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius               fFile,fLine,getName(),strBuf,buf.length(),fCStr,fLen, u_errorName(setupStatus));
661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        setupStatus = U_INTERNAL_PROGRAM_ERROR;
662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
665fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  int32_t run() {
667fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if U_DEBUG
668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t trial;
669fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif
67054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    int i=0;
671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString buf;
672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if(U_SUCCESS(setupStatus)) {
673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      for(i=0;i<U_LOTS_OF_TIMES;i++){
674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        buf.remove();
675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus);
676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      }
677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    return i;
679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  virtual ~NumFmtStringPieceTest(){}
681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius};
682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define DO_NumFmtStringPieceTest(p,n,x) { NumFmtStringPieceTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: move, scope.
686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic UChar pattern[] = { 0x23 }; // '#'
68754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strdot[] = { '2', '.', '0', 0 };
68854dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strspc[] = { '2', ' ', 0 };
68954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strgrp[] = {'2',',','2','2','2', 0 };
69054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic UChar strbeng[] = {0x09E8,0x09E8,0x09E8,0x09E8, 0 };
691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
692103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusUNumberFormat *NumParseTest_fmt;
693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius// TODO: de-uglify.
695fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(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);})
696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
697fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(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);})
698fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(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);})
699fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(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);})
70054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
701fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusQuickTest(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);})
70254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
70354dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUDateFormat *DateFormatTest_fmt = NULL;
70454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUDate sometime = 100000000.0;
70554dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusUChar onekbuf[1024];
7068de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubertconst int32_t onekbuf_len = UPRV_LENGTHOF(onekbuf);
70754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
708fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
70954dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusQuickTest(DateFormatTestBasic, \
71054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          { \
71154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &setupStatus); \
71254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          }, \
71354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          { \
71454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            int i; \
71554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            for(i=0;i<U_LOTS_OF_TIMES;i++)  \
71654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            { \
71754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius              udat_format(DateFormatTest_fmt, sometime, onekbuf, onekbuf_len, NULL, &setupStatus); \
71854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            } \
71954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            return i; \
72054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          }, \
72154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          { \
72254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            udat_close(DateFormatTest_fmt); \
72354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          } \
72454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius      )
72554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
726103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
727103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusQuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;},{})
72854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
72954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if 0
73054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include <time.h>
73154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
73254dcd9b6a06071f647dac967e9e267abb9410720Craig 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;},{})
73354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
73454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
735fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusOpenCloseTest(pattern,unum,open,{},(UNUM_PATTERN_DECIMAL,pattern,1,TEST_LOCALE,0,&setupStatus),{})
736fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusOpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,TEST_LOCALE,0,&setupStatus),{})
73754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_CONVERSION
738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/ucnv.h"
739103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusOpenCloseTest(gb18030,ucnv,open,{},("gb18030",&setupStatus),{})
74054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/ures.h"
742103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusOpenCloseTest(root,ures,open,{},(NULL,"root",&setupStatus),{})
743103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
744103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid runTests() {
745103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
746103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    SieveTest t;
747103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
748103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
74954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if 0
75054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  {
75154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    RandomTest t;
75254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    runTestOn(t);
75354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
75454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
755103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
756103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    NullTest t;
757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
758103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
75954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
76054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_DATEFMT_TESTS
761103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
76254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DateFormatTestBasic t;
763103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
764103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
765103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
766103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
76754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_NUMPARSE_TESTS
76854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  {
76954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // parse tests
77054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
77154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#","0",0.0);
77254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#","2.0",2.0);
77354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#","2 ",2);
77454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#","-2 ",-2);
77554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("+#","+2",2);
77654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#,###.0","2222.0",2222.0);
77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0);
77854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_NumTest("#","123456",123456);
77954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
78054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // attr
78154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifdef HAVE_UNUM_MAYBE
78254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_YES);
78354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_NO);
78454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE);
78554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_TripleNumTest("#","2.0",2.0);
78654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    DO_AttrNumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0,UNUM_PARSE_ALL_INPUT,UNUM_NO);
78754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
78854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
78954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
79054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    //  {    NumParseTestgrp t;    runTestOn(t);  }
79154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {    NumParseTestbeng t;    runTestOn(t);  }
79254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
79354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
79454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
795103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
796103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifndef SKIP_NUMFORMAT_TESTS
797103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  // format tests
798fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  {
799fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
800103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("0000","0001",1);
801103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("0000","0000",0);
802103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringPiece sp3456("3456");
803103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("0000","3456",sp3456);
804103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("#","3456",sp3456);
805103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringPiece sp3("3");
806103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("0000","0003",sp3);
807103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("#","3",sp3);
808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringPiece spn3("-3");
809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("0000","-0003",spn3);
810103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("#","-3",spn3);
811103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringPiece spPI("123.456");
812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("#.0000","123.4560",spPI);
813103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtStringPieceTest("#.00","123.46",spPI);
814fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
815103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtTest("#","0",0.0);
816103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtTest("#","12345",12345);
817103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtTest("#","-2",-2);
818103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtTest("+#","+2",2);
819fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
820103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","-682",-682);
821103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","0",0);
822103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","12345",12345);
823fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test("#,###","12,345",12345);
824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","1234",1234);
825103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","123",123);
826fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test("#,###","123",123);
827fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_apply("#","123",123);
828fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_apply("#","12345",12345);
829fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_apply("#,###","123",123);
830fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_apply("#,###","12,345",12345);
831fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_default("","123",123);
832fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_default("","12,345",12345);
833fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_applygr0("#","123",123);
834fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_applygr0("#","12345",12345);
835fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_applygr0("#,###","123",123);
836fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_applygr0("#,###","12345",12345);
837fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_gr0("#","123",123);
838fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_gr0("#","12345",12345);
839fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_gr0("#,###","123",123);
840fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DO_NumFmtInt64Test_gr0("#,###","12345",12345);
841103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("#","-2",-2);
842103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DO_NumFmtInt64Test("+#","+2",2);
843103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
844103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
84554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#ifndef SKIP_NUM_OPEN_TEST
846103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
847103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Test_unum_opendefault t;
848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
849103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
850103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
85154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    Test_unum_openpattern t;
852103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
853103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
85454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
85554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
85654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif /* skip numformat tests */
85754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if !UCONFIG_NO_CONVERSION
858103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
85954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    Test_ucnv_opengb18030 t;
860103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
861103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
86254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
863103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  {
864103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Test_ures_openroot t;
865103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    runTestOn(t);
866103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
86754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
86854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(testhit==0) {
86954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    fprintf(stderr, "ERROR: no tests matched.\n");
87054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  }
871103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
872