1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************************* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CNMDPTST.C 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Madhu Katragadda Creation 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 06/24/99 helena Integrated Alan's NF enhancements and Java2 bug fixes 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* C DEPTH TEST FOR NUMBER FORMAT */ 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cnmdptst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 32b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "ulist.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { log_err("FAIL: %s\n", str); return; } 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addNumFrDepTest(TestNode** root); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencyPreEuro(void); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencyObject(void); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addNumFrDepTest(TestNode** root) 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestPatterns, "tsformat/cnmdptst/TestPatterns"); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestQuotes, "tsformat/cnmdptst/TestQuotes"); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestExponential, "tsformat/cnmdptst/TestExponential"); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCurrencySign, "tsformat/cnmdptst/TestCurrencySign"); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCurrency, "tsformat/cnmdptst/TestCurrency"); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCurrencyPreEuro, "tsformat/cnmdptst/TestCurrencyPreEuro"); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCurrencyObject, "tsformat/cnmdptst/TestCurrencyObject"); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestRounding487, "tsformat/cnmdptst/TestRounding487"); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestDoubleAttribute, "tsformat/cnmdptst/TestDoubleAttribute"); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSecondaryGrouping, "tsformat/cnmdptst/TestSecondaryGrouping"); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCurrencyKeywords, "tsformat/cnmdptst/TestCurrencyKeywords"); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestRounding5350, "tsformat/cnmdptst/TestRounding5350"); 54b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestGetKeywordValuesForLocale, "tsformat/cnmdptst/TestGetKeywordValuesForLocale"); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Test Various format patterns*/ 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestPatterns(void) 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length, i, lneed; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *fmt; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar upat[5]; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar unewpat[5]; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar unum[5]; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *unewp=NULL; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "#.#", "#.", ".#", "#" }; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* num[] = { "0", "0.", ".0", "0" }; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting different format patterns\n"); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat_length = sizeof(pat) / sizeof(pat[0]); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < pat_length; ++i) 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(upat, pat[i]); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt= unum_open(UNUM_IGNORE,upat, u_strlen(upat), "en_US",NULL, &status); 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: Number format constructor failed for pattern %s -> %s\n", pat[i], u_errorName(status)); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_toPattern(fmt, FALSE, NULL, lneed, &status); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status= U_ZERO_ERROR; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unewp=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_toPattern(fmt, FALSE, unewp, lneed+1, &status); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Number format extracting the pattern failed for %s\n", pat[i]); 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(unewpat, newpat[i]); 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(unewp, unewpat) != 0) 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Pattern %s should be transmute to %s; %s seen instead\n", pat[i], newpat[i], austrdup(unewp) ); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_format(fmt, 0, NULL, lneed, NULL, &status); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(fmt, 0, str, lneed+1, NULL, &status); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(unum, num[i]); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(str, unum) != 0) 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Pattern %s should format zero as %s; %s Seen instead\n", pat[i], num[i], austrdup(str) ); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(unewp); 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(fmt); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test the handling of quotes*/ 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestQuotes(void) 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pat[15]; 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar res[15]; 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL; 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *fmt; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempBuf[256]; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTestting the handling of quotes in number format\n"); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pat, "a'fo''o'b#"); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error in number format costruction using pattern \"a'fo''o'b#\" -> %s\n", u_errorName(status)); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(fmt, 123, str, lneed+1, NULL, &status); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || !str) { 1436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern \"%s\" \n", u_austrcpy(tempBuf, pat) ); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Format 123 -> %s\n", u_austrcpy(tempBuf, str) ); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, "afo'ob123"); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(str, res) != 0) 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected afo'ob123"); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(fmt); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pat, ""); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pat, "a''b#"); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in number format costruction using pattern \"a''b#\"\n"); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(fmt, 123, str, lneed+1, NULL, &status); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern \"%s\" \n", u_austrcpy(tempBuf, pat) ); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Format 123 -> %s\n", u_austrcpy(tempBuf, str) ); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, ""); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, "a'b123"); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(str, res) != 0) 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected a'b123\n"); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(fmt); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test exponential pattern*/ 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestExponential(void) 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length, val_length, lval_length; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ival, ilval, p, v, lneed; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *fmt; 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ppos; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *upat; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[20]; 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uvalfor[20], ulvalfor[20]; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempMsgBug[256]; 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double a; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_OS390 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const double val[] = { 0.01234, 123456789, 1.23e75, -3.141592653e-78 }; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const int32_t lval[] = { 0, -1, 1, 123456789 }; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* valFormat[] = 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char* lvalFormat[] = 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "-1E0", "1E0", "1.2346E8", 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E000", "-1E000", "1E000", "123.4568E006", 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "[1E0]", "1E0", "1.235E8" 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const double valParse[] = 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_OS390 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E75, -3.1416E-78, 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E75, -3.1416E-78, 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E75, -3.141593E-78, 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E75, -3.142E-78 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We define the whole IEEE 754 number in the 4th column because 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Visual Age 7 has a bug in rounding numbers. */ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1415999999999999E-271, 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E300, -3.1415929999999999E-271, 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E300, -3.1420000000000001E-271 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const int32_t lvalParse[] = 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123456800, 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123500000 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat_length = sizeof(pat) / sizeof(pat[0]); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru val_length = sizeof(val) / sizeof(val[0]); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lval_length = sizeof(lval) / sizeof(lval[0]); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ival = 0; 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ilval = 0; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (p=0; p < pat_length; ++p) 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru upat=(UChar*)malloc(sizeof(UChar) * (strlen(pat[p])+1) ); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(upat, pat[p]); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt=unum_open(UNUM_IGNORE,upat, u_strlen(upat), "en_US",NULL, &status); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: Bad status returned by Number format construction with pattern %s -> %s\n", pat[p], u_errorName(status)); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed= u_strlen(upat) + 1; 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_toPattern(fmt, FALSE, pattern, lneed, &status); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern \" %s \" -toPattern-> \" %s \" \n", upat, u_austrcpy(tempMsgBug, pattern) ); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<val_length; ++v) 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format*/ 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(fmt, val[v], NULL, lneed, NULL, &status); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(fmt, val[v], str, lneed+1, NULL, &status); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(uvalfor, valFormat[v+ival]); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(str, uvalfor) != 0) 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("FAIL: Expected %s ( %s )\n", valFormat[v+ival], u_austrcpy(tempMsgBug, uvalfor) ); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*parsing*/ 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ppos=0; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a=unum_parseDouble(fmt, str, u_strlen(str), &ppos, &status); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ppos== u_strlen(str)) { 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a != valParse[v+ival]) 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected: %e, Got: %g\n", valParse[v+ival], a); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" FAIL: Partial parse ( %d chars ) -> %e\n", ppos, a); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<lval_length; ++v) 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format*/ 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(fmt, lval[v], NULL, lneed, NULL, &status); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(fmt, lval[v], str, lneed+1, NULL, &status); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*printf(" Format %e -> %s\n", lval[v], austrdup(str) );*/ 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(ulvalfor, lvalFormat[v+ilval]); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(str, ulvalfor) != 0) 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected %s ( %s )\n", valFormat[v+ilval], austrdup(ulvalfor) ); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*parsing*/ 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ppos=0; 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a=unum_parseDouble(fmt, str, u_strlen(str), &ppos, &status); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ppos== u_strlen(str)) { 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*printf(" Parse -> %e\n", a);*/ 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a != lvalParse[v+ilval]) 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected : %e\n", valParse[v+ival]); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err(" FAIL: Partial parse ( %d chars ) -> %e\n", ppos, a); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ival += val_length; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ilval += lval_length; 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(fmt); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(upat); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns. 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencySign(void) 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed; 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *fmt; 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern=NULL; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL; 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pat=NULL; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *res=NULL; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempBuf[256]; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen("*#,##0.00;-*#,##0.00") + 1) ); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "*#,##0.00;-*#,##0.00"); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern[0]=pattern[11]=0xa4; /* insert latin-1 currency symbol */ 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = unum_open(UNUM_IGNORE,pattern, u_strlen(pattern), "en_US",NULL, &status); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error in number format construction with pattern \"\\xA4#,##0.00;-\\xA4#,##0.00\\\" -> %s\n", u_errorName(status)); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(fmt, 1234.56, NULL, lneed, NULL, &status); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(fmt, 1234.56, str, lneed+1, NULL, &status); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 3636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_toPattern(fmt, FALSE, NULL, lneed, &status); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(fmt, FALSE, pat, lneed+1, NULL, &status); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern \" %s \" \n", u_austrcpy(tempBuf, pat)); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Format 1234.56 -> %s\n", u_austrcpy(tempBuf, str) ); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status) && str) { 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen("$1,234.56")+1) ); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, "$1,234.56"); 37727f654740f2a26ad62a5c155af9199af9e69b889claireho if (u_strcmp(str, res) !=0) log_data_err("FAIL: Expected $1,234.56\n"); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error formatting -> %s\n", u_errorName(status)); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pat); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(fmt, -1234.56, NULL, lneed, NULL, &status); 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(fmt, -1234.56, str, lneed+1, NULL, &status); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 3936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Error in formatting using unum_format(.....): %s\n", myErrorName(status) ); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(str) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen("-$1,234.56")+1) ); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, "-$1,234.56"); 39827f654740f2a26ad62a5c155af9199af9e69b889claireho if (u_strcmp(str, res) != 0) log_data_err("FAIL: Expected -$1,234.56\n"); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(fmt); 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns. 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrency(void) 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *currencyFmt; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str; 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed, i; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar res[100]; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* locale[]={"fr_CA", "de_DE_PREEURO", "fr_FR_PREEURO"}; 419f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const char* result[]={"1,50\\u00a0$", "1,50\\u00a0DM", "1,50\\u00a0F"}; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the number format with different currency patterns\n"); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i < 3; i++) 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=NULL; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,locale[i],NULL, &status); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 4276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status)); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field = 0; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru u_unescape(result[i], res, (int32_t)strlen(result[i])+1); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(str, res) != 0){ 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i], aescstrdup(str, -1), locale[i]); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(currencyFmt); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns for PREEURO variants. 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencyPreEuro(void) 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *currencyFmt; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL, *res=NULL; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed, i; 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* locale[]={ 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ca_ES_PREEURO", "de_LU_PREEURO", "en_IE_PREEURO", "fi_FI_PREEURO", "fr_LU_PREEURO", "it_IT_PREEURO", 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "pt_PT_PREEURO", "de_AT_PREEURO", "el_GR_PREEURO", "es_ES_PREEURO", "fr_BE_PREEURO", "ga_IE_PREEURO", 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_BE_PREEURO", "de_DE_PREEURO", "en_BE_PREEURO", "eu_ES_PREEURO", "fr_FR_PREEURO", "gl_ES_PREEURO", 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "nl_NL_PREEURO", 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* result[]={ 473f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "\\u20A7\\u00A02", "2\\u00A0F", "IEP1.50", "1,50\\u00A0mk", "2\\u00A0F", "ITL\\u00A02", 474f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1$50\\u00A0\\u200B", "\\u00F6S\\u00A01,50", "1,50\\u00A0\\u0394\\u03C1\\u03C7", "2\\u00A0\\u20A7", "1,50\\u00A0FB", "IEP1.50", 475f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1,50\\u00A0BEF", "1,50\\u00A0DM", "1,50\\u00A0BEF", "\\u20A7\\u00A02", "1,50\\u00A0F", "2\\u00A0\\u20A7", 476b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "NLG\\u00A01,50" 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the number format with different currency patterns\n"); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i < 19; i++) 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char curID[256] = {0}; 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(locale[i], curID, 256, &status); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 4856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Could not canonicalize %s. Error: %s (Are you missing data?)\n", locale[i], u_errorName(status)); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,curID,NULL, &status); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 4916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status)); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed= unum_formatDouble(currencyFmt, 1.50, NULL, lneed, NULL, &status); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field = 0; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(currencyFmt, 1.50, str, lneed+1, &pos, &status); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(result[i],res,(int32_t)(strlen(result[i])+1)); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(str, res) != 0){ 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(currencyFmt); 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currency "object" (we use this name to match the other C++ 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * test name and the Jave name). Actually, test ISO currency code 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * support in the C API. 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencyObject(void) 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *currencyFmt; 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str=NULL, *res=NULL; 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed, i; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* locale[]={ 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_FR", 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "fr_FR", 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* currency[]={ 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "", 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "JPY", 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* result[]={ 546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "1\\u00A0234,56\\u00A0\\u20AC", 547f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1\\u00A0235\\u00A0JPY", 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the number format with different currency codes\n"); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0; i < 2; i++) 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cStr[20]={0}; 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar isoCode[16]={0}; 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = unum_open(UNUM_CURRENCY, NULL,0,locale[i],NULL, &status); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error in the construction of number format with style currency: %s (Are you missing data?)\n", 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status)); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*currency[i]) { 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(isoCode, currency[i]); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isoCode, u_strlen(isoCode), &status); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: can't set currency code %s\n", myErrorName(status) ); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_getTextAttribute(currencyFmt, UNUM_CURRENCY_CODE, 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isoCode, sizeof(isoCode), &status); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: can't get currency code %s\n", myErrorName(status) ); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_UCharsToChars(isoCode,cStr,u_strlen(isoCode)); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ISO code %s\n", cStr); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*currency[i] && uprv_strcmp(cStr, currency[i])) { 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: currency should be %s, but is %s\n", currency[i], cStr); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed= unum_formatDouble(currencyFmt, 1234.56, NULL, lneed, NULL, &status); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field = 0; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(currencyFmt, 1234.56, str, lneed+1, &pos, &status); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen(result[i])+1) ); 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(result[i],res, (int32_t)(strlen(result[i])+1)); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(str, res) != 0){ 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected %s Got: %s for locale: %s\n", result[i],aescstrdup(str, -1),locale[i]); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(currencyFmt); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method. 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestRounding487(void) 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *nnf; 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* nnf = unum_open(UNUM_DEFAULT, NULL, &status); */ 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nnf = unum_open(UNUM_DEFAULT, NULL,0,"en_US",NULL, &status); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: failure in the construction of number format: %s (Are you missing data?)\n", myErrorName(status)); 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(nnf, 0.00159999, 4, "0.0016"); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(nnf, 0.00995, 4, "0.01"); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(nnf, 12.3995, 3, "12.4"); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(nnf, 12.4999, 0, "12"); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(nnf, - 19.5, 0, "-20"); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(nnf); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*-------------------------------------*/ 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void roundingTest(UNumberFormat* nf, double x, int32_t maxFractionDigits, const char* expected) 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *out = NULL; 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *res; 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status; 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed; 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setAttribute(nf, UNUM_MAX_FRACTION_DIGITS, maxFractionDigits); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(nf, x, NULL, lneed, NULL, &status); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field=0; 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(nf, x, out, lneed+1, &pos, &status); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Need to use log_verbose here. Problem with the float*/ 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*printf("%f format with %d fraction digits to %s\n", x, maxFractionDigits, austrdup(out) );*/ 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1) ); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, expected); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(out, res) != 0) 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected: %s or %s\n", expected, austrdup(res) ); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(out != NULL) { 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(out); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Testing unum_getDoubleAttribute and unum_setDoubleAttribute() 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDoubleAttribute(void) 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double mydata[] = { 1.11, 22.22, 333.33, 4444.44, 55555.55, 666666.66, 7777777.77, 88888888.88, 999999999.99}; 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double dvalue; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormatAttribute attr; 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormatStyle style= UNUM_DEFAULT; 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *def; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting get and set DoubleAttributes\n"); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def=unum_open(style, NULL,0,NULL,NULL, &status); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 6866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Fail: error creating a default number formatter -> %s (Are you missing data?)\n", u_errorName(status)); 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru attr=UNUM_ROUNDING_INCREMENT; 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dvalue=unum_getDoubleAttribute(def, attr); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i<9 ; i++) 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dvalue = mydata[i]; 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setDoubleAttribute(def, attr, dvalue); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(unum_getDoubleAttribute(def,attr)!=mydata[i]) 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: error in setting and getting double attributes for UNUM_ROUNDING_INCREMENT\n"); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pass: setting and getting double attributes for UNUM_ROUNDING_INCREMENT works fine\n"); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(def); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value. 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSecondaryGrouping(void) { 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *f = NULL, *g= NULL; 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *us = unum_open(UNUM_DECIMAL,NULL,0, "en_US", NULL,&status); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar resultBuffer[512]; 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = 1876543210L; 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = TRUE; 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[512]; 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool expectGroup = FALSE, isGroup = FALSE; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "#,##,###"); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = unum_open(UNUM_IGNORE,buffer, -1, "en_US",NULL, &status); 7216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 7226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error DecimalFormat ct -> %s (Are you missing data?)\n", u_errorName(status)); 7236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 7246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field = 0; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(f, (int32_t)123456789L, resultBuffer, 512 , &pos, &status); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "12,34,56,789"); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: Formatting \"#,##,###\" pattern with 123456789 got %s, expected %s\n", resultBuffer, "12,34,56,789"); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.beginIndex != 0 && pos.endIndex != 12) { 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: Formatting \"#,##,###\" pattern pos = (%d, %d) expected pos = (0, 12)\n", pos.beginIndex, pos.endIndex); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(resultBuffer,0, sizeof(UChar)*512); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_toPattern(f, FALSE, resultBuffer, 512, &status); 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "#,##,###"); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: toPattern() got %s, expected %s\n", resultBuffer, "#,##,###"); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(resultBuffer,0, sizeof(UChar)*512); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "#,###"); 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_applyPattern(f, FALSE, buffer, -1,NULL,NULL); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: applyPattern call failed\n"); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setAttribute(f, UNUM_SECONDARY_GROUPING_SIZE, 4); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(f, (int32_t)123456789L, resultBuffer, 512 , &pos, &status); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "12,3456,789"); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: Formatting \"#,###\" pattern with 123456789 got %s, expected %s\n", resultBuffer, "12,3456,789"); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(resultBuffer,0, sizeof(UChar)*512); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_toPattern(f, FALSE, resultBuffer, 512, &status); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buffer, "#,####,###"); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((u_strcmp(resultBuffer, buffer) != 0) || U_FAILURE(status)) 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: toPattern() got %s, expected %s\n", resultBuffer, "#,####,###"); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(resultBuffer,0, sizeof(UChar)*512); 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g = unum_open(UNUM_DECIMAL, NULL,0,"hi_IN",NULL, &status); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: Cannot create UNumberFormat for \"hi_IN\" locale.\n"); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_format(g, l, resultBuffer, 512, &pos, &status); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(g); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* expect "1,87,65,43,210", but with Hindi digits */ 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 01234567890123 */ 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strlen(resultBuffer) != 14) { 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<u_strlen(resultBuffer); ++i) { 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectGroup = FALSE; 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (i) { 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectGroup = TRUE; 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Later -- fix this to get the actual grouping */ 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* character from the resource bundle. */ 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isGroup = (UBool)(resultBuffer[i] == 0x002C); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isGroup != expectGroup) { 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) { 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL Expected %s x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got %s\n", "1876543210L", resultBuffer); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(f); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(us); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCurrencyKeywords(void) 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char * const currencies[] = { 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ADD", "ADP", "AED", "AFA", "AFN", "AIF", "ALK", "ALL", "ALV", "ALX", "AMD", 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ANG", "AOA", "AOK", "AON", "AOR", "AOS", "ARA", "ARM", "ARP", "ARS", "ATS", 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "AUD", "AUP", "AWG", "AZM", "BAD", "BAM", "BAN", "BBD", "BDT", "BEC", "BEF", 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "BEL", "BGL", "BGM", "BGN", "BGO", "BGX", "BHD", "BIF", "BMD", "BMP", "BND", 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "BOB", "BOL", "BOP", "BOV", "BRB", "BRC", "BRE", "BRL", "BRN", "BRR", "BRZ", 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "BSD", "BSP", "BTN", "BTR", "BUK", "BUR", "BWP", "BYB", "BYL", "BYR", "BZD", 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "BZH", "CAD", "CDF", "CDG", "CDL", "CFF", "CHF", "CKD", "CLC", "CLE", "CLF", 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "CLP", "CMF", "CNP", "CNX", "CNY", "COB", "COF", "COP", "CRC", "CSC", "CSK", 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "CUP", "CUX", "CVE", "CWG", "CYP", "CZK", "DDM", "DEM", "DES", "DJF", "DKK", 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "DOP", "DZD", "DZF", "DZG", "ECS", "ECV", "EEK", "EGP", "ERN", "ESP", "ETB", 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ETD", "EUR", "FIM", "FIN", "FJD", "FJP", "FKP", "FOK", "FRF", "FRG", "GAF", 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "GBP", "GEK", "GEL", "GHC", "GHO", "GHP", "GHR", "GIP", "GLK", "GMD", "GMP", 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "GNF", "GNI", "GNS", "GPF", "GQE", "GQF", "GQP", "GRD", "GRN", "GTQ", "GUF", 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "GWE", "GWM", "GWP", "GYD", "HKD", "HNL", "HRD", "HRK", "HTG", "HUF", "IBP", 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "IDG", "IDJ", "IDN", "IDR", "IEP", "ILL", "ILP", "ILS", "IMP", "INR", "IQD", 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "IRR", "ISK", "ITL", "JEP", "JMD", "JMP", "JOD", "JPY", "KES", "KGS", "KHO", 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "KHR", "KID", "KMF", "KPP", "KPW", "KRH", "KRO", "KRW", "KWD", "KYD", "KZR", 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "KZT", "LAK", "LBP", "LIF", "LKR", "LNR", "LRD", "LSL", "LTL", "LTT", "LUF", 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "LVL", "LVR", "LYB", "LYD", "LYP", "MAD", "MAF", "MCF", "MCG", "MDC", "MDL", 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "MDR", "MGA", "MGF", "MHD", "MKD", "MKN", "MLF", "MMK", "MMX", "MNT", "MOP", 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "MQF", "MRO", "MTL", "MTP", "MUR", "MVP", "MVR", "MWK", "MWP", "MXN", "MXP", 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "MXV", "MYR", "MZE", "MZM", "NAD", "NCF", "NGN", "NGP", "NHF", "NIC", "NIG", 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "NIO", "NLG", "NOK", "NPR", "NZD", "NZP", "OMR", "OMS", "PAB", "PDK", "PDN", 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "PDR", "PEI", "PEN", "PES", "PGK", "PHP", "PKR", "PLN", "PLX", "PLZ", "PSP", 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "PTC", "PTE", "PYG", "QAR", "REF", "ROL", "RON", "RUB", "RUR", "RWF", "SAR", 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SAS", "SBD", "SCR", "SDD", "SDP", "SEK", "SGD", "SHP", "SIB", "SIT", "SKK", 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SLL", "SML", "SOS", "SQS", "SRG", "SSP", "STD", "STE", "SUN", "SUR", "SVC", 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "SYP", "SZL", "TCC", "TDF", "THB", "TJR", "TJS", "TMM", "TND", "TOP", "TOS", 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "TPE", "TPP", "TRL", "TTD", "TTO", "TVD", "TWD", "TZS", "UAH", "UAK", "UGS", 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "UGX", "USD", "USN", "USS", "UYF", "UYP", "UYU", "UZC", "UZS", "VAL", "VDD", 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "VDN", "VDP", "VEB", "VGD", "VND", "VNN", "VNR", "VNS", "VUV", "WSP", "WST", 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XAD", "XAF", "XAM", "XAU", "XBA", "XBB", "XBC", "XBD", "XCD", "XCF", "XDR", 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XEF", "XEU", "XFO", "XFU", "XID", "XMF", "XNF", "XOF", "XPF", "XPS", "XSS", 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "XTR", "YDD", "YEI", "YER", "YUD", "YUF", "YUG", "YUM", "YUN", "YUO", "YUR", 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "ZAL", "ZAP", "ZAR", "ZMK", "ZMP", "ZRN", "ZRZ", "ZWD" 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0, j = 0; 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t noLocales = uloc_countAvailable(); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char locale[256]; 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char currLoc[256]; 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar result[4]; 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar currBuffer[256]; 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0; i < noLocales; i++) { 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(currLoc, uloc_getAvailable(i)); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(j = 0; j < sizeof(currencies)/sizeof(currencies[0]); j++) { 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(locale, currLoc); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(locale, "@currency="); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcat(locale, currencies[j]); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale(locale, result, 4, &status); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_charsToUChars(currencies[j], currBuffer, 3); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currBuffer[3] = 0; 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(currBuffer, result) != 0) { 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the right currency for %s\n", locale); 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestGetKeywordValuesForLocale(void) { 871b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define PREFERRED_SIZE 12 872b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define MAX_NUMBER_OF_KEYWORDS 4 873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *PREFERRED[PREFERRED_SIZE][MAX_NUMBER_OF_KEYWORDS] = { 874f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { "root", "USD", "USN", NULL }, 875f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { "und", "USD", "USN", NULL }, 876f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius /* { "und_ZZ", "USD", NULL, NULL }, -- temporarily remove as this locale now has 15 entries */ 877f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { "en_US", "USD", "USN", NULL }, 878f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { "en_029", "USD", "USN", NULL }, 879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "en_TH", "THB", NULL, NULL }, 880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "de", "EUR", NULL, NULL }, 881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "de_DE", "EUR", NULL, NULL }, 882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "ar", "EGP", NULL, NULL }, 8838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { "ar_PS", "ILS", "JOD", NULL }, 884f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { "en@currency=CAD", "USD", "USN", NULL }, 885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "fr@currency=zzz", "EUR", NULL, NULL }, 886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho { "de_DE@currency=DEM", "EUR", NULL, NULL }, 887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const int32_t EXPECTED_SIZE[PREFERRED_SIZE] = { 889f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1 890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t i, j, size; 893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UEnumeration *pref, *all; 894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *loc = NULL; 895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool matchPref, matchAll; 896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *value = NULL; 897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t valueLength = 0; 898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UList *ALLList = NULL; 900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UEnumeration *ALL = ucurr_getKeywordValuesForLocale("currency", uloc_getDefault(), FALSE, &status); 902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (ALL == NULL) { 9036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "ERROR getting keyword value for default locale. -> %s\n", u_errorName(status)); 904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (i = 0; i < PREFERRED_SIZE; i++) { 908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pref = NULL; 909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru all = NULL; 910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru loc = PREFERRED[i][0]; 911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pref = ucurr_getKeywordValuesForLocale("currency", loc, TRUE, &status); 912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru size = uenum_count(pref, &status); 916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (size == EXPECTED_SIZE[i]) { 918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = TRUE; 919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (j = 0; j < size; j++) { 920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((value = uenum_next(pref, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (uprv_strcmp(value, PREFERRED[i][j+1]) != 0) { 92250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("ERROR: locale %s got keywords #%d %s expected %s\n", loc, j, value, PREFERRED[i][j+1]); 92350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("ERROR getting keyword value for locale \"%s\"\n", loc); 930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 93350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 93450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: size of locale \"%s\" %d does not match expected size %d\n", loc, size, EXPECTED_SIZE[i]); 935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!matchPref) { 938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: Preferred values for locale \"%s\" does not match expected.\n", loc); 939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(pref); 942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru all = ucurr_getKeywordValuesForLocale("currency", loc, FALSE, &status); 944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru size = uenum_count(all, &status); 946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(status) && size == uenum_count(ALL, &status)) { 948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = TRUE; 949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ALLList = ulist_getListFromEnum(ALL); 950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (j = 0; j < size; j++) { 951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((value = uenum_next(all, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!ulist_containsString(ALLList, value, uprv_strlen(value))) { 953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Locale %s have %s not in ALL\n", loc, value); 954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("ERROR getting \"all\" keyword value for locale \"%s\"\n", loc); 960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 96350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!matchAll) { 964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: All values for locale \"%s\" does not match expected.\n", loc); 96550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 96650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 96750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 96850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("ERROR: %s\n", u_errorName(status)); 96950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if(size!=uenum_count(ALL, &status)) { 97050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("ERROR: got size of %d, wanted %d\n", size, uenum_count(ALL, &status)); 97150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(all); 975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(ALL); 978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper handling of rounding modes. 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestRounding5350(void) 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UNumberFormat *nnf; 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* nnf = unum_open(UNUM_DEFAULT, NULL, &status); */ 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nnf = unum_open(UNUM_DEFAULT, NULL,0,"en_US",NULL, &status); 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 9946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: failure in the construction of number format: %s (Are you missing data?)\n", myErrorName(status)); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setAttribute(nnf, UNUM_MAX_FRACTION_DIGITS, 2); 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -0.125, UNUM_ROUND_CEILING, "-0.12"); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -0.125, UNUM_ROUND_FLOOR, "-0.13"); 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -0.125, UNUM_ROUND_DOWN, "-0.12"); 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -0.125, UNUM_ROUND_UP, "-0.13"); 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 0.125, UNUM_FOUND_HALFEVEN, "0.12"); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 0.135, UNUM_ROUND_HALFDOWN, "0.13"); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 0.125, UNUM_ROUND_HALFUP, "0.13"); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 0.135, UNUM_FOUND_HALFEVEN, "0.14"); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* The following are exactly represented, and shouldn't round */ 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.00, UNUM_ROUND_UP, "1"); 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 24.25, UNUM_ROUND_UP, "24.25"); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 24.25, UNUM_ROUND_CEILING, "24.25"); 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -24.25, UNUM_ROUND_UP, "-24.25"); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Differences pretty far out there */ 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_CEILING, "1.01"); 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_FLOOR, "1"); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_DOWN, "1"); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_UP, "1.01"); 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_FOUND_HALFEVEN, "1"); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFDOWN, "1"); 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFUP, "1"); 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_CEILING, "-1"); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_FLOOR, "-1.01"); 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_DOWN, "-1"); 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_UP, "-1.01"); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_FOUND_HALFEVEN, "-1"); 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFDOWN, "-1"); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFUP, "-1"); 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_close(nnf); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*-------------------------------------*/ 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void roundingTest2(UNumberFormat* nf, double x, int32_t roundingMode, const char* expected) 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *out = NULL; 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *res; 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFieldPosition pos; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status; 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lneed; 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_setAttribute(nf, UNUM_ROUNDING_MODE, roundingMode); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=0; 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lneed=unum_formatDouble(nf, x, NULL, lneed, NULL, &status); 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru out=(UChar*)malloc(sizeof(UChar) * (lneed+1) ); 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos.field=0; 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(nf, x, out, lneed+1, &pos, &status); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in formatting using unum_formatDouble(.....): %s\n", myErrorName(status) ); 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Need to use log_verbose here. Problem with the float*/ 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*printf("%f format with %d fraction digits to %s\n", x, maxFractionDigits, austrdup(out) );*/ 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1) ); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res, expected); 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(out, res) != 0) 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected: \"%s\" Got: \"%s\"\n", expected, austrdup(out) ); 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(res); 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(out != NULL) { 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(out); 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1068