16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File CNMDPTST.C 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Madhu Katragadda Creation 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* C DEPTH TEST FOR NUMBER FORMAT */ 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucurr.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unum.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cnmdptst.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ulist.h" 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CHECK(status,str) if (U_FAILURE(status)) { log_err("FAIL: %s\n", str); return; } 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addNumFrDepTest(TestNode** root); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencyPreEuro(void); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencyObject(void); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addNumFrDepTest(TestNode** root) 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestPatterns, "tsformat/cnmdptst/TestPatterns"); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestQuotes, "tsformat/cnmdptst/TestQuotes"); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestExponential, "tsformat/cnmdptst/TestExponential"); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCurrencySign, "tsformat/cnmdptst/TestCurrencySign"); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCurrency, "tsformat/cnmdptst/TestCurrency"); 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCurrencyPreEuro, "tsformat/cnmdptst/TestCurrencyPreEuro"); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCurrencyObject, "tsformat/cnmdptst/TestCurrencyObject"); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestRounding487, "tsformat/cnmdptst/TestRounding487"); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestDoubleAttribute, "tsformat/cnmdptst/TestDoubleAttribute"); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestSecondaryGrouping, "tsformat/cnmdptst/TestSecondaryGrouping"); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestCurrencyKeywords, "tsformat/cnmdptst/TestCurrencyKeywords"); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestRounding5350, "tsformat/cnmdptst/TestRounding5350"); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org addTest(root, &TestGetKeywordValuesForLocale, "tsformat/cnmdptst/TestGetKeywordValuesForLocale"); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*Test Various format patterns*/ 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestPatterns(void) 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pat_length, i, lneed; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *fmt; 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar upat[5]; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar unewpat[5]; 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar unum[5]; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *unewp=NULL; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* pat[] = { "#.#", "#.", ".#", "#" }; 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* num[] = { "0", "0.", ".0", "0" }; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting different format patterns\n"); 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat_length = sizeof(pat) / sizeof(pat[0]); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i < pat_length; ++i) 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(upat, pat[i]); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt= unum_open(UNUM_IGNORE,upat, u_strlen(upat), "en_US",NULL, &status); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "FAIL: Number format constructor failed for pattern %s -> %s\n", pat[i], u_errorName(status)); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_toPattern(fmt, FALSE, NULL, lneed, &status); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status= U_ZERO_ERROR; 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unewp=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_toPattern(fmt, FALSE, unewp, lneed+1, &status); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Number format extracting the pattern failed for %s\n", pat[i]); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(unewpat, newpat[i]); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(unewp, unewpat) != 0) 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Pattern %s should be transmute to %s; %s seen instead\n", pat[i], newpat[i], austrdup(unewp) ); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_format(fmt, 0, NULL, lneed, NULL, &status); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(fmt, 0, str, lneed+1, NULL, &status); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(unum, num[i]); 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, unum) != 0) 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Pattern %s should format zero as %s; %s Seen instead\n", pat[i], num[i], austrdup(str) ); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(unewp); 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(fmt); 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Test the handling of quotes*/ 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestQuotes(void) 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pat[15]; 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar res[15]; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL; 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *fmt; 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char tempBuf[256]; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTestting the handling of quotes in number format\n"); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pat, "a'fo''o'b#"); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error in number format costruction using pattern \"a'fo''o'b#\" -> %s\n", u_errorName(status)); 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status); 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(fmt, 123, str, lneed+1, NULL, &status); 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status) || !str) { 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pattern \"%s\" \n", u_austrcpy(tempBuf, pat) ); 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Format 123 -> %s\n", u_austrcpy(tempBuf, str) ); 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, "afo'ob123"); 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(str, res) != 0) 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected afo'ob123"); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(fmt); 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pat, ""); 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pat, "a''b#"); 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status); 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in number format costruction using pattern \"a''b#\"\n"); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(fmt, 123, str, lneed+1, NULL, &status); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pattern \"%s\" \n", u_austrcpy(tempBuf, pat) ); 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Format 123 -> %s\n", u_austrcpy(tempBuf, str) ); 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, ""); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, "a'b123"); 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(str, res) != 0) 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected a'b123\n"); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(fmt); 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Test exponential pattern*/ 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestExponential(void) 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pat_length, val_length, lval_length; 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ival, ilval, p, v, lneed; 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *fmt; 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t ppos; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *upat; 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar pattern[20]; 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL; 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar uvalfor[20], ulvalfor[20]; 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char tempMsgBug[256]; 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double a; 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_OS390 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const double val[] = { 0.01234, 123456789, 1.23e75, -3.141592653e-78 }; 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t lval[] = { 0, -1, 1, 123456789 }; 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char* valFormat[] = 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char* lvalFormat[] = 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0E0", "-1E0", "1E0", "1.2346E8", 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0E000", "-1E000", "1E000", "123.4568E006", 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0E0", "[1E0]", "1E0", "1.235E8" 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const double valParse[] = 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_OS390 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123460000, 1.23E75, -3.1416E-78, 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123460000, 1.23E75, -3.1416E-78, 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123456800, 1.23E75, -3.141593E-78, 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123500000, 1.23E75, -3.142E-78 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* We define the whole IEEE 754 number in the 4th column because 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Visual Age 7 has a bug in rounding numbers. */ 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123456800, 1.23E300, -3.1415929999999999E-271, 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0.01234, 123500000, 1.23E300, -3.1420000000000001E-271 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t lvalParse[] = 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, -1, 1, 123460000, 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, -1, 1, 123460000, 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, -1, 1, 123456800, 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, -1, 1, 123500000 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat_length = sizeof(pat) / sizeof(pat[0]); 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org val_length = sizeof(val) / sizeof(val[0]); 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lval_length = sizeof(lval) / sizeof(lval[0]); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ival = 0; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ilval = 0; 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (p=0; p < pat_length; ++p) 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org upat=(UChar*)malloc(sizeof(UChar) * (strlen(pat[p])+1) ); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(upat, pat[p]); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt=unum_open(UNUM_IGNORE,upat, u_strlen(upat), "en_US",NULL, &status); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "FAIL: Bad status returned by Number format construction with pattern %s -> %s\n", pat[p], u_errorName(status)); 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed= u_strlen(upat) + 1; 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_toPattern(fmt, FALSE, pattern, lneed, &status); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pattern \" %s \" -toPattern-> \" %s \" \n", upat, u_austrcpy(tempMsgBug, pattern) ); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (v=0; v<val_length; ++v) 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format*/ 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(fmt, val[v], NULL, lneed, NULL, &status); 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(fmt, val[v], str, lneed+1, NULL, &status); 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(uvalfor, valFormat[v+ival]); 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(str, uvalfor) != 0) 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("FAIL: Expected %s ( %s )\n", valFormat[v+ival], u_austrcpy(tempMsgBug, uvalfor) ); 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*parsing*/ 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ppos=0; 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org a=unum_parseDouble(fmt, str, u_strlen(str), &ppos, &status); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ppos== u_strlen(str)) { 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (a != valParse[v+ival]) 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected: %e, Got: %g\n", valParse[v+ival], a); 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err(" FAIL: Partial parse ( %d chars ) -> %e\n", ppos, a); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (v=0; v<lval_length; ++v) 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format*/ 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(fmt, lval[v], NULL, lneed, NULL, &status); 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(fmt, lval[v], str, lneed+1, NULL, &status); 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*printf(" Format %e -> %s\n", lval[v], austrdup(str) );*/ 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(ulvalfor, lvalFormat[v+ilval]); 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(str, ulvalfor) != 0) 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected %s ( %s )\n", valFormat[v+ilval], austrdup(ulvalfor) ); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*parsing*/ 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ppos=0; 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org a=unum_parseDouble(fmt, str, u_strlen(str), &ppos, &status); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ppos== u_strlen(str)) { 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*printf(" Parse -> %e\n", a);*/ 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (a != lvalParse[v+ilval]) 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected : %e\n", valParse[v+ival]); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err(" FAIL: Partial parse ( %d chars ) -> %e\n", ppos, a); 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ival += val_length; 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ilval += lval_length; 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(fmt); 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(upat); 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the handling of the currency symbol in patterns. 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencySign(void) 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed; 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *fmt; 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *pattern=NULL; 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL; 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *pat=NULL; 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *res=NULL; 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char tempBuf[256]; 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern=(UChar*)malloc(sizeof(UChar) * (strlen("*#,##0.00;-*#,##0.00") + 1) ); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pattern, "*#,##0.00;-*#,##0.00"); 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern[0]=pattern[11]=0xa4; /* insert latin-1 currency symbol */ 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = unum_open(UNUM_IGNORE,pattern, u_strlen(pattern), "en_US",NULL, &status); 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error in number format construction with pattern \"\\xA4#,##0.00;-\\xA4#,##0.00\\\" -> %s\n", u_errorName(status)); 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(fmt, 1234.56, NULL, lneed, NULL, &status); 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(fmt, 1234.56, str, lneed+1, NULL, &status); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_toPattern(fmt, FALSE, NULL, lneed, &status); 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(fmt, FALSE, pat, lneed+1, NULL, &status); 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pattern \" %s \" \n", u_austrcpy(tempBuf, pat)); 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Format 1234.56 -> %s\n", u_austrcpy(tempBuf, str) ); 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SUCCESS(status) && str) { 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen("$1,234.56")+1) ); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, "$1,234.56"); 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, res) !=0) log_data_err("FAIL: Expected $1,234.56\n"); 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error formatting -> %s\n", u_errorName(status)); 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(pat); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(fmt, -1234.56, NULL, lneed, NULL, &status); 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(fmt, -1234.56, str, lneed+1, NULL, &status); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(str) { 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen("-$1,234.56")+1) ); 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, "-$1,234.56"); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, res) != 0) log_data_err("FAIL: Expected -$1,234.56\n"); 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(fmt); 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(pattern); 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test localized currency patterns. 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrency(void) 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *currencyFmt; 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str; 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed, i; 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar res[100]; 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* locale[]={"fr_CA", "de_DE_PREEURO", "fr_FR_PREEURO"}; 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* result[]={"1,50\\u00a0$", "1,50\\u00a0DEM", "1,50\\u00a0F"}; 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the number format with different currency patterns\n"); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i < 3; i++) 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=NULL; 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,locale[i],NULL, &status); 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status)); 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field = 0; 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(result[i], res, (int32_t)strlen(result[i])+1); 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, res) != 0){ 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i], aescstrdup(str, -1), locale[i]); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(currencyFmt); 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test localized currency patterns for PREEURO variants. 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencyPreEuro(void) 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *currencyFmt; 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL, *res=NULL; 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed, i; 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* locale[]={ 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ca_ES_PREEURO", "de_LU_PREEURO", "en_IE_PREEURO", "fi_FI_PREEURO", "fr_LU_PREEURO", "it_IT_PREEURO", 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "pt_PT_PREEURO", "de_AT_PREEURO", "el_GR_PREEURO", "es_ES_PREEURO", "fr_BE_PREEURO", "ga_IE_PREEURO", 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "nl_BE_PREEURO", "de_DE_PREEURO", "en_BE_PREEURO", "eu_ES_PREEURO", "fr_FR_PREEURO", "gl_ES_PREEURO", 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "nl_NL_PREEURO", 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* result[]={ 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\\u20A7\\u00A02", "2\\u00A0F", "IEP1.50", "1,50\\u00A0FIM", "2\\u00A0F", "ITL\\u00A02", 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1$50\\u00A0Esc.", "\\u00F6S\\u00A01,50", "1,50\\u00A0\\u0394\\u03C1\\u03C7", "2\\u00A0\\u20A7", "1,50\\u00A0FB", "IEP1.50", 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1,50\\u00A0BEF", "1,50\\u00A0DEM", "1,50\\u00A0BEF", "\\u20A7\\u00A02", "1,50\\u00A0F", "2\\u00A0\\u20A7", 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "NLG\\u00A01,50" 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the number format with different currency patterns\n"); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i < 19; i++) 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char curID[256] = {0}; 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uloc_canonicalize(locale[i], curID, 256, &status); 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Could not canonicalize %s. Error: %s (Are you missing data?)\n", locale[i], u_errorName(status)); 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,curID,NULL, &status); 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status)); 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field = 0; 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(result[i],res,(int32_t)(strlen(result[i])+1)); 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, res) != 0){ 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(currencyFmt); 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test currency "object" (we use this name to match the other C++ 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * test name and the Jave name). Actually, test ISO currency code 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * support in the C API. 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencyObject(void) 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *currencyFmt; 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *str=NULL, *res=NULL; 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed, i; 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* locale[]={ 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "fr_FR", 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "fr_FR", 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* currency[]={ 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "", 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "JPY", 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* result[]={ 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1\\u00A0234,56\\u00A0\\u20AC", 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "1\\u00A0235\\u00A0\\u00A5JP", 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the number format with different currency codes\n"); 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0; i < 2; i++) 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char cStr[20]={0}; 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar isoCode[16]={0}; 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,locale[i],NULL, &status); 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status)); 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*currency[i]) { 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(isoCode, currency[i]); 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isoCode, u_strlen(isoCode), &status); 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: can't set currency code %s\n", myErrorName(status) ); 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_getTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isoCode, sizeof(isoCode), &status); 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: can't get currency code %s\n", myErrorName(status) ); 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_UCharsToChars(isoCode,cStr,u_strlen(isoCode)); 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("ISO code %s\n", cStr); 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*currency[i] && uprv_strcmp(cStr, currency[i])) { 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: currency should be %s, but is %s\n", currency[i], cStr); 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed= unum_formatDouble(currencyFmt, 1234.56, NULL, lneed, NULL, &status); 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field = 0; 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(currencyFmt, 1234.56, str, lneed+1, &pos, &status); 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape(result[i],res, (int32_t)(strlen(result[i])+1)); 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(str, res) != 0){ 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(currencyFmt); 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(str); 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test proper rounding by the format method. 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRounding487(void) 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *nnf; 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* this is supposed to open default date format, but later on it treats it like it is "en_US" 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* nnf = unum_open(UNUM_DEFAULT, NULL, &status); */ 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nnf = unum_open(UNUM_DEFAULT, NULL,0,"en_US",NULL, &status); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: failure in the construction of number format: %s (Are you missing data?)\n", myErrorName(status)); 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest(nnf, 0.00159999, 4, "0.0016"); 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest(nnf, 0.00995, 4, "0.01"); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest(nnf, 12.3995, 3, "12.4"); 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest(nnf, 12.4999, 0, "12"); 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest(nnf, - 19.5, 0, "-20"); 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(nnf); 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*-------------------------------------*/ 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void roundingTest(UNumberFormat* nf, double x, int32_t maxFractionDigits, const char* expected) 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *out = NULL; 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *res; 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status; 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed; 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setAttribute(nf, UNUM_MAX_FRACTION_DIGITS, maxFractionDigits); 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(nf, x, NULL, lneed, NULL, &status); 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field=0; 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(nf, x, out, lneed+1, &pos, &status); 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Need to use log_verbose here. Problem with the float*/ 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*printf("%f format with %d fraction digits to %s\n", x, maxFractionDigits, austrdup(out) );*/ 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1) ); 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, expected); 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(out, res) != 0) 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected: %s or %s\n", expected, austrdup(res) ); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(out != NULL) { 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(out); 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Testing unum_getDoubleAttribute and unum_setDoubleAttribute() 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestDoubleAttribute(void) 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double mydata[] = { 1.11, 22.22, 333.33, 4444.44, 55555.55, 666666.66, 7777777.77, 88888888.88, 999999999.99}; 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double dvalue; 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormatAttribute attr; 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormatStyle style= UNUM_DEFAULT; 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *def; 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting get and set DoubleAttributes\n"); 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org def=unum_open(style, NULL,0,NULL,NULL, &status); 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Fail: error creating a default number formatter -> %s (Are you missing data?)\n", u_errorName(status)); 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org attr=UNUM_ROUNDING_INCREMENT; 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dvalue=unum_getDoubleAttribute(def, attr); 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i<9 ; i++) 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dvalue = mydata[i]; 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setDoubleAttribute(def, attr, dvalue); 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(unum_getDoubleAttribute(def,attr)!=mydata[i]) 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: error in setting and getting double attributes for UNUM_ROUNDING_INCREMENT\n"); 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pass: setting and getting double attributes for UNUM_ROUNDING_INCREMENT works fine\n"); 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(def); 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the functioning of the secondary grouping value. 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSecondaryGrouping(void) { 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *f = NULL, *g= NULL; 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *us = unum_open(UNUM_DECIMAL,NULL,0, "en_US", NULL,&status); 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar resultBuffer[512]; 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t l = 1876543210L; 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool ok = TRUE; 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buffer[512]; 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool expectGroup = FALSE, isGroup = FALSE; 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "#,##,###"); 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org f = unum_open(UNUM_IGNORE,buffer, -1, "en_US",NULL, &status); 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Error DecimalFormat ct -> %s (Are you missing data?)\n", u_errorName(status)); 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field = 0; 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(f, (int32_t)123456789L, resultBuffer, 512 , &pos, &status); 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "12,34,56,789"); 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: Formatting \"#,##,###\" pattern with 123456789 got %s, expected %s\n", resultBuffer, "12,34,56,789"); 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.beginIndex != 0 && pos.endIndex != 12) { 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: Formatting \"#,##,###\" pattern pos = (%d, %d) expected pos = (0, 12)\n", pos.beginIndex, pos.endIndex); 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(resultBuffer,0, sizeof(UChar)*512); 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_toPattern(f, FALSE, resultBuffer, 512, &status); 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "#,##,###"); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: toPattern() got %s, expected %s\n", resultBuffer, "#,##,###"); 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(resultBuffer,0, sizeof(UChar)*512); 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "#,###"); 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_applyPattern(f, FALSE, buffer, -1,NULL,NULL); 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: applyPattern call failed\n"); 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setAttribute(f, UNUM_SECONDARY_GROUPING_SIZE, 4); 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(f, (int32_t)123456789L, resultBuffer, 512 , &pos, &status); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "12,3456,789"); 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: Formatting \"#,###\" pattern with 123456789 got %s, expected %s\n", resultBuffer, "12,3456,789"); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(resultBuffer,0, sizeof(UChar)*512); 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_toPattern(f, FALSE, resultBuffer, 512, &status); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buffer, "#,####,###"); 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: toPattern() got %s, expected %s\n", resultBuffer, "#,####,###"); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(resultBuffer,0, sizeof(UChar)*512); 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org g = unum_open(UNUM_DECIMAL, NULL,0,"hi_IN",NULL, &status); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Fail: Cannot create UNumberFormat for \"hi_IN\" locale.\n"); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_format(g, l, resultBuffer, 512, &pos, &status); 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(g); 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* expect "1,87,65,43,210", but with Hindi digits */ 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 01234567890123 */ 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strlen(resultBuffer) != 14) { 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok = FALSE; 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<u_strlen(resultBuffer); ++i) { 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectGroup = FALSE; 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (i) { 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 4: 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 7: 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 10: 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expectGroup = TRUE; 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Later -- fix this to get the actual grouping */ 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* character from the resource bundle. */ 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isGroup = (UBool)(resultBuffer[i] == 0x002C); 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (isGroup != expectGroup) { 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ok = FALSE; 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!ok) { 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL Expected %s x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got %s\n", "1876543210L", resultBuffer); 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(f); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(us); 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCurrencyKeywords(void) 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const char * const currencies[] = { 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ADD", "ADP", "AED", "AFA", "AFN", "AIF", "ALK", "ALL", "ALV", "ALX", "AMD", 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ANG", "AOA", "AOK", "AON", "AOR", "AOS", "ARA", "ARM", "ARP", "ARS", "ATS", 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "AUD", "AUP", "AWG", "AZM", "BAD", "BAM", "BAN", "BBD", "BDT", "BEC", "BEF", 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BEL", "BGL", "BGM", "BGN", "BGO", "BGX", "BHD", "BIF", "BMD", "BMP", "BND", 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BOB", "BOL", "BOP", "BOV", "BRB", "BRC", "BRE", "BRL", "BRN", "BRR", "BRZ", 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BSD", "BSP", "BTN", "BTR", "BUK", "BUR", "BWP", "BYB", "BYL", "BYR", "BZD", 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "BZH", "CAD", "CDF", "CDG", "CDL", "CFF", "CHF", "CKD", "CLC", "CLE", "CLF", 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "CLP", "CMF", "CNP", "CNX", "CNY", "COB", "COF", "COP", "CRC", "CSC", "CSK", 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "CUP", "CUX", "CVE", "CWG", "CYP", "CZK", "DDM", "DEM", "DES", "DJF", "DKK", 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "DOP", "DZD", "DZF", "DZG", "ECS", "ECV", "EEK", "EGP", "ERN", "ESP", "ETB", 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ETD", "EUR", "FIM", "FIN", "FJD", "FJP", "FKP", "FOK", "FRF", "FRG", "GAF", 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "GBP", "GEK", "GEL", "GHC", "GHO", "GHP", "GHR", "GIP", "GLK", "GMD", "GMP", 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "GNF", "GNI", "GNS", "GPF", "GQE", "GQF", "GQP", "GRD", "GRN", "GTQ", "GUF", 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "GWE", "GWM", "GWP", "GYD", "HKD", "HNL", "HRD", "HRK", "HTG", "HUF", "IBP", 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "IDG", "IDJ", "IDN", "IDR", "IEP", "ILL", "ILP", "ILS", "IMP", "INR", "IQD", 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "IRR", "ISK", "ITL", "JEP", "JMD", "JMP", "JOD", "JPY", "KES", "KGS", "KHO", 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "KHR", "KID", "KMF", "KPP", "KPW", "KRH", "KRO", "KRW", "KWD", "KYD", "KZR", 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "KZT", "LAK", "LBP", "LIF", "LKR", "LNR", "LRD", "LSL", "LTL", "LTT", "LUF", 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "LVL", "LVR", "LYB", "LYD", "LYP", "MAD", "MAF", "MCF", "MCG", "MDC", "MDL", 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "MDR", "MGA", "MGF", "MHD", "MKD", "MKN", "MLF", "MMK", "MMX", "MNT", "MOP", 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "MQF", "MRO", "MTL", "MTP", "MUR", "MVP", "MVR", "MWK", "MWP", "MXN", "MXP", 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "MXV", "MYR", "MZE", "MZM", "NAD", "NCF", "NGN", "NGP", "NHF", "NIC", "NIG", 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "NIO", "NLG", "NOK", "NPR", "NZD", "NZP", "OMR", "OMS", "PAB", "PDK", "PDN", 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "PDR", "PEI", "PEN", "PES", "PGK", "PHP", "PKR", "PLN", "PLX", "PLZ", "PSP", 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "PTC", "PTE", "PYG", "QAR", "REF", "ROL", "RON", "RUB", "RUR", "RWF", "SAR", 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "SAS", "SBD", "SCR", "SDD", "SDP", "SEK", "SGD", "SHP", "SIB", "SIT", "SKK", 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "SLL", "SML", "SOS", "SQS", "SRG", "SSP", "STD", "STE", "SUN", "SUR", "SVC", 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "SYP", "SZL", "TCC", "TDF", "THB", "TJR", "TJS", "TMM", "TND", "TOP", "TOS", 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "TPE", "TPP", "TRL", "TTD", "TTO", "TVD", "TWD", "TZS", "UAH", "UAK", "UGS", 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "UGX", "USD", "USN", "USS", "UYF", "UYP", "UYU", "UZC", "UZS", "VAL", "VDD", 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "VDN", "VDP", "VEB", "VGD", "VND", "VNN", "VNR", "VNS", "VUV", "WSP", "WST", 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "XAD", "XAF", "XAM", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XCF", "XDR", 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "XEF", "XEU", "XFO", "XFU", "XID", "XMF", "XNF", "XOF", "XPF", "XPS", "XSS", 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "XTR", "YDD", "YEI", "YER", "YUD", "YUF", "YUG", "YUM", "YUN", "YUO", "YUR", 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "ZAL", "ZAP", "ZAR", "ZMK", "ZMP", "ZRN", "ZRZ", "ZWD" 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = 0, j = 0; 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t noLocales = uloc_countAvailable(); 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char locale[256]; 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char currLoc[256]; 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar result[4]; 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar currBuffer[256]; 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i = 0; i < noLocales; i++) { 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(currLoc, uloc_getAvailable(i)); 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(j = 0; j < sizeof(currencies)/sizeof(currencies[0]); j++) { 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcpy(locale, currLoc); 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(locale, "@currency="); 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strcat(locale, currencies[j]); 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucurr_forLocale(locale, result, 4, &status); 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_charsToUChars(currencies[j], currBuffer, 3); 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currBuffer[3] = 0; 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(currBuffer, result) != 0) { 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Didn't get the right currency for %s\n", locale); 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetKeywordValuesForLocale(void) { 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PREFERRED_SIZE 12 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MAX_NUMBER_OF_KEYWORDS 4 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *PREFERRED[PREFERRED_SIZE][MAX_NUMBER_OF_KEYWORDS] = { 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "root", "USD", "USN", "USS" }, 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "und", "USD", "USN", "USS" }, 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* { "und_ZZ", "USD", NULL, NULL }, -- temporaary remove as this locale now has 15 entries */ 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "en_US", "USD", "USN", "USS" }, 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "en_029", "USD", "USN", "USS" }, 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "en_TH", "THB", NULL, NULL }, 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "de", "EUR", NULL, NULL }, 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "de_DE", "EUR", NULL, NULL }, 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "ar", "EGP", NULL, NULL }, 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "ar_PS", "ILS", "JOD", NULL }, 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "en@currency=CAD", "USD", "USN", "USS" }, 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr@currency=zzz", "EUR", NULL, NULL }, 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "de_DE@currency=DEM", "EUR", NULL, NULL }, 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const int32_t EXPECTED_SIZE[PREFERRED_SIZE] = { 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3, 3, 3, 3, 1, 1, 1, 1, 2, 3, 1, 1 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i, j, size; 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UEnumeration *pref, *all; 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *loc = NULL; 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool matchPref, matchAll; 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *value = NULL; 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t valueLength = 0; 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UList *ALLList = NULL; 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UEnumeration *ALL = ucurr_getKeywordValuesForLocale("currency", uloc_getDefault(), FALSE, &status); 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ALL == NULL) { 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err_status(status, "ERROR getting keyword value for default locale. -> %s\n", u_errorName(status)); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i = 0; i < PREFERRED_SIZE; i++) { 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pref = NULL; 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org all = NULL; 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org loc = PREFERRED[i][0]; 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pref = ucurr_getKeywordValuesForLocale("currency", loc, TRUE, &status); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchPref = FALSE; 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchAll = FALSE; 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org size = uenum_count(pref, &status); 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (size == EXPECTED_SIZE[i]) { 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchPref = TRUE; 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (j = 0; j < size; j++) { 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((value = uenum_next(pref, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (uprv_strcmp(value, PREFERRED[i][j+1]) != 0) { 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: locale %s got keywords #%d %s expected %s\n", loc, j, value, PREFERRED[i][j+1]); 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchPref = FALSE; 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchPref = FALSE; 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR getting keyword value for locale \"%s\"\n", loc); 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: size of locale \"%s\" %d does not match expected size %d\n", loc, size, EXPECTED_SIZE[i]); 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!matchPref) { 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Preferred values for locale \"%s\" does not match expected.\n", loc); 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uenum_close(pref); 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org all = ucurr_getKeywordValuesForLocale("currency", loc, FALSE, &status); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org size = uenum_count(all, &status); 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status) && size == uenum_count(ALL, &status)) { 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchAll = TRUE; 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ALLList = ulist_getListFromEnum(ALL); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (j = 0; j < size; j++) { 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ((value = uenum_next(all, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!ulist_containsString(ALLList, value, uprv_strlen(value))) { 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Locale %s have %s not in ALL\n", loc, value); 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchAll = FALSE; 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org matchAll = FALSE; 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR getting \"all\" keyword value for locale \"%s\"\n", loc); 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!matchAll) { 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: All values for locale \"%s\" does not match expected.\n", loc); 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: %s\n", u_errorName(status)); 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if(size!=uenum_count(ALL, &status)) { 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: got size of %d, wanted %d\n", size, uenum_count(ALL, &status)); 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uenum_close(all); 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uenum_close(ALL); 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test proper handling of rounding modes. 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRounding5350(void) 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNumberFormat *nnf; 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* this is supposed to open default date format, but later on it treats it like it is "en_US" 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* nnf = unum_open(UNUM_DEFAULT, NULL, &status); */ 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org nnf = unum_open(UNUM_DEFAULT, NULL,0,"en_US",NULL, &status); 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: failure in the construction of number format: %s (Are you missing data?)\n", myErrorName(status)); 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setAttribute(nnf, UNUM_MAX_FRACTION_DIGITS, 2); 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -0.125, UNUM_ROUND_CEILING, "-0.12"); 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -0.125, UNUM_ROUND_FLOOR, "-0.13"); 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -0.125, UNUM_ROUND_DOWN, "-0.12"); 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -0.125, UNUM_ROUND_UP, "-0.13"); 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 0.125, UNUM_FOUND_HALFEVEN, "0.12"); 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 0.135, UNUM_ROUND_HALFDOWN, "0.13"); 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 0.125, UNUM_ROUND_HALFUP, "0.13"); 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 0.135, UNUM_FOUND_HALFEVEN, "0.14"); 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* The following are exactly represented, and shouldn't round */ 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.00, UNUM_ROUND_UP, "1"); 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 24.25, UNUM_ROUND_UP, "24.25"); 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 24.25, UNUM_ROUND_CEILING, "24.25"); 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -24.25, UNUM_ROUND_UP, "-24.25"); 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Differences pretty far out there */ 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_CEILING, "1.01"); 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_FLOOR, "1"); 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_DOWN, "1"); 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_UP, "1.01"); 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_FOUND_HALFEVEN, "1"); 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFDOWN, "1"); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFUP, "1"); 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_CEILING, "-1"); 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_FLOOR, "-1.01"); 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_DOWN, "-1"); 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_UP, "-1.01"); 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_FOUND_HALFEVEN, "-1"); 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFDOWN, "-1"); 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFUP, "-1"); 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_close(nnf); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*-------------------------------------*/ 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void roundingTest2(UNumberFormat* nf, double x, int32_t roundingMode, const char* expected) 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *out = NULL; 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *res; 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition pos; 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status; 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t lneed; 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_setAttribute(nf, UNUM_ROUNDING_MODE, roundingMode); 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=0; 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org lneed=unum_formatDouble(nf, x, NULL, lneed, NULL, &status); 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.field=0; 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(nf, x, out, lneed+1, &pos, &status); 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Need to use log_verbose here. Problem with the float*/ 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*printf("%f format with %d fraction digits to %s\n", x, maxFractionDigits, austrdup(out) );*/ 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org res=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1) ); 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(res, expected); 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_strcmp(out, res) != 0) 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Expected: \"%s\" Got: \"%s\"\n", expected, austrdup(out) ); 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(res); 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(out != NULL) { 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(out); 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1068