Index: source/test/perf/howExpensiveIs/howExpensiveIs.cpp |
diff --git a/source/test/perf/howExpensiveIs/howExpensiveIs.cpp b/source/test/perf/howExpensiveIs/howExpensiveIs.cpp |
index 1d15e04a383b4f137e7db14dc6a576eafe06cb03..be59fc301088f4cf51f7669249f37e8aa066b462 100644 |
--- a/source/test/perf/howExpensiveIs/howExpensiveIs.cpp |
+++ b/source/test/perf/howExpensiveIs/howExpensiveIs.cpp |
@@ -1,6 +1,6 @@ |
/* |
********************************************************************** |
- * Copyright (c) 2011-2012,International Business Machines |
+ * Copyright (c) 2011-2014,International Business Machines |
* Corporation and others. All Rights Reserved. |
********************************************************************** |
*/ |
@@ -13,6 +13,7 @@ |
#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 +29,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 +66,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 +117,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 +126,7 @@ int main(int argc, char * const * argv){ |
runTests(); |
- |
+ |
if(out!=NULL) { |
#ifndef SKIP_INFO |
@@ -136,7 +140,7 @@ int main(int argc, char * const * argv){ |
fprintf(stderr, "Error in tests: %s\n", u_errorName(setupStatus)); |
return 1; |
} |
- |
+ |
return 0; |
} |
@@ -147,10 +151,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 +204,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 +214,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 +276,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 +303,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 +322,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 +334,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 +350,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 +362,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 +404,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 +430,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 +458,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 +489,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 +554,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 +580,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 +625,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 +646,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 +687,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]); |
- |
+ |
QuickTest(DateFormatTestBasic, \ |
{ \ |
DateFormatTest_fmt = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &setupStatus); \ |
@@ -663,8 +727,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 +790,8 @@ void runTests() { |
#ifndef SKIP_NUMFORMAT_TESTS |
// format tests |
- { |
- |
+ { |
+ |
DO_NumFmtInt64Test("0000","0001",1); |
DO_NumFmtInt64Test("0000","0000",0); |
StringPiece sp3456("3456"); |
@@ -742,16 +806,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); |
} |