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