]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/perf/howExpensiveIs/howExpensiveIs.cpp
ICU-66108.tar.gz
[apple/icu.git] / icuSources / test / perf / howExpensiveIs / howExpensiveIs.cpp
index 1d15e04a383b4f137e7db14dc6a576eafe06cb03..fb16e4f672d16280cb7074f6a076e3616697311c 100644 (file)
@@ -1,18 +1,24 @@
 /*
- **********************************************************************
- * Copyright (c) 2011-2012,International Business Machines
+ ***********************************************************************
+ * © 2016 and later: Unicode, Inc. and others.
+ * License & terms of use: http://www.unicode.org/copyright.html#License
+ ***********************************************************************
+ ***********************************************************************
+ * Copyright (c) 2011-2016,International Business Machines
  * Corporation and others.  All Rights Reserved.
- **********************************************************************
+ ***********************************************************************
  */
 #include <stdio.h>
 #include <string.h>
 
+#include "cmemory.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>
@@ -28,6 +34,9 @@ void runTests(void);
 #define ITERATIONS 5
 #endif
 
+#ifndef TEST_LOCALE
+#define TEST_LOCALE "en_US"
+#endif
 
 FILE *out = NULL;
 UErrorCode setupStatus = U_ZERO_ERROR;
@@ -62,7 +71,7 @@ int main(int argc, char * const * argv){
 
 #if U_PLATFORM_IMPLEMENTS_POSIX
   int c;
-  extern int optind;
+  //extern int optind;
   extern char *optarg;
   while((c=getopt(argc,argv,"lf:t:")) != EOF) {
     switch(c) {
@@ -113,7 +122,7 @@ int main(int argc, char * const * argv){
   } else {
     fprintf(stderr, "# (no output)\n");
   }
-  
+
   if(listmode && testName!=NULL) {
     fprintf(stderr, "ERR: no -l mode when specific test with -t\n");
     usage(progname);
@@ -122,7 +131,7 @@ int main(int argc, char * const * argv){
 
 
   runTests();
-  
+
 
   if(out!=NULL) {
 #ifndef SKIP_INFO
@@ -136,7 +145,7 @@ int main(int argc, char * const * argv){
     fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus));
     return 1;
   }
-  
+
   return 0;
 }
 
@@ -147,10 +156,10 @@ protected:
   HowExpensiveTest(const char *name, const char *file, int32_t line) : fName(name), fFile(file), fLine(line) {}
 protected:
   /**
-   * @return number of iterations 
+   * @return number of iterations
    */
   virtual int32_t run() = 0;
-  virtual void warmup() {  run(); } 
+  virtual void warmup() {  run(); }
 public:
   virtual const char *getName() { return fName; }
 public:
@@ -200,7 +209,7 @@ void runTestOn(HowExpensiveTest &t) {
   double sieveTime = uprv_getSieveTime(NULL);
   double st;
   double me;
-  
+
   fflush(stdout);
   fflush(stderr);
   int32_t iter = t.runTests(&st,&me);
@@ -210,7 +219,7 @@ void runTestOn(HowExpensiveTest &t) {
   }
   fflush(stdout);
   fflush(stderr);
-  
+
   double stn = st/sieveTime;
 
   printf("%s\t%.9f\t%.9f +/- %.9f,  @ %d iter\n", t.getName(),stn,st,me,iter);
@@ -272,13 +281,13 @@ public:
   }
 protected:
   virtual UNumberFormat* initFmt() {
-    return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_US", 0, &setupStatus);
+    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) 
+  NumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
     : HowExpensiveTest("(n/a)",FILE, LINE),
       fExpect(expect),
       fFmt(0),
@@ -299,7 +308,7 @@ public:
       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", 
+        printf("%s:%d: warmup() %s got %.8f expected %.8f\n",
                fFile,fLine,getName(),trial,fExpect);
       }
     }
@@ -318,7 +327,7 @@ public:
 #define DO_NumTest(p,n,x) { NumTest t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
 
 
-class AttrNumTest : public NumTest 
+class AttrNumTest : public NumTest
 {
 private:
   UNumberFormatAttribute fAttr;
@@ -330,7 +339,7 @@ protected:
     return name2;
   }
 public:
-  AttrNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE, UNumberFormatAttribute attr, int32_t newValue) 
+  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)
@@ -346,7 +355,7 @@ public:
 #define DO_AttrNumTest(p,n,x,a,v) { AttrNumTest t(p,n,x,__FILE__,__LINE__,a,v); runTestOn(t); }
 
 
-class NOXNumTest : public NumTest 
+class NOXNumTest : public NumTest
 {
 private:
   UNumberFormatAttribute fAttr;
@@ -358,7 +367,7 @@ protected:
     return name2;
   }
 public:
-  NOXNumTest(const char *pat, const char *num, double expect, const char *FILE, int LINE /*, UNumberFormatAttribute attr, int32_t newValue */) 
+  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) */
@@ -400,13 +409,13 @@ public:
   }
 protected:
   virtual UNumberFormat* initFmt() {
-    return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_US", 0, &setupStatus);
+    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) 
+  NumFmtTest(const char *pat, const char *num, double expect, const char *FILE, int LINE)
     : HowExpensiveTest("(n/a)",FILE, LINE),
       fExpect(expect),
       fFmt(0),
@@ -426,13 +435,13 @@ public:
     UChar buf[100];
     if(U_SUCCESS(setupStatus)) {
       int32_t trial = unum_formatDouble(fFmt,fExpect, buf, 100, NULL, &setupStatus);
-      if(!U_SUCCESS(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", 
+        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;
       }
@@ -454,9 +463,17 @@ public:
 
 #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;
@@ -477,14 +494,53 @@ public:
   }
 protected:
   virtual UNumberFormat* initFmt() {
-    return unum_open(UNUM_PATTERN_DECIMAL, fPat.getTerminatedBuffer(), -1, "en_US", 0, &setupStatus);
+    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() {
-    return "NumFmtInt64Test";
+    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
+  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),
@@ -503,13 +559,13 @@ public:
     UChar buf[100];
     if(U_SUCCESS(setupStatus)) {
       int32_t trial = unum_formatInt64(fFmt,fExpect, buf, 100, NULL, &setupStatus);
-      if(!U_SUCCESS(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", 
+        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;
       }
@@ -529,7 +585,18 @@ public:
   virtual ~NumFmtInt64Test(){}
 };
 
-#define DO_NumFmtInt64Test(p,n,x) { NumFmtInt64Test t(p,n,x,__FILE__,__LINE__); runTestOn(t); }
+/**
+ * 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 {
@@ -563,7 +630,7 @@ protected:
     return "NumFmtStringPieceTest";
   }
 public:
-  NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& expect, const char *FILE, int LINE) 
+  NumFmtStringPieceTest(const char *pat, const char *num, const StringPiece& expect, const char *FILE, int LINE)
     : HowExpensiveTest("(n/a)",FILE, LINE),
       fExpect(expect),
       fFmt(0),
@@ -584,20 +651,22 @@ public:
     if(U_SUCCESS(setupStatus)) {
       buf.remove();
       ((const DecimalFormat*)fFmt)->format(fExpect, buf, NULL, setupStatus);
-      if(!U_SUCCESS(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", 
+        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)) {
@@ -623,20 +692,20 @@ 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,                    "en_US",                    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(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,                    "en_US",                    0,                    &setupStatus);  },{    int32_t i;  double val;    for(i=0;i<U_LOTS_OF_TIMES;i++) {      val=unum_parse(NumParseTest_fmt,strdot,1,NULL,&setupStatus);    }    return i;  },{unum_close(NumParseTest_fmt);})
-QuickTest(NumParseTestspc,{    static UChar pattern[] = { 0x23 };    NumParseTest_fmt = unum_open(UNUM_PATTERN_DECIMAL,         pattern,                    1,                    "en_US",                    0,                    &setupStatus);  },{    int32_t i;    double val;    for(i=0;i<U_LOTS_OF_TIMES;i++) {      val=unum_parse(NumParseTest_fmt,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,                    "en_US",                    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(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,                    "en_US",                    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);})
+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]);
+const int32_t onekbuf_len = UPRV_LENGTHOF(onekbuf);
+
 
 QuickTest(DateFormatTestBasic, \
           { \
             DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &setupStatus); \
@@ -663,8 +732,8 @@ QuickTest(NullTest,{},{int j=U_LOTS_OF_TIMES;while(--j);return U_LOTS_OF_TIMES;}
 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,"en_US",0,&setupStatus),{})
-OpenCloseTest(default,unum,open,{},(UNUM_DEFAULT,NULL,-1,"en_US",0,&setupStatus),{})
+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),{})
@@ -726,8 +795,8 @@ void runTests() {
 
 #ifndef SKIP_NUMFORMAT_TESTS
   // format tests
-  { 
-    
+  {
+
     DO_NumFmtInt64Test("0000","0001",1);
     DO_NumFmtInt64Test("0000","0000",0);
     StringPiece sp3456("3456");
@@ -742,16 +811,33 @@ void runTests() {
     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);
   }