| Index: source/test/perf/howExpensiveIs/howExpensiveIs.cpp
|
| diff --git a/source/test/perf/howExpensiveIs/howExpensiveIs.cpp b/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
|
| deleted file mode 100644
|
| index be59fc301088f4cf51f7669249f37e8aa066b462..0000000000000000000000000000000000000000
|
| --- a/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
|
| +++ /dev/null
|
| @@ -1,866 +0,0 @@
|
| -/*
|
| - **********************************************************************
|
| - * Copyright (c) 2011-2014,International Business Machines
|
| - * Corporation and others. All Rights Reserved.
|
| - **********************************************************************
|
| - */
|
| -#include <stdio.h>
|
| -#include <string.h>
|
| -
|
| -#include "sieve.h"
|
| -#include "unicode/utimer.h"
|
| -#include "udbgutil.h"
|
| -#include "unicode/ustring.h"
|
| -#include "unicode/decimfmt.h"
|
| -#include "unicode/udat.h"
|
| -U_NAMESPACE_USE
|
| -
|
| -#if U_PLATFORM_IMPLEMENTS_POSIX
|
| -#include <unistd.h>
|
| -
|
| -static void usage(const char *prog) {
|
| - fprintf(stderr, "Usage: %s [ -f outfile.xml ] [ -t 'TestName' ]\n", prog);
|
| -}
|
| -#endif
|
| -
|
| -void runTests(void);
|
| -
|
| -#ifndef ITERATIONS
|
| -#define ITERATIONS 5
|
| -#endif
|
| -
|
| -#ifndef TEST_LOCALE
|
| -#define TEST_LOCALE "en_US"
|
| -#endif
|
| -
|
| -FILE *out = NULL;
|
| -UErrorCode setupStatus = U_ZERO_ERROR;
|
| -const char *outName = NULL;
|
| -int listmode = 0;
|
| -const char *testName = NULL;
|
| -const char *progname = NULL;
|
| -int errflg = 0;
|
| -int testhit = 0;
|
| -
|
| -int testMatch(const char *aName) {
|
| - if(testName==NULL) return 1;
|
| - int len = strlen(testName);
|
| - if(testName[len-1]=='*') {
|
| - return strncmp(testName,aName,len-1);
|
| - } else {
|
| - return strcmp(testName,aName);
|
| - }
|
| -}
|
| -
|
| -int main(int argc, char * const * argv){
|
| -#if U_DEBUG
|
| - fprintf(stderr,"%s: warning: U_DEBUG is on.\n", argv[0]);
|
| -#endif
|
| -#if U_DEBUG
|
| - {
|
| - double m;
|
| - double s = uprv_getSieveTime(&m);
|
| - fprintf(stderr, "** Standard sieve time: %.9fs +/- %.9fs (%d iterations)\n", s,m, (int)U_LOTS_OF_TIMES);
|
| - }
|
| -#endif
|
| -
|
| -#if U_PLATFORM_IMPLEMENTS_POSIX
|
| - int c;
|
| - //extern int optind;
|
| - extern char *optarg;
|
| - while((c=getopt(argc,argv,"lf:t:")) != EOF) {
|
| - switch(c) {
|
| - case 'f':
|
| - outName = optarg;
|
| - break;
|
| - case 'l':
|
| - listmode++;
|
| - break;
|
| - case 't':
|
| - testName = optarg;
|
| - break;
|
| - case '?':
|
| - errflg++;
|
| - }
|
| - if(errflg) {
|
| - usage(progname);
|
| - return 0;
|
| - }
|
| - }
|
| - /* for ( ; optind < argc; optind++) { ... argv[optind] } */
|
| -#else
|
| - if(argc==2) {
|
| - outName = argv[1];
|
| - } else if(argc>2) {
|
| - fprintf(stderr, "Err: usage: %s [ output-file.xml ]\n", argv[0]);
|
| - }
|
| -#endif
|
| -
|
| - if(listmode && outName != NULL ) {
|
| - fprintf(stderr, "Warning: no output when list mode\n");
|
| - outName=NULL;
|
| - }
|
| -
|
| - if(outName != NULL) {
|
| -
|
| -
|
| - out=fopen(outName,"w");
|
| - if(out==NULL) {
|
| - fprintf(stderr,"Err: can't open %s for writing.\n", outName);
|
| - return 1;
|
| - } else {
|
| - fprintf(stderr, "# writing results to %s\n", outName);
|
| - }
|
| - fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
|
| - fprintf(out, "<tests icu=\"%s\">\n", U_ICU_VERSION);
|
| - fprintf(out, "<!-- %s -->\n", U_COPYRIGHT_STRING);
|
| - } else {
|
| - fprintf(stderr, "# (no output)\n");
|
| - }
|
| -
|
| - if(listmode && testName!=NULL) {
|
| - fprintf(stderr, "ERR: no -l mode when specific test with -t\n");
|
| - usage(progname);
|
| - return 1;
|
| - }
|
| -
|
| -
|
| - runTests();
|
| -
|
| -
|
| - if(out!=NULL) {
|
| -#ifndef SKIP_INFO
|
| - udbg_writeIcuInfo(out);
|
| -#endif
|
| - fprintf(out, "</tests>\n");
|
| - fclose(out);
|
| - }
|
| -
|
| - if(U_FAILURE(setupStatus)) {
|
| - fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus));
|
| - return 1;
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -class HowExpensiveTest {
|
| -public:
|
| - virtual ~HowExpensiveTest(){}
|
| -protected:
|
| - HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(name), fFile(file), fLine(line) {}
|
| -protected:
|
| - /**
|
| - * @return number of iterations
|
| - */
|
| - virtual int32_t run() = 0;
|
| - virtual void warmup() { run(); }
|
| -public:
|
| - virtual const char *getName() { return fName; }
|
| -public:
|
| - virtual int32_t runTest(double *subTime) {
|
| - UTimer a,b;
|
| - utimer_getTime(&a);
|
| - int32_t iter = run();
|
| - utimer_getTime(&b);
|
| - *subTime = utimer_getDeltaSeconds(&a,&b);
|
| - return iter;
|
| - }
|
| -
|
| - virtual int32_t runTests(double *subTime, double *marginOfError) {
|
| - warmup(); /* warmup */
|
| - double times[ITERATIONS];
|
| - int subIterations = 0;
|
| - for(int i=0;i<ITERATIONS;i++) {
|
| - subIterations = runTest(×[i]);
|
| -#if U_DEBUG
|
| - fprintf(stderr, "trial: %d/%d = %.9fs\n", i, ITERATIONS,times[i]);
|
| - fflush(stderr);
|
| -#endif
|
| - }
|
| - uint32_t iterations = ITERATIONS;
|
| - *subTime = uprv_getMeanTime(times,&iterations,marginOfError);
|
| - return subIterations;
|
| - }
|
| -public:
|
| - const char *fName;
|
| - const char *fFile;
|
| - int32_t fLine;
|
| - int32_t fIterations;
|
| -};
|
| -
|
| -void runTestOn(HowExpensiveTest &t) {
|
| - if(U_FAILURE(setupStatus)) return; // silently
|
| - const char *tn = t.getName();
|
| - if(testName!=NULL && testMatch(tn)) return; // skipped.
|
| - if(listmode) {
|
| - fprintf(stderr, "%s:%d:\t%s\n", t.fFile, t.fLine, t.getName());
|
| - testhit++;
|
| - return;
|
| - } else {
|
| - fprintf(stderr, "%s:%d: Running: %s\n", t.fFile, t.fLine, t.getName());
|
| - testhit++;
|
| - }
|
| - double sieveTime = uprv_getSieveTime(NULL);
|
| - double st;
|
| - double me;
|
| -
|
| - fflush(stdout);
|
| - fflush(stderr);
|
| - int32_t iter = t.runTests(&st,&me);
|
| - if(U_FAILURE(setupStatus)) {
|
| - fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus));
|
| - return;
|
| - }
|
| - fflush(stdout);
|
| - fflush(stderr);
|
| -
|
| - double stn = st/sieveTime;
|
| -
|
| - printf("%s\t%.9f\t%.9f +/- %.9f, @ %d iter\n", t.getName(),stn,st,me,iter);
|
| -
|
| - if(out!=NULL) {
|
| - fprintf(out, " <test name=\"%s\" standardizedTime=\"%f\" realDuration=\"%f\" marginOfError=\"%f\" iterations=\"%d\" />\n",
|
| - tn,stn,st,me,iter);
|
| - fflush(out);
|
| - }
|
| -}
|
| -
|
| -/* ------------------- test code here --------------------- */
|
| -
|
| -class SieveTest : public HowExpensiveTest {
|
| -public:
|
| - virtual ~SieveTest(){}
|
| - SieveTest():HowExpensiveTest("SieveTest",__FILE__,__LINE__){}
|
| - virtual int32_t run(){return 0;} // dummy
|
| - int32_t runTest(double *subTime) {
|
| - *subTime = uprv_getSieveTime(NULL);
|
| - return U_LOTS_OF_TIMES;
|
| - }
|
| - virtual int32_t runTests(double *subTime, double *marginOfError) {
|
| - *subTime = uprv_getSieveTime(marginOfError);
|
| - return U_LOTS_OF_TIMES;
|
| - }
|
| -};
|
| -
|
| -
|
| -/* ------- NumParseTest ------------- */
|
| -#include "unicode/unum.h"
|
| -/* open and close tests */
|
| -#define OCName(svc,ub,testn,suffix,n) testn ## svc ## ub ## suffix ## n
|
| -#define OCStr(svc,ub,suffix,n) "Test_" # svc # ub # suffix # n
|
| -#define OCRun(svc,ub,suffix) svc ## ub ## suffix
|
| -// TODO: run away screaming
|
| -#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 };
|
| -#define QuickTest(n,c,r,d) class n : public HowExpensiveTest { public: n():HowExpensiveTest(#n,__FILE__,__LINE__) c int32_t run() r virtual ~n () d };
|
| -
|
| -class NumTest : public HowExpensiveTest {
|
| -private:
|
| - double fExpect;
|
| - UNumberFormat *fFmt;
|
| - UnicodeString fPat;
|
| - UnicodeString fString;
|
| - const UChar *fStr;
|
| - int32_t fLen;
|
| - const char *fFile;
|
| - int fLine;
|
| - const char *fCPat;
|
| - const char *fCStr;
|
| - char name[100];
|
| -public:
|
| - virtual const char *getName() {
|
| - if(name[0]==0) {
|
| - sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
|
| - }
|
| - return name;
|
| - }
|
| -protected:
|
| - virtual UNumberFormat* initFmt() {
|
| - return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
|
| - }
|
| - virtual const char *getClassName() {
|
| - return "NumTest";
|
| - }
|
| -public:
|
| - NumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
|
| - : HowExpensiveTest("(n/a)",FILE, LINE),
|
| - fExpect(expect),
|
| - fFmt(0),
|
| - fPat(pat, -1, US_INV),
|
| - fString(num,-1,US_INV),
|
| - fStr(fString.getTerminatedBuffer()),
|
| - fLen(u_strlen(fStr)),
|
| - fFile(FILE),
|
| - fLine(LINE),
|
| - fCPat(pat),
|
| - fCStr(num)
|
| - {
|
| - name[0]=0;
|
| - }
|
| - void warmup() {
|
| - fFmt = initFmt();
|
| - if(U_SUCCESS(setupStatus)) {
|
| - double trial = unum_parseDouble(fFmt,fStr,fLen, NULL, &setupStatus);
|
| - if(U_SUCCESS(setupStatus) && trial!=fExpect) {
|
| - setupStatus = U_INTERNAL_PROGRAM_ERROR;
|
| - printf("%s:%d: warmup() %s got %.8f expected %.8f\n",
|
| - fFile,fLine,getName(),trial,fExpect);
|
| - }
|
| - }
|
| - }
|
| - int32_t run() {
|
| - double trial=0.0;
|
| - int i;
|
| - for(i=0;i<U_LOTS_OF_TIMES;i++){
|
| - trial = unum_parse(fFmt,fStr,fLen, NULL, &setupStatus);
|
| - }
|
| - return i;
|
| - }
|
| - virtual ~NumTest(){}
|
| -};
|
| -
|
| -#define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
|
| -
|
| -
|
| -class AttrNumTest : public NumTest
|
| -{
|
| -private:
|
| - UNumberFormatAttribute fAttr;
|
| - int32_t fAttrValue;
|
| - char name2[100];
|
| -protected:
|
| - virtual const char *getClassName() {
|
| - sprintf(name2,"AttrNumTest:%d=%d", fAttr,fAttrValue);
|
| - return name2;
|
| - }
|
| -public:
|
| - AttrNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE, UNumberFormatAttribute attr, int32_t newValue)
|
| - : NumTest(pat,num,expect,FILE,LINE),
|
| - fAttr(attr),
|
| - fAttrValue(newValue)
|
| - {
|
| - }
|
| - virtual UNumberFormat* initFmt() {
|
| - UNumberFormat *fmt = NumTest::initFmt();
|
| - unum_setAttribute(fmt, fAttr,fAttrValue);
|
| - return fmt;
|
| - }
|
| -};
|
| -
|
| -#define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v); runTestOn(t); }
|
| -
|
| -
|
| -class NOXNumTest : public NumTest
|
| -{
|
| -private:
|
| - UNumberFormatAttribute fAttr;
|
| - int32_t fAttrValue;
|
| - char name2[100];
|
| -protected:
|
| - virtual const char *getClassName() {
|
| - sprintf(name2,"NOXNumTest:%d=%d", fAttr,fAttrValue);
|
| - return name2;
|
| - }
|
| -public:
|
| - NOXNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE /*, UNumberFormatAttribute attr, int32_t newValue */)
|
| - : NumTest(pat,num,expect,FILE,LINE) /* ,
|
| - fAttr(attr),
|
| - fAttrValue(newValue) */
|
| - {
|
| - }
|
| - virtual UNumberFormat* initFmt() {
|
| - UNumberFormat *fmt = NumTest::initFmt();
|
| - //unum_setAttribute(fmt, fAttr,fAttrValue);
|
| - return fmt;
|
| - }
|
| -};
|
| -
|
| -#define DO_NOXNumTest(p,n,x) { NOXNumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
|
| -
|
| -#define DO_TripleNumTest(p,n,x) DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_YES) \
|
| - DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_NO) \
|
| - DO_AttrNumTest(p,n,x,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE)
|
| -
|
| -
|
| -class NumFmtTest : public HowExpensiveTest {
|
| -private:
|
| - double fExpect;
|
| - UNumberFormat *fFmt;
|
| - UnicodeString fPat;
|
| - UnicodeString fString;
|
| - const UChar *fStr;
|
| - int32_t fLen;
|
| - const char *fFile;
|
| - int fLine;
|
| - const char *fCPat;
|
| - const char *fCStr;
|
| - char name[100];
|
| -public:
|
| - virtual const char *getName() {
|
| - if(name[0]==0) {
|
| - sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
|
| - }
|
| - return name;
|
| - }
|
| -protected:
|
| - virtual UNumberFormat* initFmt() {
|
| - return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
|
| - }
|
| - virtual const char *getClassName() {
|
| - return "NumFmtTest";
|
| - }
|
| -public:
|
| - NumFmtTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
|
| - : HowExpensiveTest("(n/a)",FILE, LINE),
|
| - fExpect(expect),
|
| - fFmt(0),
|
| - fPat(pat, -1, US_INV),
|
| - fString(num,-1,US_INV),
|
| - fStr(fString.getTerminatedBuffer()),
|
| - fLen(u_strlen(fStr)),
|
| - fFile(FILE),
|
| - fLine(LINE),
|
| - fCPat(pat),
|
| - fCStr(num)
|
| - {
|
| - name[0]=0;
|
| - }
|
| - void warmup() {
|
| - fFmt = initFmt();
|
| - UChar buf[100];
|
| - if(U_SUCCESS(setupStatus)) {
|
| - int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus);
|
| - if(!U_SUCCESS(setupStatus)
|
| - || trial!=fLen
|
| - ||trial<=0
|
| - || u_strncmp(fStr,buf,trial) ) {
|
| - char strBuf[200];
|
| - u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus);
|
| - printf("%s:%d: warmup() %s got %s expected %s, err %s\n",
|
| - fFile,fLine,getName(),strBuf,fCStr, u_errorName(setupStatus));
|
| - setupStatus = U_INTERNAL_PROGRAM_ERROR;
|
| - }
|
| - }
|
| - }
|
| - int32_t run() {
|
| - int32_t trial;
|
| - int i;
|
| - UChar buf[100];
|
| - if(U_SUCCESS(setupStatus)) {
|
| - for(i=0;i<U_LOTS_OF_TIMES;i++){
|
| - trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus);
|
| - }
|
| - }
|
| - return i;
|
| - }
|
| - virtual ~NumFmtTest(){}
|
| -};
|
| -
|
| -#define DO_NumFmtTest(p,n,x) { NumFmtTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
|
| -
|
| -class NumFmtInt64Test : public HowExpensiveTest {
|
| -public:
|
| - enum EMode {
|
| - kDefault,
|
| - kPattern,
|
| - kApplyPattern,
|
| - kGroupOff,
|
| - kApplyGroupOff
|
| - };
|
| -private:
|
| - EMode fMode;
|
| - int64_t fExpect;
|
| - UNumberFormat *fFmt;
|
| - UnicodeString fPat;
|
| - UnicodeString fString;
|
| - const UChar *fStr;
|
| - int32_t fLen;
|
| - const char *fFile;
|
| - int fLine;
|
| - const char *fCPat;
|
| - const char *fCStr;
|
| - char name[100];
|
| -public:
|
| - virtual const char *getName() {
|
| - if(name[0]==0) {
|
| - sprintf(name,"%s:p=|%s|,str=|%s|",getClassName(),fCPat,fCStr);
|
| - }
|
| - return name;
|
| - }
|
| -protected:
|
| - virtual UNumberFormat* initFmt() {
|
| - switch(fMode) {
|
| - case kPattern:
|
| - return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
|
| - case kApplyPattern:
|
| - {
|
| - UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
|
| - unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
|
| - return fmt;
|
| - }
|
| - case kGroupOff:
|
| - {
|
| - UNumberFormat *fmt = unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, TEST_LOCALE, 0, &setupStatus);
|
| - unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO);
|
| - return fmt;
|
| - }
|
| - case kApplyGroupOff:
|
| - {
|
| - UNumberFormat *fmt = unum_open(UNUM_DECIMAL, NULL, -1, TEST_LOCALE, 0, &setupStatus);
|
| - unum_applyPattern(fmt, FALSE, fPat.getTerminatedBuffer(), -1, NULL, &setupStatus);
|
| - unum_setAttribute(fmt, UNUM_GROUPING_USED, UNUM_NO);
|
| - return fmt;
|
| - }
|
| - default:
|
| - case kDefault:
|
| - return unum_open(UNUM_DEFAULT, NULL, -1, TEST_LOCALE, 0, &setupStatus);
|
| - }
|
| - }
|
| - virtual const char *getClassName() {
|
| - switch(fMode) {
|
| - case EMode::kDefault:
|
| - return "NumFmtInt64Test (default)";
|
| - case EMode::kPattern:
|
| - return "NumFmtInt64Test (pattern)";
|
| - case EMode::kApplyPattern:
|
| - return "NumFmtInt64Test (applypattern)";
|
| - case EMode::kGroupOff:
|
| - return "NumFmtInt64Test (pattern, group=off)";
|
| - case EMode::kApplyGroupOff:
|
| - return "NumFmtInt64Test (applypattern, group=off)";
|
| - default:
|
| - return "NumFmtInt64Test (? ? ?)";
|
| - }
|
| - }
|
| -public:
|
| - NumFmtInt64Test(const char *pat, const char *num, int64_t expect, const char *FILE, int LINE, EMode mode)
|
| - : HowExpensiveTest("(n/a)",FILE, LINE),
|
| - fMode(mode),
|
| - fExpect(expect),
|
| - fFmt(0),
|
| - fPat(pat, -1, US_INV),
|
| - fString(num,-1,US_INV),
|
| - fStr(fString.getTerminatedBuffer()),
|
| - fLen(u_strlen(fStr)),
|
| - fFile(FILE),
|
| - fLine(LINE),
|
| - fCPat(pat),
|
| - fCStr(num)
|
| - {
|
| - name[0]=0;
|
| - }
|
| - void warmup() {
|
| - fFmt = initFmt();
|
| - UChar buf[100];
|
| - if(U_SUCCESS(setupStatus)) {
|
| - int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus);
|
| - if(!U_SUCCESS(setupStatus)
|
| - || trial!=fLen
|
| - ||trial<=0
|
| - || u_strncmp(fStr,buf,trial) ) {
|
| - char strBuf[200];
|
| - u_strToUTF8(strBuf,200,NULL,buf,trial+1,&setupStatus);
|
| - printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n",
|
| - fFile,fLine,getName(),strBuf,trial,fCStr,fLen, u_errorName(setupStatus));
|
| - setupStatus = U_INTERNAL_PROGRAM_ERROR;
|
| - }
|
| - }
|
| - }
|
| - int32_t run() {
|
| - int32_t trial;
|
| - int i;
|
| - UChar buf[100];
|
| - if(U_SUCCESS(setupStatus)) {
|
| - for(i=0;i<U_LOTS_OF_TIMES;i++){
|
| - trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus);
|
| - }
|
| - }
|
| - return i;
|
| - }
|
| - virtual ~NumFmtInt64Test(){}
|
| -};
|
| -
|
| -/**
|
| - * unum_open .. with pattern, == new DecimalFormat(pattern)
|
| - */
|
| -#define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kPattern); runTestOn(t); }
|
| -/**
|
| - * unum_open(UNUM_DECIMAL), then
|
| - */
|
| -#define DO_NumFmtInt64Test_apply(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyPattern); runTestOn(t); }
|
| -
|
| -#define DO_NumFmtInt64Test_default(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kDefault); runTestOn(t); }
|
| -#define DO_NumFmtInt64Test_gr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kGroupOff); runTestOn(t); }
|
| -#define DO_NumFmtInt64Test_applygr0(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__,NumFmtInt64Test::EMode::kApplyGroupOff); runTestOn(t); }
|
| -
|
| -
|
| -class NumFmtStringPieceTest : public HowExpensiveTest {
|
| -private:
|
| - const StringPiece &fExpect;
|
| - UNumberFormat *fFmt;
|
| - UnicodeString fPat;
|
| - UnicodeString fString;
|
| - const UChar *fStr;
|
| - int32_t fLen;
|
| - const char *fFile;
|
| - int fLine;
|
| - const char *fCPat;
|
| - const char *fCStr;
|
| - char name[100];
|
| -public:
|
| - virtual const char *getName() {
|
| - if(name[0]==0) {
|
| - sprintf(name,"%s:p=|%s|,str=|%s|,sp=|%s|",getClassName(),fCPat,fCStr, fExpect.data());
|
| - }
|
| - return name;
|
| - }
|
| -protected:
|
| - virtual UNumberFormat* initFmt() {
|
| - DecimalFormat *d = new DecimalFormat(setupStatus);
|
| - UParseError pe;
|
| - d->applyPattern(fPat, pe, setupStatus);
|
| - return (UNumberFormat*) d;
|
| - }
|
| - virtual const char *getClassName() {
|
| - return "NumFmtStringPieceTest";
|
| - }
|
| -public:
|
| - NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& expect, const char *FILE, int LINE)
|
| - : HowExpensiveTest("(n/a)",FILE, LINE),
|
| - fExpect(expect),
|
| - fFmt(0),
|
| - fPat(pat, -1, US_INV),
|
| - fString(num,-1,US_INV),
|
| - fStr(fString.getTerminatedBuffer()),
|
| - fLen(u_strlen(fStr)),
|
| - fFile(FILE),
|
| - fLine(LINE),
|
| - fCPat(pat),
|
| - fCStr(num)
|
| - {
|
| - name[0]=0;
|
| - }
|
| - void warmup() {
|
| - fFmt = initFmt();
|
| - UnicodeString buf;
|
| - if(U_SUCCESS(setupStatus)) {
|
| - buf.remove();
|
| - ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus);
|
| - if(!U_SUCCESS(setupStatus)
|
| - || fString!=buf
|
| - ) {
|
| - char strBuf[200];
|
| - u_strToUTF8(strBuf,200,NULL,buf.getTerminatedBuffer(),buf.length()+1,&setupStatus);
|
| - printf("%s:%d: warmup() %s got %s (len %d) expected %s (len %d), err %s\n",
|
| - fFile,fLine,getName(),strBuf,buf.length(),fCStr,fLen, u_errorName(setupStatus));
|
| - setupStatus = U_INTERNAL_PROGRAM_ERROR;
|
| - }
|
| - }
|
| - }
|
| -
|
| - int32_t run() {
|
| -#if U_DEBUG
|
| - int32_t trial;
|
| -#endif
|
| - int i=0;
|
| - UnicodeString buf;
|
| - if(U_SUCCESS(setupStatus)) {
|
| - for(i=0;i<U_LOTS_OF_TIMES;i++){
|
| - buf.remove();
|
| - ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus);
|
| - }
|
| - }
|
| - return i;
|
| - }
|
| - virtual ~NumFmtStringPieceTest(){}
|
| -};
|
| -
|
| -#define DO_NumFmtStringPieceTest(p,n,x) { NumFmtStringPieceTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
|
| -
|
| -// TODO: move, scope.
|
| -static UChar pattern[] = { 0x23 }; // '#'
|
| -static UChar strdot[] = { '2', '.', '0', 0 };
|
| -static UChar strspc[] = { '2', ' ', 0 };
|
| -static UChar strgrp[] = {'2',',','2','2','2', 0 };
|
| -static UChar strbeng[] = {0x09E8,0x09E8,0x09E8,0x09E8, 0 };
|
| -
|
| -UNumberFormat *NumParseTest_fmt;
|
| -
|
| -// TODO: de-uglify.
|
| -QuickTest(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);})
|
| -
|
| -QuickTest(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);})
|
| -QuickTest(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);})
|
| -QuickTest(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);})
|
| -
|
| -QuickTest(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);})
|
| -
|
| -UDateFormat *DateFormatTest_fmt = NULL;
|
| -UDate sometime = 100000000.0;
|
| -UChar onekbuf[1024];
|
| -const int32_t onekbuf_len = sizeof(onekbuf)/sizeof(onekbuf[0]);
|
| -
|
| -
|
| -QuickTest(DateFormatTestBasic, \
|
| - { \
|
| - DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &setupStatus); \
|
| - }, \
|
| - { \
|
| - int i; \
|
| - for(i=0;i<U_LOTS_OF_TIMES;i++) \
|
| - { \
|
| - udat_format(DateFormatTest_fmt, sometime, onekbuf, onekbuf_len, NULL, &setupStatus); \
|
| - } \
|
| - return i; \
|
| - }, \
|
| - { \
|
| - udat_close(DateFormatTest_fmt); \
|
| - } \
|
| - )
|
| -
|
| -
|
| -QuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;},{})
|
| -
|
| -#if 0
|
| -#include <time.h>
|
| -
|
| -QuickTest(RandomTest,{},{timespec ts; ts.tv_sec=rand()%4; int j=U_LOTS_OF_TIMES;while(--j) { ts.tv_nsec=100000+(rand()%10000)*1000000; nanosleep(&ts,NULL); return j;} return U_LOTS_OF_TIMES;},{})
|
| -#endif
|
| -
|
| -OpenCloseTest(pattern,unum,open,{},(UNUM_PATTERN_DECIMAL,pattern,1,TEST_LOCALE,0,&setupStatus),{})
|
| -OpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,TEST_LOCALE,0,&setupStatus),{})
|
| -#if !UCONFIG_NO_CONVERSION
|
| -#include "unicode/ucnv.h"
|
| -OpenCloseTest(gb18030,ucnv,open,{},("gb18030",&setupStatus),{})
|
| -#endif
|
| -#include "unicode/ures.h"
|
| -OpenCloseTest(root,ures,open,{},(NULL,"root",&setupStatus),{})
|
| -
|
| -void runTests() {
|
| - {
|
| - SieveTest t;
|
| - runTestOn(t);
|
| - }
|
| -#if 0
|
| - {
|
| - RandomTest t;
|
| - runTestOn(t);
|
| - }
|
| -#endif
|
| - {
|
| - NullTest t;
|
| - runTestOn(t);
|
| - }
|
| -
|
| -#ifndef SKIP_DATEFMT_TESTS
|
| - {
|
| - DateFormatTestBasic t;
|
| - runTestOn(t);
|
| - }
|
| -#endif
|
| -
|
| -#ifndef SKIP_NUMPARSE_TESTS
|
| - {
|
| - // parse tests
|
| -
|
| - DO_NumTest("#","0",0.0);
|
| - DO_NumTest("#","2.0",2.0);
|
| - DO_NumTest("#","2 ",2);
|
| - DO_NumTest("#","-2 ",-2);
|
| - DO_NumTest("+#","+2",2);
|
| - DO_NumTest("#,###.0","2222.0",2222.0);
|
| - DO_NumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0);
|
| - DO_NumTest("#","123456",123456);
|
| -
|
| - // attr
|
| -#ifdef HAVE_UNUM_MAYBE
|
| - DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_YES);
|
| - DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_NO);
|
| - DO_AttrNumTest("#","0",0.0,UNUM_PARSE_ALL_INPUT,UNUM_MAYBE);
|
| - DO_TripleNumTest("#","2.0",2.0);
|
| - DO_AttrNumTest("#.0","1.000000000000000000000000000000000000000000000000000000000000000000000000000000",1.0,UNUM_PARSE_ALL_INPUT,UNUM_NO);
|
| -#endif
|
| -
|
| -
|
| - // { NumParseTestgrp t; runTestOn(t); }
|
| - { NumParseTestbeng t; runTestOn(t); }
|
| -
|
| - }
|
| -#endif
|
| -
|
| -#ifndef SKIP_NUMFORMAT_TESTS
|
| - // format tests
|
| - {
|
| -
|
| - DO_NumFmtInt64Test("0000","0001",1);
|
| - DO_NumFmtInt64Test("0000","0000",0);
|
| - StringPiece sp3456("3456");
|
| - DO_NumFmtStringPieceTest("0000","3456",sp3456);
|
| - DO_NumFmtStringPieceTest("#","3456",sp3456);
|
| - StringPiece sp3("3");
|
| - DO_NumFmtStringPieceTest("0000","0003",sp3);
|
| - DO_NumFmtStringPieceTest("#","3",sp3);
|
| - StringPiece spn3("-3");
|
| - DO_NumFmtStringPieceTest("0000","-0003",spn3);
|
| - DO_NumFmtStringPieceTest("#","-3",spn3);
|
| - StringPiece spPI("123.456");
|
| - DO_NumFmtStringPieceTest("#.0000","123.4560",spPI);
|
| - DO_NumFmtStringPieceTest("#.00","123.46",spPI);
|
| -
|
| - DO_NumFmtTest("#","0",0.0);
|
| - DO_NumFmtTest("#","12345",12345);
|
| - DO_NumFmtTest("#","-2",-2);
|
| - DO_NumFmtTest("+#","+2",2);
|
| -
|
| - DO_NumFmtInt64Test("#","-682",-682);
|
| - DO_NumFmtInt64Test("#","0",0);
|
| - DO_NumFmtInt64Test("#","12345",12345);
|
| - DO_NumFmtInt64Test("#,###","12,345",12345);
|
| - DO_NumFmtInt64Test("#","1234",1234);
|
| - DO_NumFmtInt64Test("#","123",123);
|
| - DO_NumFmtInt64Test("#,###","123",123);
|
| - DO_NumFmtInt64Test_apply("#","123",123);
|
| - DO_NumFmtInt64Test_apply("#","12345",12345);
|
| - DO_NumFmtInt64Test_apply("#,###","123",123);
|
| - DO_NumFmtInt64Test_apply("#,###","12,345",12345);
|
| - DO_NumFmtInt64Test_default("","123",123);
|
| - DO_NumFmtInt64Test_default("","12,345",12345);
|
| - DO_NumFmtInt64Test_applygr0("#","123",123);
|
| - DO_NumFmtInt64Test_applygr0("#","12345",12345);
|
| - DO_NumFmtInt64Test_applygr0("#,###","123",123);
|
| - DO_NumFmtInt64Test_applygr0("#,###","12345",12345);
|
| - DO_NumFmtInt64Test_gr0("#","123",123);
|
| - DO_NumFmtInt64Test_gr0("#","12345",12345);
|
| - DO_NumFmtInt64Test_gr0("#,###","123",123);
|
| - DO_NumFmtInt64Test_gr0("#,###","12345",12345);
|
| - DO_NumFmtInt64Test("#","-2",-2);
|
| - DO_NumFmtInt64Test("+#","+2",2);
|
| - }
|
| -
|
| -#ifndef SKIP_NUM_OPEN_TEST
|
| - {
|
| - Test_unum_opendefault t;
|
| - runTestOn(t);
|
| - }
|
| - {
|
| - Test_unum_openpattern t;
|
| - runTestOn(t);
|
| - }
|
| -#endif
|
| -
|
| -#endif /* skip numformat tests */
|
| -#if !UCONFIG_NO_CONVERSION
|
| - {
|
| - Test_ucnv_opengb18030 t;
|
| - runTestOn(t);
|
| - }
|
| -#endif
|
| - {
|
| - Test_ures_openroot t;
|
| - runTestOn(t);
|
| - }
|
| -
|
| - if(testhit==0) {
|
| - fprintf(stderr, "ERROR: no tests matched.\n");
|
| - }
|
| -}
|
|
|