| Index: source/test/cintltst/cnumtst.c
|
| diff --git a/source/test/cintltst/cnumtst.c b/source/test/cintltst/cnumtst.c
|
| index 867b074eac8fb55d8de84981037c21026f0cd408..be5a6348b49001b225d20f9d77369a7ea5117167 100644
|
| --- a/source/test/cintltst/cnumtst.c
|
| +++ b/source/test/cintltst/cnumtst.c
|
| @@ -1,6 +1,6 @@
|
| /********************************************************************
|
| * COPYRIGHT:
|
| - * Copyright (c) 1997-2014, International Business Machines Corporation and
|
| + * Copyright (c) 1997-2015, International Business Machines Corporation and
|
| * others. All Rights Reserved.
|
| ********************************************************************/
|
| /********************************************************************************
|
| @@ -61,6 +61,7 @@ static void TestCurrencyIsoPluralFormat(void);
|
| static void TestContext(void);
|
| static void TestCurrencyUsage(void);
|
| static void TestCurrFmtNegSameAsPositive(void);
|
| +static void TestVariousStylesAndAttributes(void);
|
|
|
| #define TESTCASE(x) addTest(root, &x, "tsformat/cnumtst/" #x)
|
|
|
| @@ -89,6 +90,7 @@ void addNumForTest(TestNode** root)
|
| TESTCASE(TestContext);
|
| TESTCASE(TestCurrencyUsage);
|
| TESTCASE(TestCurrFmtNegSameAsPositive);
|
| + TESTCASE(TestVariousStylesAndAttributes);
|
| }
|
|
|
| /* test Parse int 64 */
|
| @@ -2389,34 +2391,49 @@ static void TestUNumberingSystem(void) {
|
| /* plain-C version of test in numfmtst.cpp */
|
| enum { kUBufMax = 64 };
|
| static void TestCurrencyIsoPluralFormat(void) {
|
| - static const char* DATA[][6] = {
|
| + static const char* DATA[][8] = {
|
| // the data are:
|
| // locale,
|
| // currency amount to be formatted,
|
| // currency ISO code to be formatted,
|
| // format result using CURRENCYSTYLE,
|
| + // format result using CURRENCY_STANDARD,
|
| + // format result using CURRENCY_ACCOUNTING,
|
| // format result using ISOCURRENCYSTYLE,
|
| // format result using PLURALCURRENCYSTYLE,
|
|
|
| - {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"},
|
| - {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
|
| - {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"},
|
| - {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"},
|
| - {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"},
|
| - // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"},
|
| - // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"},
|
| - {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
|
| - {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"},
|
| - {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| - {"ru_RU", "2", "RUB", "2,00\\u00A0\\u0440\\u0443\\u0431.", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| - {"ru_RU", "5", "RUB", "5,00\\u00A0\\u0440\\u0443\\u0431.", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| + // locale amount ISOcode CURRENCYSTYLE CURRENCY_STANDARD CURRENCY_ACCOUNTING ISOCURRENCYSTYLE PLURALCURRENCYSTYLE
|
| + {"en_US", "1", "USD", "$1.00", "$1.00", "$1.00", "USD1.00", "1.00 US dollars"},
|
| + {"en_US", "1234.56", "USD", "$1,234.56", "$1,234.56", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
|
| + {"en_US@cf=account", "1234.56", "USD", "$1,234.56", "$1,234.56", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
|
| + {"en_US", "-1234.56", "USD", "-$1,234.56", "-$1,234.56", "($1,234.56)", "-USD1,234.56", "-1,234.56 US dollars"},
|
| + {"en_US@cf=account", "-1234.56", "USD", "($1,234.56)", "-$1,234.56", "($1,234.56)", "-USD1,234.56", "-1,234.56 US dollars"},
|
| + {"en_US@cf=standard", "-1234.56", "USD", "-$1,234.56", "-$1,234.56", "($1,234.56)", "-USD1,234.56", "-1,234.56 US dollars"},
|
| + {"zh_CN", "1", "USD", "US$1.00", "US$1.00", "US$1.00", "USD1.00", "1.00\\u7F8E\\u5143"},
|
| + {"zh_CN", "-1", "USD", "-US$1.00", "-US$1.00", "(US$1.00)", "-USD1.00", "-1.00\\u7F8E\\u5143"},
|
| + {"zh_CN@cf=account", "-1", "USD", "(US$1.00)", "-US$1.00", "(US$1.00)", "-USD1.00", "-1.00\\u7F8E\\u5143"},
|
| + {"zh_CN@cf=standard", "-1", "USD", "-US$1.00", "-US$1.00", "(US$1.00)", "-USD1.00", "-1.00\\u7F8E\\u5143"},
|
| + {"zh_CN", "1234.56", "USD", "US$1,234.56", "US$1,234.56", "US$1,234.56", "USD1,234.56", "1,234.56\\u7F8E\\u5143"},
|
| + // {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "CHY1.00", "CHY1.00", "1.00 CHY"}, // wrong ISO code
|
| + // {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"}, // wrong ISO code
|
| + {"zh_CN", "1", "CNY", "\\uFFE51.00", "\\uFFE51.00", "\\uFFE51.00", "CNY1.00", "1.00\\u4EBA\\u6C11\\u5E01"},
|
| + {"zh_CN", "1234.56", "CNY", "\\uFFE51,234.56", "\\uFFE51,234.56", "\\uFFE51,234.56", "CNY1,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"},
|
| + {"ru_RU", "1", "RUB", "1,00\\u00A0\\u20BD", "1,00\\u00A0\\u20BD", "1,00\\u00A0\\u20BD", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E "
|
| + "\\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| + {"ru_RU", "2", "RUB", "2,00\\u00A0\\u20BD", "2,00\\u00A0\\u20BD", "2,00\\u00A0\\u20BD", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E "
|
| + "\\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| + {"ru_RU", "5", "RUB", "5,00\\u00A0\\u20BD", "5,00\\u00A0\\u20BD", "5,00\\u00A0\\u20BD", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E "
|
| + "\\u0440\\u0443\\u0431\\u043B\\u044F"},
|
| // test locale without currency information
|
| - {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
|
| + {"root", "-1.23", "USD", "-US$\\u00A01.23", "-US$\\u00A01.23", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
|
| + {"root@cf=account", "-1.23", "USD", "-US$\\u00A01.23", "-US$\\u00A01.23", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
|
| // test choice format
|
| - {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"},
|
| + {"es_AR", "1", "INR", "INR\\u00A01,00", "INR\\u00A01,00", "INR\\u00A01,00", "INR\\u00A01,00", "1,00 rupia india"},
|
| };
|
| static const UNumberFormatStyle currencyStyles[] = {
|
| UNUM_CURRENCY,
|
| + UNUM_CURRENCY_STANDARD,
|
| + UNUM_CURRENCY_ACCOUNTING,
|
| UNUM_CURRENCY_ISO,
|
| UNUM_CURRENCY_PLURAL
|
| };
|
| @@ -2621,7 +2638,7 @@ static UChar currFmtResultExpected[] = /* "$100.00" */
|
|
|
| static UChar emptyString[] = {0};
|
|
|
| -enum { kUBufSize = 64 };
|
| +enum { kUBufSize = 64, kBBufSize = 128 };
|
|
|
| static void TestCurrFmtNegSameAsPositive(void) {
|
| UErrorCode status = U_ZERO_ERROR;
|
| @@ -2656,4 +2673,191 @@ static void TestCurrFmtNegSameAsPositive(void) {
|
| }
|
| }
|
|
|
| +
|
| +typedef struct {
|
| + double value;
|
| + const char *expected;
|
| +} ValueAndExpectedString;
|
| +
|
| +static const ValueAndExpectedString enShort[] = {
|
| + {0.0, "0"},
|
| + {0.17, "0.17"},
|
| + {1.0, "1"},
|
| + {1234.0, "1.23K"},
|
| + {12345.0, "12.3K"},
|
| + {123456.0, "123K"},
|
| + {1234567.0, "1.23M"},
|
| + {12345678.0, "12.3M"},
|
| + {123456789.0, "123M"},
|
| + {1.23456789E9, "1.23B"},
|
| + {1.23456789E10, "12.3B"},
|
| + {1.23456789E11, "123B"},
|
| + {1.23456789E12, "1.23T"},
|
| + {1.23456789E13, "12.3T"},
|
| + {1.23456789E14, "123T"},
|
| + {1.23456789E15, "1230T"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +static const ValueAndExpectedString enShortMax2[] = {
|
| + {0.0, "0"},
|
| + {0.17, "0.17"},
|
| + {1.0, "1"},
|
| + {1234.0, "1.2K"},
|
| + {12345.0, "12K"},
|
| + {123456.0, "120K"},
|
| + {1234567.0, "1.2M"},
|
| + {12345678.0, "12M"},
|
| + {123456789.0, "120M"},
|
| + {1.23456789E9, "1.2B"},
|
| + {1.23456789E10, "12B"},
|
| + {1.23456789E11, "120B"},
|
| + {1.23456789E12, "1.2T"},
|
| + {1.23456789E13, "12T"},
|
| + {1.23456789E14, "120T"},
|
| + {1.23456789E15, "1200T"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +static const ValueAndExpectedString enShortMax5[] = {
|
| + {0.0, "0"},
|
| + {0.17, "0.17"},
|
| + {1.0, "1"},
|
| + {1234.0, "1.234K"},
|
| + {12345.0, "12.345K"},
|
| + {123456.0, "123.46K"},
|
| + {1234567.0, "1.2346M"},
|
| + {12345678.0, "12.346M"},
|
| + {123456789.0, "123.46M"},
|
| + {1.23456789E9, "1.2346B"},
|
| + {1.23456789E10, "12.346B"},
|
| + {1.23456789E11, "123.46B"},
|
| + {1.23456789E12, "1.2346T"},
|
| + {1.23456789E13, "12.346T"},
|
| + {1.23456789E14, "123.46T"},
|
| + {1.23456789E15, "1234.6T"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +static const ValueAndExpectedString enShortMin3[] = {
|
| + {0.0, "0.00"},
|
| + {0.17, "0.170"},
|
| + {1.0, "1.00"},
|
| + {1234.0, "1.23K"},
|
| + {12345.0, "12.3K"},
|
| + {123456.0, "123K"},
|
| + {1234567.0, "1.23M"},
|
| + {12345678.0, "12.3M"},
|
| + {123456789.0, "123M"},
|
| + {1.23456789E9, "1.23B"},
|
| + {1.23456789E10, "12.3B"},
|
| + {1.23456789E11, "123B"},
|
| + {1.23456789E12, "1.23T"},
|
| + {1.23456789E13, "12.3T"},
|
| + {1.23456789E14, "123T"},
|
| + {1.23456789E15, "1230T"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +static const ValueAndExpectedString jaShortMax2[] = {
|
| + {1234.0, "1200"},
|
| + {12345.0, "1.2\\u4E07"},
|
| + {123456.0, "12\\u4E07"},
|
| + {1234567.0, "120\\u4E07"},
|
| + {12345678.0, "1200\\u4E07"},
|
| + {123456789.0, "1.2\\u5104"},
|
| + {1.23456789E9, "12\\u5104"},
|
| + {1.23456789E10, "120\\u5104"},
|
| + {1.23456789E11, "1200\\u5104"},
|
| + {1.23456789E12, "1.2\\u5146"},
|
| + {1.23456789E13, "12\\u5146"},
|
| + {1.23456789E14, "120\\u5146"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +static const ValueAndExpectedString srLongMax2[] = {
|
| + {1234.0, "1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few
|
| + {12345.0, "12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other
|
| + {21789.0, "22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few
|
| + {123456.0, "120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other
|
| + {999999.0, "1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"}, // 10^6 one
|
| + {1234567.0, "1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 few
|
| + {12345678.0, "12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other
|
| + {123456789.0, "120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other
|
| + {1.23456789E9, "1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few
|
| + {1.23456789E10, "12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other
|
| + {2.08901234E10, "21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"}, // 10^9 one
|
| + {2.18901234E10, "22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few
|
| + {1.23456789E11, "120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other
|
| + {-1234.0, "-1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"},
|
| + {-12345.0, "-12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"},
|
| + {-21789.0, "-22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"},
|
| + {-123456.0, "-120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"},
|
| + {-999999.0, "-1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"},
|
| + {-1234567.0, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
|
| + {-12345678.0, "-12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
|
| + {-123456789.0, "-120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
|
| + {-1.23456789E9, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"},
|
| + {-1.23456789E10, "-12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"},
|
| + {-2.08901234E10, "-21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"},
|
| + {-2.18901234E10, "-22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"},
|
| + {-1.23456789E11, "-120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"},
|
| + {0.0, NULL}
|
| +};
|
| +
|
| +typedef struct {
|
| + const char * locale;
|
| + UNumberFormatStyle style;
|
| + int32_t attribute; // UNumberFormatAttribute, or -1 for none
|
| + int32_t attrValue; //
|
| + const ValueAndExpectedString * veItems;
|
| +} LocStyleAttributeTest;
|
| +
|
| +static const LocStyleAttributeTest lsaTests[] = {
|
| + { "en", UNUM_DECIMAL_COMPACT_SHORT, -1, 0, enShort },
|
| + { "en", UNUM_DECIMAL_COMPACT_SHORT, UNUM_MAX_SIGNIFICANT_DIGITS, 2, enShortMax2 },
|
| + { "en", UNUM_DECIMAL_COMPACT_SHORT, UNUM_MAX_SIGNIFICANT_DIGITS, 5, enShortMax5 },
|
| + { "en", UNUM_DECIMAL_COMPACT_SHORT, UNUM_MIN_SIGNIFICANT_DIGITS, 3, enShortMin3 },
|
| + { "ja", UNUM_DECIMAL_COMPACT_SHORT, UNUM_MAX_SIGNIFICANT_DIGITS, 2, jaShortMax2 },
|
| + { "sr", UNUM_DECIMAL_COMPACT_LONG, UNUM_MAX_SIGNIFICANT_DIGITS, 2, srLongMax2 },
|
| + { NULL, (UNumberFormatStyle)0, -1, 0, NULL }
|
| +};
|
| +
|
| +static void TestVariousStylesAndAttributes(void) {
|
| + const LocStyleAttributeTest * lsaTestPtr;
|
| + for (lsaTestPtr = lsaTests; lsaTestPtr->locale != NULL; lsaTestPtr++) {
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + UNumberFormat * unum = unum_open(lsaTestPtr->style, NULL, 0, lsaTestPtr->locale, NULL, &status);
|
| + if ( U_FAILURE(status) ) {
|
| + log_data_err("FAIL: unum_open style %d, locale %s: error %s\n", (int)lsaTestPtr->style, lsaTestPtr->locale, u_errorName(status));
|
| + } else {
|
| + const ValueAndExpectedString * veItemPtr;
|
| + if (lsaTestPtr->attribute >= 0) {
|
| + unum_setAttribute(unum, (UNumberFormatAttribute)lsaTestPtr->attribute, lsaTestPtr->attrValue);
|
| + }
|
| + for (veItemPtr = lsaTestPtr->veItems; veItemPtr->expected != NULL; veItemPtr++) {
|
| + UChar uexp[kUBufSize];
|
| + UChar uget[kUBufSize];
|
| + int32_t uexplen, ugetlen;
|
| +
|
| + status = U_ZERO_ERROR;
|
| + uexplen = u_unescape(veItemPtr->expected, uexp, kUBufSize);
|
| + ugetlen = unum_formatDouble(unum, veItemPtr->value, uget, kUBufSize, NULL, &status);
|
| + if ( U_FAILURE(status) ) {
|
| + log_err("FAIL: unum_formatDouble style %d, locale %s, attr %d, value %.2f: error %s\n",
|
| + (int)lsaTestPtr->style, lsaTestPtr->locale, lsaTestPtr->attribute, veItemPtr->value, u_errorName(status));
|
| + } else if (ugetlen != uexplen || u_strncmp(uget, uexp, uexplen) != 0) {
|
| + char bexp[kBBufSize];
|
| + char bget[kBBufSize];
|
| + u_strToUTF8(bexp, kBBufSize, NULL, uexp, uexplen, &status);
|
| + u_strToUTF8(bget, kBBufSize, NULL, uget, ugetlen, &status);
|
| + log_err("FAIL: unum_formatDouble style %d, locale %s, attr %d, value %.2f: expect \"%s\", get \"%s\"\n",
|
| + (int)lsaTestPtr->style, lsaTestPtr->locale, lsaTestPtr->attribute, veItemPtr->value, bexp, bget);
|
| + }
|
| + }
|
| + unum_close(unum);
|
| + }
|
| + }
|
| +}
|
| +
|
| #endif /* #if !UCONFIG_NO_FORMATTING */
|
|
|