1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation and
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Modification History:
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   07/15/99    helena      Ported to HPUX 10/11 CC.
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "numfmtst.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h"
18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/localpointer.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/measfmt.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h"
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "digitlst.h"
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "textfile.h"
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tokiter.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "charstr.h"
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "putilimp.h"
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "winnmtst.h"
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <float.h>
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h>
31b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <stdlib.h>
32b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cstring.h"
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/numsys.h"
3454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "fmtableimp.h"
35b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
36b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_CACHE_DEBUG 1
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "stdio.h" /* for sprintf */
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// #include "iostream"   // for cout
39b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
40b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_DEBUG 1
41b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
42b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof(array[0]))
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUR[] = {69,85,82,0}; // "EUR"
45b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD"
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4759d709d503bab6e2b61931737e662dd293b40578ccornelius
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class NumberFormatTest
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { errcheckln(status, UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; }
5327f654740f2a26ad62a5c155af9199af9e69b889claireho#define CHECK_DATA(status,str) if (U_FAILURE(status)) { dataerrln(UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; }
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO_BEGIN;
588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencySign);
598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrency);
608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestParse);
618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRounding487);
628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestQuotes);
638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponential);
648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPatterns);
658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  // Upgrade to alphaWorks - liu 5/99
678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponent);
688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientific);
698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPad);
708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPatterns2);
718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSecondaryGrouping);
728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSurrogateSupport);
738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAPI);
748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyObject);
768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyPatterns);
778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  //TESTCASE_AUTO(TestDigitList);
788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestWhiteSpaceParsing);
798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestComplexCurrency);  // This test removed because CLDR no longer uses choice formats in currency symbols.
808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRegCurrency);
818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSymbolsWithBadLocale);
828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAdoptDecimalFormatSymbols);
838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientific2);
858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientificGrouping);
868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestInt64);
878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPerMill);
898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestIllegalPatterns);
908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCases);
918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyNames);
938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyAmount);
948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyUnit);
958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCoverage);
968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestJB3832);
978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestHost);
988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestHostClone);
998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFormat);
1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRounding);
1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestNonpositiveMultiplier);
1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestNumberingSystems);
1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSpaceParsing);
1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestMultiCurrencySign);
1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFormatForMixParsing);
1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestDecimalFormatCurrencyParse);
1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyIsoPluralFormat);
1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyParsing);
1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestParseCurrencyInUCurr);
1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormatAttributes);
1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFieldPositionIterator);
1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestDecimal);
1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFractionDigits);
1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponentParse);
1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExplicitParents);
1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestLenientParse);
1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAvailableNumberingSystems);
1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRoundingPattern);
1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(Test9087);
1208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormatFastpaths);
1218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormattableSize);
12259d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestUFormattable);
12359d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestSignificantDigits);
12459d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestShowZero);
12559d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestCompatibleCurrencies);
12659d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestBug9936);
12759d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseNegativeWithFaLocale);
12859d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseNegativeWithAlternateMinusSign);
12959d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestCustomCurrencySignAndSeparator);
13059d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseSignsAndMarks);
131fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(Test10419RoundingWith0FractionDigits);
132fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(Test10468ApplyPattern);
133fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestRoundingScientific10542);
134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestZeroScientific10547);
135fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestAccountingCurrency);
136fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestEquality);
1378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO_END;
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test API (increase code coverage)
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestAPI(void)
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln("Test API");
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  NumberFormat *test = NumberFormat::createInstance("root", status);
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
1506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    dataerrln("unable to create format object - %s", u_errorName(status));
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(test != NULL) {
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMinimumIntegerDigits(10);
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMaximumIntegerDigits(2);
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMinimumFractionDigits(10);
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMaximumFractionDigits(2);
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->format(bla, result, pos, status);
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("Yuck... Formatted a duck... As a number!");
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      status = U_ZERO_ERROR;
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result.remove();
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t ll = 12;
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->format(ll, result);
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != "12.00"){
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("format int64_t error");
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ParsePosition ppos;
177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    LocalPointer<CurrencyAmount> currAmt(test->parseCurrency("",ppos));
178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    // old test for (U_FAILURE(status)) was bogus here, method does not set status!
179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (ppos.getIndex()) {
180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("Parsed empty string as currency");
18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete test;
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18759d709d503bab6e2b61931737e662dd293b40578ccorneliusclass StubNumberFormat :public NumberFormat{
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
18959d709d503bab6e2b61931737e662dd293b40578ccornelius    StubNumberFormat(){};
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const {
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo;
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const {
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo.append((UChar)0x0033);
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const {
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return NumberFormat::format(number, appendTo, pos);
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const {
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo;
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parse(const UnicodeString& ,
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Formattable& ,
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ParsePosition& ) const {}
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parse( const UnicodeString& ,
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        Formattable& ,
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UErrorCode& ) const {}
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UClassID getDynamicClassID(void) const {
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        static char classID = 0;
21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return (UClassID)&classID;
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual Format* clone() const {return NULL;}
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCoverage(void){
21759d709d503bab6e2b61931737e662dd293b40578ccornelius    StubNumberFormat stub;
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString agent("agent");
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t num = 4;
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (stub.format(num, agent, pos) != UnicodeString("agent3")){
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)");
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test various patterns
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestPatterns(void)
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), status);
2326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) { errcheckln(status, "FAIL: Could not construct DecimalFormatSymbols - %s", u_errorName(status)); return; }
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* pat[]    = { "#.#", "#.", ".#", "#" };
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0]));
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* newpat[] = { "#0.#", "#0.", "#.0", "#" };
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* num[]    = { "0",   "0.", ".0", "0" };
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<pat_length; ++i)
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat[i], sym, status);
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; }
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString newp; fmt.toPattern(newp);
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(newp == newpat[i]))
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] +
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; " + newp + " seen instead");
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s);
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(s == num[i]))
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] +
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; " + s + " seen instead");
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits());
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
25950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug
26050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
26450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestDigitList(void)
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // API coverage for DigitList
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  DigitList list1;
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list1.append('1');
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list1.fDecimalAt = 1;
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  DigitList list2;
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list2.set((int32_t)1);
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (list1 != list2) {
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("digitlist append, operator!= or set failed ");
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (!(list1 == list2)) {
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("digitlist append, operator== or set failed ");
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test exponential pattern
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestExponential(void)
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), status);
2906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; }
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]"  };
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0]));
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// The following #if statements allow this test to be built and run on
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// platforms that do not have standard IEEE numerics.  For example,
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// S/390 doubles have an exponent range of -78 to +75.  For the
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following #if statements to work, float.h must define
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// DBL_MAX_10_EXP to be a compile-time constant.
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This section may be expanded as needed.
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if DBL_MAX_10_EXP > 300
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 };
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = (int32_t)(sizeof(val) / sizeof(val[0]));
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* valFormat[] =
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271",
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272",
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273",
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]"
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double valParse[] =
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E300, -3.1416E-271,
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E300, -3.1416E-271,
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123456800, 1.23E300, -3.141593E-271,
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123500000, 1.23E300, -3.142E-271,
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif DBL_MAX_10_EXP > 70
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 };
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = sizeof(val) / sizeof(val[0]);
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char* valFormat[] =
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71",
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72",
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072",
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]"
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double valParse[] =
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E70, -3.1416E-71,
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E70, -3.1416E-71,
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123456800, 1.23E70, -3.141593E-71,
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123500000, 1.23E70, -3.142E-71,
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Don't test double conversion
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double* val = 0;
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = 0;
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char** valFormat = 0;
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double* valParse = 0;
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Warning: Skipping double conversion tests");
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lval[] = { 0, -1, 1, 123456789 };
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lval_length = (int32_t)(sizeof(lval) / sizeof(lval[0]));
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* lvalFormat[] =
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E0", "-1E0", "1E0", "1.2346E8",
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07",
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E000", "-1E000", "1E000", "123.4568E006",
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E0", "[1E0]", "1E0", "1.235E8"
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lvalParse[] =
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123460000,
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123460000,
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123456800,
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123500000,
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ival = 0, ilval = 0;
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t p=0; p<pat_length; ++p)
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat[p], sym, status);
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; }
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pattern;
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" +
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.toPattern(pattern) + "\"");
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t v;
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (v=0; v<val_length; ++v)
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s);
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" " + val[v] + " -format-> " + s);
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (s != valFormat[v+ival])
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]);
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ParsePosition pos(0);
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable af;
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(s, af, pos);
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            double a;
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool useEpsilon = FALSE;
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (af.getType() == Formattable::kLong)
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                a = af.getLong();
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else if (af.getType() == Formattable::kDouble) {
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                a = af.getDouble();
398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // S/390 will show a failure like this:
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //| -3.141592652999999e-271 -format-> -3.1416E-271
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //|                          -parse-> -3.1416e-271
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //| FAIL: Expected -3.141599999999999e-271
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // To compensate, we use an epsilon-based equality
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // test on S/390 only.  We don't want to do this in
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // general because it's less exacting.
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                useEpsilon = TRUE;
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Non-numeric Formattable returned");
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                continue;
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (pos.getIndex() == s.length())
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln((UnicodeString)"  -parse-> " + a);
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // Use epsilon comparison as necessary
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if ((useEpsilon &&
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) ||
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    (!useEpsilon && a != valParse[v+ival]))
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                {
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]);
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a);
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"  should be (" + s.length() + " chars) -> " + valParse[v+ival]);
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (v=0; v<lval_length; ++v)
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString s;
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (*(NumberFormat*)&fmt).format(lval[v], s);
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" " + lval[v] + "L -format-> " + s);
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (s != lvalFormat[v+ilval])
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s);
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ParsePosition pos(0);
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable af;
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(s, af, pos);
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (af.getType() == Formattable::kLong ||
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                af.getType() == Formattable::kInt64) {
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UErrorCode status = U_ZERO_ERROR;
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                int32_t a = af.getLong(status);
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (pos.getIndex() == s.length())
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                {
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln((UnicodeString)"  -parse-> " + a);
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (a != lvalParse[v+ilval])
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]);
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                else
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a);
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + " Double: " + af.getDouble()
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + ", Long: " + af.getLong());
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ival += val_length;
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ilval += lval_length;
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientific2() {
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // jb 2552
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status);
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double num = 12.34;
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$12.34");
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->setScientificNotation(TRUE);
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$1.23E1");
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->setScientificNotation(FALSE);
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$12.34");
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
47950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientificGrouping() {
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // jb 2552
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("##0.00E0",status);
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, .01234, "12.3E-3");
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, .1234, "123E-3");
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 1.234, "1.23E0");
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 12.34, "12.3E0");
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 123.4, "123E0");
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 1234., "1.23E3");
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void setFromString(DigitList& dl, const char* str) {
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char c;
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool decimalSet = FALSE;
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.clear();
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while ((c = *str++)) {
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c == '-') {
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fIsPositive = FALSE;
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (c == '+') {
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fIsPositive = TRUE;
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (c == '.') {
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fDecimalAt = dl.fCount;
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            decimalSet = TRUE;
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.append(c);
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!decimalSet) {
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.fDecimalAt = dl.fCount;
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}*/
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestInt64() {
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#.#E0",status);
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setMaximumFractionDigits(20);
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)0, "0E0");
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)-1, "-1E0");
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)1, "1E0");
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9");
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9");
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18");
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18");
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // also test digitlist
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*    int64_t int64max = U_INT64_MAX;
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t int64min = U_INT64_MIN;
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* int64maxstr = "9223372036854775807";
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* int64minstr = "-9223372036854775808";
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString fail("fail: ");
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test max int64 value
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DigitList dl;
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    setFromString(dl, int64maxstr);
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr + " didn't fit");
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64max) {
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr);
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64max) {
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr);
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test negative of max int64 value (1 shy of min int64 value)
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.fIsPositive = FALSE;
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr + " didn't fit");
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != -int64max) {
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr);
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != -int64max) {
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr);
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test min int64 value
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    setFromString(dl, int64minstr);
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64minstr + " didn't fit");
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64min) {
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64minstr);
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64min) {
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64minstr);
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test negative of min int 64 value (1 more than max int64 value)
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.fIsPositive = TRUE; // won't fit
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (dl.fitsIntoInt64(FALSE)) {
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-(" + int64minstr + ") didn't fit");
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }*/
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the handling of quotes
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestQuotes(void)
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString *pat;
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status);
6046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) {
6056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status));
6066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        delete sym;
6076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        return;
6086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    }
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat = new UnicodeString("a'fo''o'b#");
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status);
61150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString s;
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format((int32_t)123, s);
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + *pat + "\"");
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format 123 -> " + escape(s));
61550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!(s=="afo'ob123"))
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected afo'ob123");
61750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete pat;
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat = new UnicodeString("a''b#");
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new DecimalFormat(*pat, *sym, status);
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format((int32_t)123, s);
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + *pat + "\"");
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format 123 -> " + escape(s));
62750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!(s=="a'b123"))
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected a'b123");
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete pat;
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sym;
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns.
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrencySign(void)
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status);
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar currency = 0x00A4;
6446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) {
6456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status));
6466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        delete sym;
6476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        return;
6486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    }
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // "\xA4#,##0.00;-\xA4#,##0.00"
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.append(currency).append("#,##0.00;-").
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(currency).append("#,##0.00");
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *fmt = new DecimalFormat(pat, *sym, status);
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.truncate(0);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\"");
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s));
65727f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "$1,234.56") dataerrln((UnicodeString)"FAIL: Expected $1,234.56");
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(- 1234.56, s);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s));
66127f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "-$1,234.56") dataerrln((UnicodeString)"FAIL: Expected -$1,234.56");
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.truncate(0);
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00"
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.append(currency).append(currency).
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(" #,##0.00;").
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(currency).append(currency).
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(" -#,##0.00");
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new DecimalFormat(pat, *sym, status);
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(1234.56, s);
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\"");
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s));
67427f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "USD 1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD 1,234.56");
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(-1234.56, s);
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s));
67827f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "USD -1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD -1,234.56");
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sym;
6816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + u_errorName(status));
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
68350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::escape(UnicodeString& s)
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
70750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* testCases[][2]= {
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     /* locale ID */  /* expected */
71154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {"ca_ES_PREEURO", "\\u20A7\\u00A01.150" },
712c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"de_LU_PREEURO", "1,150\\u00A0F" },
713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" },
714b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"en_BE_PREEURO", "1.150,50\\u00A0BEF" },
715fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_ES_PREEURO", "1.150\\u00A0\\u20A7" },
71654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {"eu_ES_PREEURO", "\\u20A7\\u00A01.150" },
717c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" },
718b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"it_IT_PREEURO", "ITL\\u00A01.150" },
719c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"pt_PT_PREEURO", "1,150$50\\u00A0Esc."},
72027f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en_US@currency=JPY", "\\u00A51,150"},
72127f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en_US@currency=jpy", "\\u00A51,150"},
72227f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en-US-u-cu-jpy", "\\u00A51,150"}
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns.
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrency(void)
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status);
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling NumberFormat::createCurrencyInstance()");
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s; currencyFmt->format(1.50, s);
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre ici a..........." + s);
739c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (!(s==CharsToUnicodeString("1,50\\u00A0$")))
740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$");
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char loc[256]={0};
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status);
74559d709d503bab6e2b61931737e662dd293b40578ccornelius    (void)len;  // Suppress unused variable warning.
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status);
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1.50, s);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre en Allemagne a.." + s);
749b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (!(s==CharsToUnicodeString("1,50\\u00A0DEM")))
750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DEM");
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status);
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status);
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1.50, s);
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre en France a....." + s);
757c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (!(s==CharsToUnicodeString("1,50\\u00A0F")))
758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F");
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Status " + (int32_t)status);
76250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(int i=0; i < (int)(sizeof(testCases)/sizeof(testCases[i])); i++){
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *localeID = testCases[i][0];
766c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        UnicodeString expected(testCases[i][1], -1, US_INV);
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expected = expected.unescape();
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.truncate(0);
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char loc[256]={0};
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        uloc_canonicalize(localeID, loc, 256, &status);
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status);
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)){
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Could not create currency formatter for locale %s",localeID);
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            continue;
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        currencyFmt->format(1150.50, s);
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(s!=expected){
77850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln(UnicodeString("FAIL: Expected: ")+expected
77950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    + UnicodeString(" Got: ") + s
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)){
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Status " + (int32_t)status);
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete currencyFmt;
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
78850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the Currency object handling, new as of ICU 2.2.
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyObject() {
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
79650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberFormat* fmt =
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat::createCurrencyInstance(Locale::getUS(), ec);
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
8006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: getCurrencyInstance(US) - %s", u_errorName(ec));
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmt;
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale null("", "", "");
80650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, null, 1234.56, "$1,234.56");
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getFrance(),
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getJapan(),
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale("fr", "CH", ""),
8168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                   1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getUS(),
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, "$1,234.56");
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec);
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: getCurrencyInstance(FRANCE)");
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmt;
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC"));
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getJapan(),
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("1 235 \\u00A5JP")); // Yen
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale("fr", "CH", ""),
8368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                   1234.56, "1 234,56 CHF"); // no more 0.05 rounding here, see cldrbug 5548
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getUS(),
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, "1 234,56 $US");
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getFrance(),
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
84650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do rudimentary testing of parsing.
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestParse(void)
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString arg("0");
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat* format = new DecimalFormat("00", status);
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Formattable n; format->parse(arg, n, status);
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"parse(" + arg + ") = " + n.getLong());
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (n.getType() != Formattable::kLong ||
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0");
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete format;
8646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) errcheckln(status, (UnicodeString)"FAIL: Status " + u_errorName(status));
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"Exception caught: " + e);
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
87050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
873b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientAffixTestCases[] = {
874103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "(1)",
875103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "( 1)",
876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "(1 )",
877103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "( 1 )"
878b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientMinusTestCases[] = {
881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "-5",
882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "\\u22125",
883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "\\u20105"
884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientCurrencyTestCases[] = {
887103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1,000",
888103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1,000",
889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1000",
890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1000",
891103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1 000.00",
892103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1 000.00",
893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1\\u00A0000.00",
894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "1000.00"
895b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
89759d709d503bab6e2b61931737e662dd293b40578ccornelius// changed from () to - per cldrbug 5674
898b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativeCurrencyTestCases[] = {
89959d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1,000",
90059d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1,000",
90159d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1000",
90259d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1000",
90359d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1 000.00",
90459d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1 000.00",
90559d709d503bab6e2b61931737e662dd293b40578ccornelius        "- $ 1,000.00 ",
90659d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1\\u00A0000.00",
90759d709d503bab6e2b61931737e662dd293b40578ccornelius        "-1000.00"
908b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
910b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientPercentTestCases[] = {
911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "25%",
912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        " 25%",
913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        " 25 %",
914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    	"25 %",
915b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"25\\u00A0%",
916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"25"
917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativePercentTestCases[] = {
920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25%",
921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" -25%",
922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" - 25%",
923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"- 25 %",
924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" - 25 %",
925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25 %",
926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25\\u00A0%",
927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25",
928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"- 25"
929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *strictFailureTestCases[] = {
932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" 1000",
933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"10,00",
934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"1,000,.0"
935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define ARRAY_SIZE(array) ((int32_t) (sizeof (array) / sizeof(array[0])))
938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/**
940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Test lenient parsing.
941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */
942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid
943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormatTest::TestLenientParse(void)
944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{
945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UErrorCode status = U_ZERO_ERROR;
946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    DecimalFormat *format = new DecimalFormat("(#,##0)", status);
947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Formattable n;
948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (format == NULL || U_FAILURE(status)) {
950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create DecimalFormat (#,##0) - %s", u_errorName(status));
951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        format->setLenient(TRUE);
953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientAffixTestCases); t += 1) {
954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientAffixTestCases[t]);
955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
956b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            format->parse(testCase, n, status);
957b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong ||
960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != 1) {
961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\"");
962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       delete format;
966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale en_US("en_US");
969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale sv_SE("sv_SE");
970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *mFormat = NumberFormat::createInstance(sv_SE, UNUM_DECIMAL, status);
972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (mFormat == NULL || U_FAILURE(status)) {
974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (sv_SE, UNUM_DECIMAL) - %s", u_errorName(status));
975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        mFormat->setLenient(TRUE);
977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) {
978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString testCase = ctou(lenientMinusTestCases[t]);
979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            mFormat->parse(testCase, n, status);
981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                status = U_ZERO_ERROR;
986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete mFormat;
989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    mFormat = NumberFormat::createInstance(en_US, UNUM_DECIMAL, status);
992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
993b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (mFormat == NULL || U_FAILURE(status)) {
994b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (en_US, UNUM_DECIMAL) - %s", u_errorName(status));
995b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
996b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        mFormat->setLenient(TRUE);
997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) {
998b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString testCase = ctou(lenientMinusTestCases[t]);
999b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1000b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            mFormat->parse(testCase, n, status);
1001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1003b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
1004b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
1005b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                status = U_ZERO_ERROR;
1006b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete mFormat;
1009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *cFormat = NumberFormat::createInstance(en_US, UNUM_CURRENCY, status);
1012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (cFormat == NULL || U_FAILURE(status)) {
1014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (en_US, UNUM_CURRENCY) - %s", u_errorName(status));
1015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
1016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        cFormat->setLenient(TRUE);
1017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientCurrencyTestCases); t += 1) {
1018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientCurrencyTestCases[t]);
1019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            cFormat->parse(testCase, n, status);
1021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != 1000) {
1025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\"");
1026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativeCurrencyTestCases); t += 1) {
1031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientNegativeCurrencyTestCases[t]);
1032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            cFormat->parse(testCase, n, status);
1034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != -1000) {
1038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\"");
1039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete cFormat;
1044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *pFormat = NumberFormat::createPercentInstance(en_US, status);
1047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (pFormat == NULL || U_FAILURE(status)) {
1049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat::createPercentInstance (en_US) - %s", u_errorName(status));
1050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
1051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        pFormat->setLenient(TRUE);
1052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientPercentTestCases); t += 1) {
1053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientPercentTestCases[t]);
1054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	pFormat->parse(testCase, n, status);
1056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble());
1057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
1059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getDouble() != 0.25) {
1060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\"");
1061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativePercentTestCases); t += 1) {
1066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientNegativePercentTestCases[t]);
1067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	pFormat->parse(testCase, n, status);
1069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble());
1070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
1072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getDouble() != -0.25) {
1073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\"");
1074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete pFormat;
1079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1081b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   // Test cases that should fail with a strict parse and pass with a
1082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   // lenient parse.
1083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   NumberFormat *nFormat = NumberFormat::createInstance(en_US, status);
1084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   if (nFormat == NULL || U_FAILURE(status)) {
1086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       dataerrln("Unable to create NumberFormat (en_US) - %s", u_errorName(status));
1087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   } else {
1088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       // first, make sure that they fail with a strict parse
1089b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) {
1090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       UnicodeString testCase = ctou(strictFailureTestCases[t]);
1091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       nFormat->parse(testCase, n, status);
1093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       if (! U_FAILURE(status)) {
1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       }
1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       status = U_ZERO_ERROR;
1100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       // then, make sure that they pass with a lenient parse
1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       nFormat->setLenient(TRUE);
1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) {
1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       UnicodeString testCase = ctou(strictFailureTestCases[t]);
1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       nFormat->parse(testCase, n, status);
1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	            	n.getLong() != 1000) {
1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       status = U_ZERO_ERROR;
1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       }
1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       delete nFormat;
1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   }
1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// -------------------------------------
1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method.
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestRounding487(void)
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *nf = NumberFormat::createInstance(status);
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling NumberFormat::createInstance()");
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 0.00159999, 4, "0.0016");
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 0.00995, 4, "0.01");
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 12.3995, 3, "12.4");
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 12.4999, 0, "12");
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, - 19.5, 0, "-20");
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete nf;
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status);
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value.
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSecondaryGrouping(void) {
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols ct");
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat f("#,##,###", US, status);
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat ct");
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(f, (int32_t)123456789L, "12,34,56,789");
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(f, "#,##,###");
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.applyPattern("#,###", status);
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "applyPattern");
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.setSecondaryGroupingSize(4);
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(f, (int32_t)123456789L, "12,3456,789");
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(f, "#,####,###");
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status);
116727f654740f2a26ad62a5c155af9199af9e69b889claireho    CHECK_DATA(status, "createInstance(hi_IN)");
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t l = (int32_t)1876543210L;
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    g->format(l, out);
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete g;
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // expect "1,87,65,43,210", but with Hindi digits
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //         01234567890123
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool ok = TRUE;
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (out.length() != 14) {
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ok = FALSE;
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t i=0; i<out.length(); ++i) {
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool expectGroup = FALSE;
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            switch (i) {
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 1:
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 4:
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 7:
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 10:
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                expectGroup = TRUE;
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Later -- fix this to get the actual grouping
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // character from the resource bundle.
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool isGroup = (out.charAt(i) == 0x002C);
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (isGroup != expectGroup) {
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ok = FALSE;
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ok) {
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL  Expected " + l +
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" +
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(out) + "\"");
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Ok    " + l +
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " x hi_IN -> \"" +
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(out) + "\"");
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestWhiteSpaceParsing(void) {
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), ec);
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("a  b#0c  ", US, ec);
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
12146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "FAIL: Constructor - %s", u_errorName(ec));
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t n = 1234;
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, "a b1234c ", n);
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, "a   b1234c   ", n);
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currencies whose display name is a ChoiceFormat.
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestComplexCurrency() {
122650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    UErrorCode ec = U_ZERO_ERROR;
1228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    Locale loc("kn", "IN", "");
1229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec);
1230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    if (U_SUCCESS(ec)) {
1231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00"));
1232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        Use .00392625 because that's 2^-8.  Any value less than 0.005 is fine.
1233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky
1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00"));
1235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50"));
1236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00"));
1237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00"));
1238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    } else {
1239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        errln("FAIL: getCurrencyInstance(kn_IN)");
1240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    }
1241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    delete fmt;
1242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
124450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
124650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected)
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    nf.setMaximumFractionDigits(maxFractionDigits);
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out; nf.format(x, out);
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out);
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected);
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestExponent(void) {
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt1(UnicodeString("0.###E0"), US, status);
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0.###E0)");
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status);
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0.###E+0)");
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t n = 1234;
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(fmt1, n, "1.234E3");
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(fmt2, n, "1.234E+3");
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt1, "1.234E+3", n); // Either format should parse "E+3"
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestScientific(void) {
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test pattern round-trip
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000",
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "0.###E0;[0.###E0]" };
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PAT_length = (int32_t)(sizeof(PAT) / sizeof(PAT[0]));
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t DIGITS[] = {
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // min int, max int, min frac, max frac
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, 1, 0, 0, // "#E0"
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 1, 0, 4, // "0.####E0"
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        2, 2, 3, 3, // "00.000E00"
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 3, 0, 4, // "##0.####E000"
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 1, 0, 3, // "0.###E0;[0.###E0]"
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<PAT_length; ++i) {
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pat(PAT[i]);
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat df(pat, US, status);
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "DecimalFormat constructor");
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pat2;
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df.toPattern(pat2);
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pat == pat2) {
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString("Ok   Pattern rt \"") +
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat + "\" -> \"" +
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat2 + "\"");
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL Pattern rt \"") +
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat + "\" -> \"" +
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat2 + "\"");
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure digit counts match what we expect
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (df.getMinimumIntegerDigits() != DIGITS[4*i] ||
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMaximumIntegerDigits() != DIGITS[4*i+1] ||
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMinimumFractionDigits() != DIGITS[4*i+2] ||
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMaximumFractionDigits() != DIGITS[4*i+3]) {
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL \"" + pat +
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                "\" min/max int; min/max frac = ") +
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMinimumIntegerDigits() + "/" +
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMaximumIntegerDigits() + ";" +
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMinimumFractionDigits() + "/" +
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMaximumFractionDigits() + ", expect " +
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i] + "/" +
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+1] + ";" +
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+2] + "/" +
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+3]);
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test the constructor for default locale. We have to
132850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // manually set the default locale, as there is no
132950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // guarantee that the default locale has the same
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // scientific format.
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale def = Locale::getDefault();
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault(Locale::getUS(), status);
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(status),
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345678901E4", status);
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault(def, status);
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("#E0", US, status),
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345E4", status);
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0E0", US, status),
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1E4", status);
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(Locale::getUS(), status),
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345678901E4", status);
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.###E0", US, status),
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.34E3", status);
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.###E0", US, status),
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.00001,
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.35E3", status);
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.####E0", US, status),
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 12345,
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.345E3", status);
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status),
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1,2345678901E4", status);
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.####E0", US, status),
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           789.12345e-9,
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "789.12E-9", status);
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.####E0", US, status),
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           780.e-9,
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "780E-9", status);
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat(".###E0", US, status),
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           45678.0,
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           ".457E5", status);
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(".###E0", US, status),
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 0,
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           ".0E0", status);
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat[] { new DecimalFormat("#E0", US),
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 new DecimalFormat("##E0", US),
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 new DecimalFormat("####E0", US),
137550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("0E0", US),
137650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("00E0", US),
137750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("000E0", US),
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               },
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Long(45678000),
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new String[] { "4.5678E7",
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "45.678E6",
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "4567.8E4",
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "5E7",
138450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                          "46E6",
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "457E5",
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           );
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("#E0", US, status),
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "4.5678E7", status);
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##E0", US, status),
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "45.678E6", status);
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("####E0", US, status),
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "4567.8E4", status);
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0E0", US, status),
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "5E7", status);
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("00E0", US, status),
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "46E6", status);
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("000E0", US, status),
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "457E5", status);
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("###E0", US, status),
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Object[] { new Double(0.0000123), "12.3E-6",
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.000123), "123E-6",
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.00123), "1.23E-3",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.0123), "12.3E-3",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.123), "123E-3",
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(1.23), "1.23E0",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(12.3), "12.3E0",
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(123), "123E0",
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(1230), "1.23E3",
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         });
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.0000123, "12.3E-6", status);
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.000123, "123E-6", status);
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.00123, "1.23E-3", status);
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.0123, "12.3E-3", status);
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.123, "123E-3", status);
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.23, "1.23E0", status);
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12.3, "12.3E0", status);
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           123.0, "123E0", status);
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1230.0, "1.23E3", status);
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0.#E+00", US, status),
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Object[] { new Double(0.00012), "1.2E-04",
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Long(12000),     "1.2E+04",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         });
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("0.#E+00", US, status),
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.00012, "1.2E-04", status);
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("0.#E+00", US, status),
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 12000, "1.2E+04", status);
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPad(void) {
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", US, status),
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "^^^^0", status);
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", US, status),
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1.3, "^-1.3", status);
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status),
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0.0E0______ g-m/s^2", status);
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status),
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "333.333E-3_ g-m/s^2", status);
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status),
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0.0______ g-m/s^2", status);
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status),
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "0.33333__ g-m/s^2", status);
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test padding before a sign
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)";
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-10),  "xxxxxxxxxx(10.0)", status);
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000),"xxxxxxx(1,000.0)", status);
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000000),"xxx(1,000,000.0)", status);
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -100.37,       "xxxxxxxx(100.37)", status);
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -10456.37,     "xxxxx(10,456.37)", status);
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1120456.37,   "xx(1,120,456.37)", status);
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -112045600.37, "(112,045,600.37)", status);
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1252045600.37,"(1,252,045,600.37)", status);
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(10),  "xxxxxxxxxxxx10.0", status);
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000),"xxxxxxxxx1,000.0", status);
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000000),"xxxxx1,000,000.0", status);
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           100.37,       "xxxxxxxxxx100.37", status);
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10456.37,     "xxxxxxx10,456.37", status);
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1120456.37,   "xxxx1,120,456.37", status);
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           112045600.37, "xx112,045,600.37", status);
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10252045600.37,"10,252,045,600.37", status);
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test padding between a sign and a number
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)";
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-10),  "(10.0xxxxxxxxxx)", status);
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000),"(1,000.0xxxxxxx)", status);
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000000),"(1,000,000.0xxx)", status);
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -100.37,       "(100.37xxxxxxxx)", status);
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -10456.37,     "(10,456.37xxxxx)", status);
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1120456.37,   "(1,120,456.37xx)", status);
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -112045600.37, "(112,045,600.37)", status);
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1252045600.37,"(1,252,045,600.37)", status);
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(10),  "10.0xxxxxxxxxxxx", status);
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000),"1,000.0xxxxxxxxx", status);
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000000),"1,000,000.0xxxxx", status);
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           100.37,       "100.37xxxxxxxxxx", status);
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10456.37,     "10,456.37xxxxxxx", status);
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1120456.37,   "1,120,456.37xxxx", status);
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           112045600.37, "112,045,600.37xx", status);
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10252045600.37,"10,252,045,600.37", status);
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //testing the setPadCharacter(UnicodeString) and getPadCharacterString()
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#", US, status);
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat constructor");
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString padString("P");
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(padString);
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString);
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter((UnicodeString)"^");
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^");
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //commented untill implementation is complete
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /*  fmt.setPadCharacter((UnicodeString)"^^^");
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^");
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.remove();
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.append((UChar)0x0061);
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.append((UChar)0x0302);
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(padString);
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000};
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern(patternChars);
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString);
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPatterns2(void) {
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#", US, status);
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat constructor");
157950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar hat = 0x005E; /*^*/
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat);
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat);
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat);
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat);
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "$*^$#", ILLEGAL);
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#$*^$", ILLEGAL);
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix,
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              12, (UChar)0x0078 /*x*/);
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix,
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              3, (UChar)0x0078 /*x*/);
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix,
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              10, (UChar)0x0061 /*a*/);
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.applyPattern("AA#,##0.00ZZ", status);
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "applyPattern");
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(hat);
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(10);
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadBeforePrefix);
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "*^AA#,##0.00ZZ");
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix);
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA#,##0.00*^ZZ");
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadAfterSuffix);
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA#,##0.00ZZ*^");
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //            12  3456789012
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("AA*^#,##0.00ZZ", "");
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(12);
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadAfterPrefix);
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, exp);
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(13);
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  34567890123
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^##,##0.00ZZ");
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(14);
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  345678901234
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^###,##0.00ZZ");
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(15);
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  3456789012345
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(16);
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  34567890123456
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^#,###,##0.00ZZ");
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSurrogateSupport(void) {
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols custom(Locale::getUS(), status);
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal");
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus");
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus ");
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent");
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternStr("*\\U00010000##.##", "");
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", "");
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = expStr.unescape();
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), expStr, status);
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", custom, status),
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "^^^^0", status);
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##.##", custom, status),
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1.3, " minus 1decimal3", status);
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status),
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0decimal0exponent0 g-m/s^2", status);
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status),
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "333decimal333exponent minus 3 g-m/s^2", status);
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status),
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0decimal0 g-m/s^2", status);
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status),
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "0decimal33333 g-m/s^2", status);
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString zero((UChar32)0x10000);
167027f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString one((UChar32)0x10001);
167127f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString two((UChar32)0x10002);
167227f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString five((UChar32)0x10005);
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero);
167427f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, one);
167527f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kTwoDigitSymbol, two);
167627f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kFiveDigitSymbol, five);
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", "");
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = expStr.unescape();
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.000", custom, status),
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.25, expStr, status);
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30);
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money");
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator");
1686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'");
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", "");
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-20), expStr, status);
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent");
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = "'You''ve lost ' -0.00 %' of your money today'";
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString(" minus You've lost   minus 2000decimal00 percent of your money today", "");
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-20), expStr, status);
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyPatterns(void) {
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, locCount;
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale* locs = NumberFormat::getAvailableLocales(locCount);
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<locCount; ++i) {
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec = U_ZERO_ERROR;
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec);
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec));
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Make sure currency formats do not have a variable number
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // of fraction digits
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t min = nf->getMinimumFractionDigits();
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t max = nf->getMaximumFractionDigits();
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (min != max) {
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString a, b;
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                nf->format(1.0, a);
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                nf->format(1.125, b);
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: " + locs[i].getName() +
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      " min fraction digits != max fraction digits; "
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      "x 1.0 => " + escape(a) +
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      "; x 1.125 => " + escape(b));
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Make sure EURO currency formats have exactly 2 fraction digits
172627f654740f2a26ad62a5c155af9199af9e69b889claireho            DecimalFormat* df = dynamic_cast<DecimalFormat*>(nf);
172727f654740f2a26ad62a5c155af9199af9e69b889claireho            if (df != NULL) {
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (u_strcmp(EUR, df->getCurrency()) == 0) {
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (min != 2 || max != 2) {
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString a;
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        nf->format(1.0, a);
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln((UnicodeString)"FAIL: " + locs[i].getName() +
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              " is a EURO format but it does not have 2 fraction digits; "
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              "x 1.0 => " +
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              escape(a));
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete nf;
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRegCurrency(void) {
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar USD[4];
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US", USD, 4, &status);
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar YEN[4];
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("ja_JP", YEN, 4, &status);
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar TMP[4];
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar QQQ[] = {0x51, 0x51, 0x51, 0};
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
17546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Unable to get currency for locale, error %s", u_errorName(status));
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
175750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status);
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status);
176050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US", TMP, 4, &status);
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(YEN, TMP) != 0) {
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return YEN registered for en_US");
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(QQQ, TMP) != 0) {
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return QQQ for en_US_EURO");
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
177050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status);
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fallbackLen) {
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: tried to fallback en_XX_BAR");
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
177650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ucurr_unregister(enkey, &status)) {
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: couldn't unregister enkey");
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
178150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ucurr_forLocale("en_US", TMP, 4, &status);
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(USD, TMP) != 0) {
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return USD for en_US after unregister of en_US");
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
178650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(QQQ, TMP) != 0) {
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US");
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
179150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_BLAH", TMP, 4, &status);
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(USD, TMP) != 0) {
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: could not find USD for en_US_BLAH after unregister of en");
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
179750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ucurr_unregister(enUSEUROkey, &status)) {
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: couldn't unregister enUSEUROkey");
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
180150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(EUR, TMP) != 0) {
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO");
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyNames(void) {
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Do a basic check of getName()
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // USD { "US$", "US Dollar"            } // 04/04/1792-
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool isChoiceFormat;
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len;
18206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    const UBool possibleDataError = TRUE;
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Warning: HARD-CODED LOCALE DATA in this test.  If it fails, CHECK
182250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // THE LOCALE DATA before diving into the code.
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USD.getName(SYMBOL_NAME)",
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("$"),
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en",
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USD.getName(LONG_NAME)",
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("US Dollar"),
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en",
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_LONG_NAME,
18336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1836c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                 UnicodeString("CA$"),
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en",
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("$"),
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en_CA",
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1847103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    assertEquals("USD.getName(SYMBOL_NAME) in en_AU",
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("US$"),
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en_AU",
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1854c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                 UnicodeString("CA$"),
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en_AU",
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USX.getName(LONG_NAME)",
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("USX"),
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USX, "en_US",
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_LONG_NAME,
18636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("ucurr_getName", ec);
186650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ec = U_ZERO_ERROR;
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test that a default or fallback warning is being returned. JB 4239.
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat,
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
187250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (es_ES fallback)",
18736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                    U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError);
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat,
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
187750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (zh_TW fallback)",
18786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                    U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError);
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat,
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
188250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (en_US default)",
188350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    U_USING_DEFAULT_WARNING == ec || U_USING_FALLBACK_WARNING == ec, TRUE);
188450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    ucurr_getName(CAD, "ti", UCURR_LONG_NAME, &isChoiceFormat,
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
1887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    assertTrue("ucurr_getName (ti default)",
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    U_USING_DEFAULT_WARNING == ec, TRUE);
188950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test that a default warning is being returned when falling back to root. JB 4536.
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat,
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
189350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (cy default to root)",
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    U_USING_DEFAULT_WARNING == ec, TRUE);
189550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // TODO add more tests later
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyUnit(void){
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {85, 83, 68, 0}; /*USD*/
1902fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar BAD[] = {63, 63, 63, 0}; /*???*/
1903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar BAD2[] = {63, 63, 65, 0}; /*???*/
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit cu(USD, ec);
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("CurrencyUnit", ec);
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar * r = cu.getISOCurrency(); // who is the buffer owner ?
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("getISOCurrency()", USD, r);
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit cu2(cu);
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(cu2 == cu)){
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyUnit copy constructed object should be same");
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone();
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*cu3 == cu)){
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyUnit cloned object should be same");
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1919fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    CurrencyUnit bad(BAD, ec);
1920fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertSuccess("CurrencyUnit", ec);
1921fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (cu.getIndex() == bad.getIndex()) {
1922fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Indexes of different currencies should differ.");
1923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1924fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    CurrencyUnit bad2(BAD2, ec);
1925fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertSuccess("CurrencyUnit", ec);
1926fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad2.getIndex() != bad.getIndex()) {
1927fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Indexes of unrecognized currencies should be the same.");
1928fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1929fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad == bad2) {
1930fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Different unrecognized currencies should not be equal.");
1931fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1932fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    bad = bad2;
1933fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad != bad2) {
1934fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Currency unit assignment should be the same.");
1935fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cu3;
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyAmount(void){
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {85, 83, 68, 0}; /*USD*/
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount ca(9, USD, ec);
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("CurrencyAmount", ec);
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount ca2(ca);
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(ca2 == ca)){
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount copy constructed object should be same");
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ca2=ca;
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(ca2 == ca)){
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount assigned object should be same");
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
195450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone();
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*ca3 == ca)){
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount cloned object should be same");
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ca3;
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSymbolsWithBadLocale(void) {
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale locDefault;
1964103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    static const char *badLocales[] = {
1965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // length < ULOC_FULLNAME_CAPACITY
1966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME",
1967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
1968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // length > ULOC_FULLNAME_CAPACITY
1969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME"
1970103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }; // expect U_USING_DEFAULT_WARNING for both
1971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
1972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unsigned int i;
1973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (i = 0; i < sizeof(badLocales) / sizeof(char*); i++) {
1974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const char *localeName = badLocales[i];
1975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale locBad(localeName);
1976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UErrorCode status = U_ZERO_ERROR;
1977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString intlCurrencySymbol((UChar)0xa4);
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1979103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        intlCurrencySymbol.append((UChar)0xa4);
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1981103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
1982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale::setDefault(locBad, status);
1983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
1984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        DecimalFormatSymbols mySymbols(status);
1985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (status != U_USING_DEFAULT_WARNING) {
1986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("DecimalFormatSymbols should return U_USING_DEFAULT_WARNING.");
1987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
1988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) {
1989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("DecimalFormatSymbols does not have the right locale.", locBad.getName());
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1991103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol;
1992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) {
1993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum);
1994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString));
1995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            if (symbolString.length() == 0
1996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol
1997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol)
1998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            {
1999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum);
2000103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            }
2001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        status = U_ZERO_ERROR;
2004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale::setDefault(locDefault, status);
2005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behave the same, except for memory ownership semantics. (No
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * version of this test on Java, since Java has only one method.)
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestAdoptDecimalFormatSymbols(void) {
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
20186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "Fail: DecimalFormatSymbols constructor - %s", u_errorName(ec));
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat(" #,##0.00");
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.insert(0, (UChar)0x00A4);
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt(pat, sym, ec);
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormat constructor");
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(2350.75, str);
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "$ 2,350.75") {
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
203527f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: " + str + ", expected $ 2,350.75");
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q");
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.adoptDecimalFormatSymbols(sym);
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(2350.75, str);
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "Q 2,350.75") {
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
205227f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75");
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2(pat, sym, ec);
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormat constructor");
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
206650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym2(Locale::getUS(), ec);
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q");
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.setDecimalFormatSymbols(sym2);
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.format(2350.75, str);
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "Q 2,350.75") {
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
208027f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75");
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPerMill() {
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt(ctou("###.###\\u2030"), ec);
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("DecimalFormat ct", ec)) return;
2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("0.4857 x ###.###\\u2030",
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 ctou("485.7\\u2030"), fmt.format(0.4857, str));
209150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), ec);
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m"));
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2("", sym, ec);
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.applyLocalizedPattern("###.###m", ec);
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("setup", ec)) return;
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("0.4857 x ###.###m",
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 "485.7m", fmt2.format(0.4857, str));
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generic test for patterns that should be legal/illegal.
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestIllegalPatterns() {
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test cases:
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Prefix with "-:" for illegal patterns
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Prefix with "+:" for legal patterns
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Unquoted special characters in the suffix are illegal
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "-:000.000|###",
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "+:000.000'|###'",
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; DATA[i]; ++i) {
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pat=DATA[i];
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool valid = (*pat) == '+';
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pat += 2;
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec = U_ZERO_ERROR;
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat, ec); // locale doesn't matter here
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(ec) == valid) {
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Ok: pattern \"%s\": %s",
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat, u_errorName(ec));
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
21256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            errcheckln(ec, "FAIL: pattern \"%s\" should have %s; got %s",
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat, (valid?"succeeded":"failed"),
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  u_errorName(ec));
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* KEYWORDS[] = {
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*0*/ "ref=", // <reference pattern to parse numbers>
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*1*/ "loc=", // <locale for formats>
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*2*/ "f:",   // <pattern or '-'> <number> <exp. string>
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*3*/ "fp:",  // <pattern or '-'> <number> <exp. string> <exp. number>
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*4*/ "rt:",  // <pattern or '-'> <(exp.) number> <(exp.) string>
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*5*/ "p:",   // <pattern or '-'> <string> <exp. number>
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*6*/ "perr:", // <pattern or '-'> <invalid string>
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'>
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt>
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    0
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return an integer representing the next token from this
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iterator.  The integer will be an index into the given list, or
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -1 if there are no more tokens, or -2 if the token is not on
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the list.
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t keywordIndex(const UnicodeString& tok) {
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; KEYWORDS[i]!=0; ++i) {
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tok==KEYWORDS[i]) {
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return i;
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return -1;
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a CurrencyAmount using the given NumberFormat, with
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the 'delim' character separating the number and the currency.
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void parseCurrencyAmount(const UnicodeString& str,
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                const NumberFormat& fmt,
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                UChar delim,
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                Formattable& result,
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                UErrorCode& ec) {
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString num, cur;
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = str.indexOf(delim);
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.extractBetween(0, i, num);
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.extractBetween(i+1, INT32_MAX, cur);
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable n;
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.parse(num, n, ec);
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec));
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCases() {
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TextFile reader("NumberFormatTestCases.txt", "UTF8", ec);
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
21846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Couldn't open NumberFormatTestCases.txt");
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TokenIterator tokens(&reader);
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en", "US", "");
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *ref = 0, *fmt = 0;
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *mfmt = 0;
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat, tok, mloc, str, out, where, currAmt;
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable n;
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (;;) {
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!tokens.next(tok, ec)) {
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        where = UnicodeString("(") + tokens.getLineNumber() + ") ";
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t cmd = keywordIndex(tok);
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        switch (cmd) {
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 0:
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // ref= <reference pattern>
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete ref;
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ref = new DecimalFormat(tok,
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      new DecimalFormatSymbols(Locale::getUS(), ec), ec);
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec)) {
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                dataerrln("Error constructing DecimalFormat");
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                goto error;
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 1:
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // loc= <locale>
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
221727f654740f2a26ad62a5c155af9199af9e69b889claireho            loc = Locale::createFromName(CharString().appendInvariantChars(tok, ec).data());
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 2: // f:
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 3: // fp:
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 4: // rt:
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 5: // p:
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (tok != "-") {
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                pat = tok;
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete fmt;
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec);
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (U_FAILURE(ec)) {
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec));
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ec = U_ZERO_ERROR;
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (cmd == 3) {
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (!tokens.next(tok, ec)) goto error;
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (cmd == 2 || cmd == 3 || cmd == 4) {
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // f: <pattern or '-'> <number> <exp. string>
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // fp: <pattern or '-'> <number> <exp. string> <exp. number>
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // rt: <pattern or '-'> <number> <string>
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString num;
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(num, ec)) goto error;
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(str, ec)) goto error;
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ref->parse(num, n, ec);
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "\"" + pat + "\".format(" + num + ")",
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             str, fmt->format(n, out.remove(), ec));
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("format", ec);
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (cmd == 3) { // fp:
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(num, ec)) goto error;
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ref->parse(num, n, ec);
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertSuccess("parse", ec);
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (cmd != 2) { // != f:
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Formattable m;
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    fmt->parse(str, m, ec);
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertSuccess("parse", ec);
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")",
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 n, m);
226250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // p: <pattern or '-'> <string to parse> <exp. number>
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString expstr;
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(str, ec)) goto error;
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(expstr, ec)) goto error;
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                Formattable exp, n;
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ref->parse(expstr, exp, ec);
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt->parse(str, n, ec);
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")",
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             exp, n);
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 8: // fpc:
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (tok != "-") {
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mloc = tok;
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete mfmt;
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mfmt = MeasureFormat::createCurrencyFormat(
228427f654740f2a26ad62a5c155af9199af9e69b889claireho                    Locale::createFromName(
228527f654740f2a26ad62a5c155af9199af9e69b889claireho                        CharString().appendInvariantChars(mloc, ec).data()), ec);
2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (U_FAILURE(ec)) {
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec));
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ec = U_ZERO_ERROR;
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt>
2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(str, ec)) goto error;
2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")",
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             str, mfmt->format(n, out.remove(), ec));
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("format", ec);
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                Formattable m;
2308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mfmt->parseObject(str, m, ec);
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (assertSuccess("parseCurrency", ec)) {
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")",
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 n, m);
2313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
2314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln("FAIL: source " + str);
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 6:
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // perr: <pattern or '-'> <invalid string>
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Under construction");
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 7: {
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // pat: <pattern> <exp. toPattern, or '-' or 'err'>
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString testpat;
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString exppat;
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(testpat, ec)) goto error;
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(exppat, ec)) goto error;
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool err = exppat == "err";
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool existingPat = FALSE;
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (testpat == "-") {
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid command \"pat: - err\"");
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                existingPat = TRUE;
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                testpat = pat;
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exppat == "-") exppat = testpat;
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DecimalFormat* f = 0;
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode ec2 = U_ZERO_ERROR;
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (existingPat) {
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = fmt;
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = new DecimalFormat(testpat, ec2);
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_SUCCESS(ec2)) {
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid pattern \"" + testpat +
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" was accepted");
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UnicodeString pat2;
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "\"" + testpat + "\".toPattern()",
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 exppat, f->toPattern(pat2));
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("Ok: " + where + "Invalid pattern \"" + testpat +
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Valid pattern \"" + testpat +
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!existingPat) delete f;
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } break;
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case -1:
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: " + where + "Unknown command \"" + tok + "\"");
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    goto done;
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error:
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(ec)) {
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Unexpected EOF");
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
23776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec));
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done:
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete mfmt;
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ref;
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) {
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == b.getType()) {
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return a == b;
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == Formattable::kLong) {
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kInt64) {
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getLong() == b.getLong();
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
240050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kDouble) {
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double) b.getLong();
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kInt64) {
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double)b.getInt64();
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kInt64) {
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return a.getInt64() == (int64_t)b.getLong();
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getInt64() == (int64_t)b.getDouble();
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return FALSE;
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, n, str, FALSE);
2421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, str, n);
2422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, n, str, FALSE);
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, str, n);
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n,
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               const UnicodeString& exp,
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               UErrorCode status) {
243327f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
243427f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect2(*fmt, n, exp);
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable num;
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.parse(str, num, status);
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
244627f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status));
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (equalValue(num, n)) {
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + "\" x " +
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num));
2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
245627f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL \"") + str + "\" x " +
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Formattable num;
2465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.parse(str, num, status);
2466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
2467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL: Parse failed for \"") + str + "\"");
2468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
2469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (equalValue(num, n)) {
2471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + " = " +
2472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num));
2473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
2474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL \"") + str + " = " +
2475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n,
2480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString saw;
2482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    FieldPosition pos;
2483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.format(n, saw, pos, status);
2485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (saw == exp) {
248750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln(UnicodeString("Ok   ") + toString(n) +
2488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\"");
2490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // number => string (but not the other way around: number
2492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // => string => number2, might have number2 != number):
2493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (rt) {
2494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable n2;
2495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.parse(exp, n2, status);
2496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
2497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\"");
2498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                return;
2499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString saw2;
2501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (saw2 != exp) {
2504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      " => \"" + saw2 + "\"");
2506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
250950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL ") + toString(n) +
2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n,
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString saw;
2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(n, saw, pos, status);
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (saw == exp) {
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   ") + toString(n) + " x " +
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\"");
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // number => string (but not the other way around: number
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // => string => number2, might have number2 != number):
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (rt) {
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable n2;
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(exp, n2, status);
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) {
253527f654740f2a26ad62a5c155af9199af9e69b889claireho                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status));
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString saw2;
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (saw2 != exp) {
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      " => \"" + saw2 + "\"");
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
254727f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL ") + toString(n) + " x " +
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n,
2554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                              const UnicodeString& exp, UBool rt,
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UErrorCode status) {
255627f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
255727f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(*fmt, n, exp, rt);
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale,
2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                      double value, const UnicodeString& string) {
2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat& fmt = * (DecimalFormat*) &nf;
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar DEFAULT_CURR[] = {45/*-*/,0};
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar curr[4];
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_strcpy(curr, DEFAULT_CURR);
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*locale.getLanguage() != 0) {
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ucurr_forLocale(locale.getName(), curr, 4, &ec);
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("ucurr_forLocale", ec);
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr, ec);
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("DecimalFormat::setCurrency", ec);
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr); //Deprecated variant, for coverage only
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(value, s);
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020);
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Default display of the number yields "1234.5599999999999"
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // instead of "1234.56".  Use a formatter to fix this.
258450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberFormat* f =
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat::createInstance(Locale::getUS(), ec);
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString v;
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Oops; bad formatter.  Use default op+= display.
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        v = (UnicodeString)"" + value;
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setMaximumFractionDigits(4);
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setGroupingUsed(FALSE);
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->format(value, v);
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (s == string) {
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s));
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) +
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + prettify(string));
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) {
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.toPattern(pat);
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pat == exp) {
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\"");
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\"");
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos) {
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, 0, (UnicodeString)"");
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, UChar pad) {
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, width, UnicodeString(pad));
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, const UnicodeString& pad) {
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t apos = 0, awidth = 0;
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString apadStr;
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.applyPattern(pat, status);
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = fmt.getPadPosition();
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = fmt.getFormatWidth();
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr=fmt.getPadCharacterString();
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = -1;
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = width;
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr = pad;
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (apos == pos && awidth == width && apadStr == pad) {
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString infoStr;
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pos == ILLEGAL) {
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr;
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\" pos=" + apos + infoStr);
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos +
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " width=" + awidth + " pad=" + apadStr +
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + pos + " " + width + " " + pad);
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
265059d709d503bab6e2b61931737e662dd293b40578ccornelius
265159d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale  - FIXME
265259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() {
265359d709d503bab6e2b61931737e662dd293b40578ccornelius/*
2654fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar JPY[] = {0x4A, 0x50, 0x59, 0};
2655fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar CNY[] = {0x43, 0x4E, 0x59, 0};
265659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
265759d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmt(
265859d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getUS(), status));
265959d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
266059d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Could not create number format instance.");
266159d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
266259d709d503bab6e2b61931737e662dd293b40578ccornelius    }
266359d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
266459d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\u00A51,235");
266559d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__);
266659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\uFFE51,235");
266759d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
266859d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, CNY, 1235,  "CN\\u00A51,235");
266959d709d503bab6e2b61931737e662dd293b40578ccornelius
267059d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtTW(
267159d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status));
267259d709d503bab6e2b61931737e662dd293b40578ccornelius
267359d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__);
267459d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\u00A51,235");
267559d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__);
267659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\uFFE51,235");
267759d709d503bab6e2b61931737e662dd293b40578ccornelius
267859d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtJP(
267959d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getJapan(), status));
268059d709d503bab6e2b61931737e662dd293b40578ccornelius
268159d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__);
268259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\u00A51,235");
268359d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__);
268459d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\uFFE51,235");
268559d709d503bab6e2b61931737e662dd293b40578ccornelius
268659d709d503bab6e2b61931737e662dd293b40578ccornelius    // more..
268759d709d503bab6e2b61931737e662dd293b40578ccornelius*/
268859d709d503bab6e2b61931737e662dd293b40578ccornelius}
268959d709d503bab6e2b61931737e662dd293b40578ccornelius
269059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) {
269159d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
269259d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString utext = ctou(text);
269359d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos));
269459d709d503bab6e2b61931737e662dd293b40578ccornelius    if (!ppos.getIndex()) {
269559d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Parse of ") + utext + " should have succeeded.");
269659d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
269759d709d503bab6e2b61931737e662dd293b40578ccornelius    }
269859d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
269959d709d503bab6e2b61931737e662dd293b40578ccornelius
270059d709d503bab6e2b61931737e662dd293b40578ccornelius    char theInfo[100];
270159d709d503bab6e2b61931737e662dd293b40578ccornelius    sprintf(theInfo, "For locale %s, string \"%s\", currency ",
270259d709d503bab6e2b61931737e662dd293b40578ccornelius            fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(),
270359d709d503bab6e2b61931737e662dd293b40578ccornelius            text);
270459d709d503bab6e2b61931737e662dd293b40578ccornelius    u_austrcpy(theInfo+uprv_strlen(theInfo), currency);
270559d709d503bab6e2b61931737e662dd293b40578ccornelius
270659d709d503bab6e2b61931737e662dd293b40578ccornelius    char theOperation[100];
270759d709d503bab6e2b61931737e662dd293b40578ccornelius
270859d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
270959d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check amount:");
271059d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue(theOperation, amount ==  currencyAmount->getNumber().getDouble(status));
271159d709d503bab6e2b61931737e662dd293b40578ccornelius
271259d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
271359d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check currency:");
271459d709d503bab6e2b61931737e662dd293b40578ccornelius    assertEquals(theOperation, currency, currencyAmount->getISOCurrency());
271559d709d503bab6e2b61931737e662dd293b40578ccornelius}
271659d709d503bab6e2b61931737e662dd293b40578ccornelius
271759d709d503bab6e2b61931737e662dd293b40578ccornelius
2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){
2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* localeID = "pt_PT@currency=PTE";
2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc(localeID);
2721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2722c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0Esc."));
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status);
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
27266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status));
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1150.50, s);
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(s!=expected){
273150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL: Expected: ")+expected
273250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                + UnicodeString(" Got: ") + s
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost()
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2743103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32NumberTest::testLocales(this);
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2746b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale loc("en_US@compat=host");
2747b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (UNumberFormatStyle k = UNUM_DECIMAL;
2748b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho         k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) {
2749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
2750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status));
2751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (!NumberFormat::isStyleSupported(k)) {
2752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (status != U_UNSUPPORTED_ERROR) {
2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL: expected style %d to be unsupported - %s",
2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
2756b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (full.isNull() || U_FAILURE(status)) {
2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("FAIL: Can't create number instance of style %d for host - %s",
2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString result1;
2764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable number(10.00);
2765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->format(number, result1, status);
2766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't format for host");
2768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable formattable;
2771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->parse(result1, formattable, status);
2772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't parse for host");
2774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone()
2780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *full = NumberFormat::createInstance(loc, status);
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL || U_FAILURE(status)) {
27916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status));
2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: format failure.");
2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat()
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test is here to increase code coverage.
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *cloneObj;
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable toFormat, result;
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0};
2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale  saveDefaultLocale = Locale::getDefault();
2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( Locale::getUK(), status );
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("couldn't set default Locale!");
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status);
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( saveDefaultLocale, status );
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
28306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Status %s", u_errorName(status));
2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj = (MeasureFormat *)measureObj->clone();
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cloneObj == NULL) {
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone doesn't work");
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status));
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->format(toFormat, str, status);
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->parseObject(str, result, status);
2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->format(toFormat, str, status);
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->parseObject(str, result, status);
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*measureObj != *cloneObj) {
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Cloned object is not equal to the original object");
2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete measureObj;
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cloneObj;
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_USELESS_COLLATOR_ERROR;
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (MeasureFormat::createCurrencyFormat(status) != NULL) {
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("createCurrencyFormat should have returned NULL.");
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() {
2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
28756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int roundingIncrements[]={1, 2, 5, 20, 50, 100};
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int testValues[]={0, 300};
2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j=0; j<2; j++) {
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) {
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df->setRoundingMode((DecimalFormat::ERoundingMode)mode);
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int increment=0; increment<6; increment++) {
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double base=testValues[j];
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double rInc=roundingIncrements[increment];
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                rInc=1.000000000/rInc;
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2894c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    delete df;
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2897103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() {
2898103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
2899103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    struct {
2900103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString  pattern;
2901103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        double        testCase;
2902103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString expected;
2903103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } tests[] = {
2904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" },
2905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"#50",    1230,  (UnicodeString)"1250" }
2906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
2907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t numOfTests = (sizeof(tests)/sizeof(tests[0]));
2908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString result;
2909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_FAILURE(status)) {
2912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
2914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (int32_t i = 0; i < numOfTests; i++) {
2917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        result.remove();
2918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->applyPattern(tests[i].pattern, status);
2920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(status)) {
2921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status));
2922103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2923103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2924103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->format(tests[i].testCase, result);
2925103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2926103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (result != tests[i].expected) {
2927103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected);
2928103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2929103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete df;
2932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
2933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) {
2935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->setRoundingIncrement(increment);
2936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double lastParsed=INT32_MIN; //Intger.MIN_VALUE
2937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i=-iterations; i<=iterations;i++) {
2938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double iValue=base+(increment*(i*0.1));
2939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double smallIncrement=0.00000001;
2940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (iValue!=0) {
2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            smallIncrement*=iValue;
2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //we not only test the value, but some values in a small range around it
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue-smallIncrement, lastParsed);
2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue, lastParsed);
2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue+smallIncrement, lastParsed);
2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) {
2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formattedDecimal;
2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double parsed;
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable result;
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->format(iValue, formattedDecimal, status);
2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error formatting number.");
2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->parse(formattedDecimal, result, status);
2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error parsing number.");
2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parsed=result.getDouble();
2968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (lastParsed>parsed) {
2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Rounding wrong direction! %d > %d", lastParsed, parsed);
2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return lastParsed;
2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2976c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() {
2977c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2978c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
2979c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
2980c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormat df(UnicodeString("0"), US, status);
2981c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0)");
298250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test zero multiplier
2984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
2985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    int32_t mult = df.getMultiplier();
2986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(0);
2987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != mult) {
2988c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(0) did not ignore its zero input");
2989c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
299050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test negative multiplier
299250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-1);
2994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != -1) {
2995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(-1) ignored its negative input");
2996c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        return;
2997c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
299850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2999c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1122.123", -1122.123);
3000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1122.123", 1122.123);
3001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1.2", -1.2);
3002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1.2", 1.2);
3003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
300450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // Note:  the tests with the final parameter of FALSE will not round trip.
300550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The initial numeric value will format correctly, after the multiplier.
300650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        Parsing the formatted text will be out-of-range for an int64, however.
300750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The expect() function could be modified to detect this and fall back
300850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        to looking at the decimal parsed value, but it doesn't.
300950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN,    "9223372036854775808", FALSE);
301050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN+1,  "9223372036854775807");
301150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)-123,                  "123");
301250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)123,                  "-123");
3013c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, U_INT64_MAX-1, "-9223372036854775806");
301450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MAX,   "-9223372036854775807");
3015c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3016c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-2);
3017c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806");
301850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2),   "-9223372036854775808");
301950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE);
3020c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3021c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-7);
302250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE);
302350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7),   "9223372036854775807");
3024c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800");
3025c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported
3027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // (right now the big numbers get turned into doubles and lose tons of accuracy)
3028c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX));
3029c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1));
3030c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2)));
3031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2)));
3032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it
3034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}
3039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct {
3041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const char * stringToParse;
3042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          parsedPos;
3043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          errorIndex;
3044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        lenient;
3045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem;
3046c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
304750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() {
3049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the data are:
3050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the string to be parsed, parsed position, parsed error index
3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const TestSpaceParsingItem DATA[] = {
3052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // TOTO: Update the following TODOs, some may be handled now
3053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, FALSE},
3054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, FALSE},
3055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, FALSE},
3056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$ 124 ",       5, -1, FALSE}, // TODO: need to handle space correctly
3057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly
3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        0,  0, FALSE}, // TODO: need to handle space correctly
3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           0,  3, FALSE}, // TODO: need to handle space correctly
3062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // {"124 $",       5, -1, FALSE}, // TODO: OK or not, need currency spacing rule
3063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          0,  3, FALSE},
3064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, TRUE},
3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, TRUE},
3066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, TRUE},
3067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         5, -1, TRUE},
3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   5, -1, TRUE},
3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        6, -1, TRUE},
3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124$",         4, -1, TRUE}, // TODO: need to handle trailing currency correctly
3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           3, -1, TRUE},
3072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124 $",        5, -1, TRUE}, // TODO: OK or not, need currency spacing rule
3073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          4, -1, TRUE},
3074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale locale("en_US");
3077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status);
3078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete foo;
3081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ParsePosition parsePosition(0);
3085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse);
3086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int parsedPosition = DATA[i].parsedPos;
3087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int errorIndex = DATA[i].errorIndex;
3088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        foo->setLenient(DATA[i].lenient);
3089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        foo->parse(stringToBeParsed, result, parsePosition);
3091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getIndex() != parsedPosition ||
3092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            parsePosition.getErrorIndex() != errorIndex) {
3093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")");
3094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getErrorIndex() == -1 &&
309650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            result.getType() == Formattable::kLong &&
3097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != 124) {
3098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong());
3099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete foo;
3102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/**
3105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword.
3106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */
3107103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3108103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *localeName;
3109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double      value;
3110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UBool        isRBNF;
3111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *expectedResult;
3112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem;
3113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() {
3115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem DATA[] = {
3117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" },
3118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" },
3119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" },
312059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" },
3121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35
3122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ar_MA", 1234.567, FALSE, "1.234,567" },
3123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" },
3125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" },
3126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35
3127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" },
312954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" },
3130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { NULL, 0, FALSE, NULL }
3131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode ec;
313427f654740f2a26ad62a5c155af9199af9e69b889claireho
3135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem *item;
3136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (item = DATA; item->localeName != NULL; item++) {
3137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        ec = U_ZERO_ERROR;
3138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale loc = Locale::createFromName(item->localeName);
313950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3140fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *origFmt = NumberFormat::createInstance(loc,ec);
3141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(ec)) {
3142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec));
3143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            continue;
3144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3145fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // Clone to test ticket #10682
3146fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *fmt = (NumberFormat *) origFmt->clone();
3147fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        delete origFmt;
3148fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
3149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (item->isRBNF) {
3151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        } else {
3153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt;
3156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Test bogus keyword value
3160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    ec = U_ZERO_ERROR;
3161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Locale loc4 = Locale::createFromName("en_US@numbers=foobar");
3162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec);
3163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if ( ec != U_UNSUPPORTED_ERROR ) {
3164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR");
3165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt4;
3166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
316827f654740f2a26ad62a5c155af9199af9e69b889claireho    ec = U_ZERO_ERROR;
316950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns = NumberingSystem::createInstance(ec);
317050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
317150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec));
317250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
317350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
317427f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( ns != NULL ) {
317527f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getDynamicClassID();
317627f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getStaticClassID();
317727f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
317827f654740f2a26ad62a5c155af9199af9e69b889claireho        errln("FAIL: getInstance() returned NULL.");
317927f654740f2a26ad62a5c155af9199af9e69b889claireho    }
318050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns1 = new NumberingSystem(*ns);
318250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (ns1 == NULL) {
318350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("FAIL: NumberSystem copy constructor returned NULL.");
318450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
318550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns1;
318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns;
3188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
319250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() {
3194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][6] = {
3195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the fields in the following test are:
319650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
319750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // currency pattern (with negative pattern),
3198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency number to be formatted,
3199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency symbol name, such as "$" for USD,
3200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency ISO name, such as "USD",
3201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using plural name, such as "US dollars".
3202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for US locale
320350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"},
320450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"},
320559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"},
3206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for CHINA locale
3207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"},
3208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"},
3209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"}
3210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0};
3213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString doubleCurrencyStr(doubleCurrencySign);
3214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0};
3215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString tripleCurrencyStr(tripleCurrencySign);
3216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* locale = DATA[i][0];
3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString pat = ctou(DATA[i][1]);
3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][2]);
3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status);
3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete sym;
3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j=1; j<=3; ++j) {
3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // j represents the number of currency sign in the pattern.
3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (j == 2) {
3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr);
3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            } else if (j == 3) {
3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr);
3233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status);
3236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
3237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAILED init DecimalFormat ");
3238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                delete fmt;
3239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                continue;
3240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString s;
3242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            ((NumberFormat*) fmt)->format(numberToBeFormat, s);
3243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][3] is the currency format result using a
3244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // single currency sign.
3245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // double currency sign.
3247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // triple currency sign.
3249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][j+2] is the currency format result using
3250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // 'j' number of currency sign.
3251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString currencyFormatResult = ctou(DATA[i][2+j]);
3252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (s.compare(currencyFormatResult)) {
3253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s);
3254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // mix style parsing
3256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            for (int k=3; k<=5; ++k) {
3257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][3] is the currency format result using a
3258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // single currency sign.
3259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][4] is the currency format result using
3260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // double currency sign.
3261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][5] is the currency format result using
3262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // triple currency sign.
3263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UnicodeString oneCurrencyFormat = ctou(DATA[i][k]);
3264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UErrorCode status = U_ZERO_ERROR;
3265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              Formattable parseRes;
3266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              fmt->parse(oneCurrencyFormat, parseRes, status);
3267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              if (U_FAILURE(status) ||
3268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kDouble &&
326950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                   parseRes.getDouble() != numberToBeFormat) ||
3270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kLong &&
3271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                   parseRes.getLong() != numberToBeFormat)) {
3272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " +
3273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                        i + ", " + j + ", " + k);
3274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              }
3275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete fmt;
3277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
328350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() {
3285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status);
3287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete curFmt;
3289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* formats[] = {
3292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1,234.56",  // string to be parsed
3293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1,234.56",
3294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1,234.56",
3295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1,234.56 US dollars"
3296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
329727f654740f2a26ad62a5c155af9199af9e69b889claireho    const CurrencyAmount* curramt = NULL;
3298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) {
3299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(formats[i]);
330027f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed);
3301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        curFmt->parseObject(stringToBeParsed, result, status);
3304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
330550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status));
330650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else if (result.getType() != Formattable::kObject ||
330727f654740f2a26ad62a5c155af9199af9e69b889claireho            (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL ||
330827f654740f2a26ad62a5c155af9199af9e69b889claireho            curramt->getNumber().getDouble() != 1234.56 ||
330927f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD)
331027f654740f2a26ad62a5c155af9199af9e69b889claireho        ) {
3311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number ");
331227f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getNumber().getDouble() != 1234.56) {
331327f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble());
3314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
331527f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getISOCurrency() != ISO_CURRENCY_USD) {
331627f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency());
3317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete curFmt;
3321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
332450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() {
3326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Locale.US
3327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status);
3329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString pat;
3334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UChar currency = 0x00A4;
3335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // "\xA4#,##0.00;-\xA4#,##0.00"
3336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00");
3337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormat* fmt = new DecimalFormat(pat, sym, status);
3338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete fmt;
3340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse");
3341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][2] = {
3344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
3345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // string to be parsed, the parsed result (number)
334650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1.00", "1"},
334750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1.00", "1"},
334850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1.00 US dollar", "1"},
334950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1,234.56", "1234.56"},
335050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1,234.56", "1234.56"},
335150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1,234.56 US dollar", "1234.56"},
3352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(DATA[i][0]);
3355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double parsedResult = atof(DATA[i][1]);
3356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        fmt->parse(stringToBeParsed, result, status);
3359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status) ||
3360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kDouble &&
3361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getDouble() != parsedResult) ||
3362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kLong &&
3363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != parsedResult)) {
3364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"FAIL parse: Expected " + parsedResult);
3365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete fmt;
336850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
337150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() {
3373b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
337550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
338150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
338259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"},
3383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
338459d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"},
338559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"},
338659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"},
3387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"},
3388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"},
338959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
339059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"},
339159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
339259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ru_RU", "2", "RUB", "2,00\\u00A0\\u0440\\u0443\\u0431.", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
339359d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ru_RU", "5", "RUB", "5,00\\u00A0\\u0440\\u0443\\u0431.", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"},
3394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test locale without currency information
339550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
3396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test choice format
339759d709d503bab6e2b61931737e662dd293b40578ccornelius        {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"},
3398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
3399b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3400b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
340450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (int32_t i=0; i<LENGTHOF(DATA); ++i) {
3406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      for (int32_t kIndex = 0; kIndex < LENGTHOF(currencyStyles); ++kIndex) {
3407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNumberFormatStyle k = currencyStyles[kIndex];
3408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
3414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
34166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
342027f654740f2a26ad62a5c155af9199af9e69b889claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
342750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
3430b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
343950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
3448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
345450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln((UnicodeString)"FAIL: getCurrencyFormat of locale " +
3455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      localeString + " failed roundtripping the number");
3456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
3457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble());
3458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
3459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong());
3460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
3461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
346450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() {
3470b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
347250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
3478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"},
347959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"},
3480b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"es_AR", "1", "USD", "US$1,00", "USD1,00", "1,00 d\\u00f3lar estadounidense"},
3481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"ar_EG", "1", "USD", "US$\\u00a0\\u0661\\u066b\\u0660\\u0660", "USD\\u00a0\\u0661\\u066b\\u0660\\u0660", "\\u0661\\u066b\\u0660\\u0660 \\u062f\\u0648\\u0644\\u0627\\u0631 \\u0623\\u0645\\u0631\\u064a\\u0643\\u064a"},
348259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"fa_CA", "1", "USD", "\\u200e$\\u06f1\\u066b\\u06f0\\u06f0", "\\u200eUSD\\u06f1\\u066b\\u06f0\\u06f0", "\\u200e\\u062f\\u0644\\u0627\\u0631 \\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627\\u06f1\\u066b\\u06f0\\u06f0"},
3483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"he_IL", "1", "USD", "1.00\\u00a0US$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"},
348459d709d503bab6e2b61931737e662dd293b40578ccornelius        {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"},
3485b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"},
348659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"},
3487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00 \\ubbf8\\uad6d \\ub2ec\\ub7ec"},
3488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00 \\u7c73\\u30c9\\u30eb"},
348959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00a01.00", "CNY\\u00a01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
349059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"},
349359d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"},
349459d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"},
349559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0439 \\u0440\\u0443\\u0431\\u043B\\u044C"}
3496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
350259d709d503bab6e2b61931737e662dd293b40578ccornelius    static const char* currencyStyleNames[] = {
350359d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY",
350459d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_ISO",
350559d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_PLURAL"
350659d709d503bab6e2b61931737e662dd293b40578ccornelius    };
350750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0;
3510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) {
3511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    printf("loop: %d\n", deadloop++);
3512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
351359d709d503bab6e2b61931737e662dd293b40578ccornelius    for (uint32_t i=0; i< sizeof(DATA)/sizeof(DATA[0]); ++i) {  /* i = test case #  - should be i=0*/
351459d709d503bab6e2b61931737e662dd293b40578ccornelius      for (int32_t kIndex = 2; kIndex < LENGTHOF(currencyStyles); ++kIndex) {
351559d709d503bab6e2b61931737e662dd293b40578ccornelius        UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */
3516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
352259d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("#%d NumberFormat(%s, %s) Currency=%s\n",
352359d709d503bab6e2b61931737e662dd293b40578ccornelius              i, localeString, currencyStyleNames[kIndex],
352459d709d503bab6e2b61931737e662dd293b40578ccornelius              currencyISOCode);
352559d709d503bab6e2b61931737e662dd293b40578ccornelius
3526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
35286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
3532b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
353950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
354259d709d503bab6e2b61931737e662dd293b40578ccornelius        /*
3543b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        */
3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
355350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
356259d709d503bab6e2b61931737e662dd293b40578ccornelius            logln("parse(%s)", DATA[i][j]);
3563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
356959d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] +
357059d709d503bab6e2b61931737e662dd293b40578ccornelius                      "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+".  Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]");
3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
357259d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble());
3573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
357459d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong());
3575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
357659d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)" round-trip would be: " + strBuf);
3577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
358050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
3585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() {
3590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[] = {
3591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US DOLLAR",  // case in-sensitive
3592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
3593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
3594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
3595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
3596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
359754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "A$1.00",
3598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFN1.00",
3605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ALL1.00",
3606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AMD1.00",
3607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ANG1.00",
3608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOA1.00",
3609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "ARS1.00",
3616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARS1.00",
3621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AUD1.00",
3624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AWG1.00",
3625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZN1.00",
362859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u20132002)1.00",
362959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan afghani (1927\\u20132002)1.00",
3630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghani1.00",
3631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghanis1.00",
3632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Lek1.00",
3633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek1.00",
3634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek\\u00eb1.00",
3635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dinar1.00",
3636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinar1.00",
3637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinars1.00",
3638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peseta1.00",
3639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran peseta1.00",
3640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran pesetas1.00",
364159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u20131991)1.00",
364259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u20131999)1.00",
3643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanza1.00",
364459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u20132000)1.00",
364559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanza (1977\\u20131991)1.00",
364659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanza (1995\\u20131999)1.00",
3647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanza1.00",
364859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanzas (1977\\u20131991)1.00",
364959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanzas (1995\\u20131999)1.00",
3650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanzas1.00",
365159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanza (1990\\u20132000)1.00",
365259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanzas (1990\\u20132000)1.00",
3653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austral1.00",
365459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u20131985)1.00",
3655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Peso1.00",
3656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine austral1.00",
3657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine australs1.00",
365859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine peso (1983\\u20131985)1.00",
3659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine peso1.00",
366059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine pesos (1983\\u20131985)1.00",
3661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine pesos1.00",
3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dram1.00",
3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian dram1.00",
3664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian drams1.00",
3665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Florin1.00",
3666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban florin1.00",
3667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dollar1.00",
3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollar1.00",
3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollars1.00",
3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schilling1.00",
3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schilling1.00",
3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schillings1.00",
367359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u20132006)1.00",
3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Manat1.00",
367559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manat (1993\\u20132006)1.00",
3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manat1.00",
367759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manats (1993\\u20132006)1.00",
3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manats1.00",
3679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAM1.00",
3682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BBD1.00",
3683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BDT1.00",
3684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEF1.00",
3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGL1.00",
3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BHD1.00",
3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BIF1.00",
3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BMD1.00",
3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BND1.00",
3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOB1.00",
3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRL1.00",
3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BTN1.00",
3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BWP1.00",
3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYR1.00",
3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZD1.00",
3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dollar1.00",
3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollar1.00",
3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollars1.00",
3725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dinar1.00",
3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinar1.00",
3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinars1.00",
3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Taka1.00",
3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi taka1.00",
3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi takas1.00",
3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dollar1.00",
3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollar1.00",
3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollars1.00",
373459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u20131999)1.00",
3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Ruble1.00",
373659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new ruble (1994\\u20131999)1.00",
373759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new rubles (1994\\u20131999)1.00",
3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian ruble1.00",
3739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian rubles1.00",
3740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible)1.00",
3741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial)1.00",
3742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc1.00",
3743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (convertible)1.00",
3744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (financial)1.00",
3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc1.00",
3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (convertible)1.00",
3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (financial)1.00",
3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs1.00",
3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dollar1.00",
3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollar1.00",
3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollars1.00",
3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dollar1.00",
3753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollar1.00",
3754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollars1.00",
3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultrum1.00",
3756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrum1.00",
3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrums1.00",
3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdol1.00",
3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Peso1.00",
3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdol1.00",
3761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdols1.00",
3762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian peso1.00",
3763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian pesos1.00",
3764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivianos1.00",
3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mark1.00",
376859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00",
3769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible mark1.00",
3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible marks1.00",
377159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinar (1992\\u20131994)1.00",
377259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinars (1992\\u20131994)1.00",
3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pula1.00",
3774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pula1.00",
3775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pulas1.00",
377659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzado (1989\\u20131990)1.00",
377759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzado (1986\\u20131989)1.00",
377859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u20131993)1.00",
377959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u20131986)1.00",
378059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1993\\u20131994)1.00",
3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Real1.00",
378259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzado (1989\\u20131990)1.00",
378359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzados (1989\\u20131990)1.00",
378459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzado (1986\\u20131989)1.00",
378559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzados (1986\\u20131989)1.00",
378659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1990\\u20131993)1.00",
378759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiro (1967\\u20131986)1.00",
378859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1993\\u20131994)1.00",
378959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1990\\u20131993)1.00",
379059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiros (1967\\u20131986)1.00",
379159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1993\\u20131994)1.00",
3792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian real1.00",
3793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian reals1.00",
3794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British Pound Sterling1.00",
3795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British pound sterling1.00",
379650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "British pounds sterling1.00",
3797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dollar1.00",
3798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollar1.00",
3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollars1.00",
3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Lev1.00",
3801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Lev1.00",
3802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Leva1.00",
3803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard lev1.00",
3804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard leva1.00",
3805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian lev1.00",
3806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kyat1.00",
3807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyat1.00",
3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyats1.00",
3809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Franc1.00",
3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian franc1.00",
3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian francs1.00",
3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA$1.00",
3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CAD1.00",
3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BCEAO1.00",
3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BEAC1.00",
3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA franc BCEAO1.00",
3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA franc BEAC1.00",
3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA francs BCEAO1.00",
3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA francs BEAC1.00",
3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Franc1.00",
3823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP franc1.00",
3824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP francs1.00",
3825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFPF1.00",
3826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHF1.00",
3829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLP1.00",
3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CNY1.00",
3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COP1.00",
3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CRC1.00",
3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CVE1.00",
3846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CYP1.00",
3847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZK1.00",
3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Riel1.00",
3849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riel1.00",
3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riels1.00",
3851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dollar1.00",
3852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollar1.00",
3853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollars1.00",
3854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escudo1.00",
3855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudo1.00",
3856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudos1.00",
3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dollar1.00",
3858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollar1.00",
3859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollars1.00",
3860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Peso1.00",
386127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Account (UF)1.00",
3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean peso1.00",
3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean pesos1.00",
386427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean unit of account (UF)1.00",
386527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean units of account (UF)1.00",
386627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yuan1.00",
3867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chinese yuan1.00",
3868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Peso1.00",
3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian peso1.00",
3870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian pesos1.00",
3871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian Franc1.00",
3872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian franc1.00",
3873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian francs1.00",
3874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Franc1.00",
3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese franc1.00",
3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese francs1.00",
3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f3n1.00",
3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3n1.00",
3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3ns1.00",
3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dinar1.00",
3881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kuna1.00",
3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinar1.00",
3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinars1.00",
3884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kuna1.00",
3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kunas1.00",
3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Peso1.00",
3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban peso1.00",
3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban pesos1.00",
3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Pound1.00",
3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pound1.00",
3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pounds1.00",
3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Koruna1.00",
3893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic koruna1.00",
3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic korunas1.00",
3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Koruna1.00",
3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard koruna1.00",
3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard korunas1.00",
3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJF1.00",
3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DKK1.00",
3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DOP1.00",
3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZD1.00",
3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Krone1.00",
3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish krone1.00",
3908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish kroner1.00",
3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mark1.00",
3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German mark1.00",
3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German marks1.00",
3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Franc1.00",
3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian franc1.00",
3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian francs1.00",
3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Peso1.00",
3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican peso1.00",
3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican pesos1.00",
3918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC$1.00",
3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESP1.00",
3934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ETB1.00",
3935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EUR1.00",
3936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dollar1.00",
3937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollar1.00",
3938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollars1.00",
3939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Mark1.00",
3940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German mark1.00",
3941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German marks1.00",
3942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucre1.00",
394327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Value1.00",
3944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucre1.00",
3945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucres1.00",
394627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian unit of constant value1.00",
394727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian units of constant value1.00",
3948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Pound1.00",
3949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pound1.00",
3950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pounds1.00",
3951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f3n1.00",
3952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran col\\u00f3n1.00",
3953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran colones1.00",
3954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwele1.00",
3955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean ekwele1.00",
3956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakfa1.00",
3957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfa1.00",
3958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfas1.00",
3959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroon1.00",
3960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroon1.00",
3961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroons1.00",
3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Birr1.00",
3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birr1.00",
3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birrs1.00",
3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Euro1.00",
3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Unit1.00",
3967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Unit1.00",
3968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Unit1.00",
3969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC)1.00",
3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD)1.00",
3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite unit1.00",
3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite units1.00",
3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency unit1.00",
3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency units1.00",
3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary unit1.00",
3976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary units1.00",
3977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBC)1.00",
3978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBD)1.00",
3979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBC)1.00",
3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBD)1.00",
3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJD1.00",
3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Pound1.00",
3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pound1.00",
3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pounds1.00",
3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dollar1.00",
3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollar1.00",
3993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollars1.00",
3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markka1.00",
3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markka1.00",
3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markkas1.00",
399750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "CHF1.00",
3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Franc1.00",
3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Franc1.00",
4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Franc1.00",
4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-franc1.00",
4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-francs1.00",
4003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French franc1.00",
4004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French francs1.00",
4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold franc1.00",
4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold francs1.00",
4007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GBP1.00",
4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEL1.00",
4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHS1.00",
4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNF1.00",
4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GYD1.00",
4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalasi1.00",
4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasi1.00",
4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasis1.00",
4034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Larit1.00",
4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lari1.00",
4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larit1.00",
4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larits1.00",
4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian lari1.00",
4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian laris1.00",
404059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u20132007)1.00",
4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Cedi1.00",
404259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedi (1979\\u20132007)1.00",
4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedi1.00",
404459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedis (1979\\u20132007)1.00",
4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedis1.00",
4046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Pound1.00",
4047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pound1.00",
4048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pounds1.00",
4049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachma1.00",
4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachma1.00",
4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachmas1.00",
4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetzal1.00",
4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzal1.00",
4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzals1.00",
4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Franc1.00",
4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syli1.00",
4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean franc1.00",
4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean francs1.00",
4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean syli1.00",
4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean sylis1.00",
4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Peso1.00",
4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau peso1.00",
4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau pesos1.00",
4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dollar1.00",
4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollar1.00",
4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollars1.00",
4069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK$1.00",
4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HKD1.00",
4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HUF1.00",
4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourde1.00",
4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourde1.00",
4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourdes1.00",
4082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempira1.00",
4083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempira1.00",
4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempiras1.00",
4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dollar1.00",
4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollar1.00",
4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollars1.00",
4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forint1.00",
4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forint1.00",
4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forints1.00",
4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IDR1.00",
4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IEP1.00",
4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILS1.00",
4096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "INR1.00",
4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQD1.00",
4098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IRR1.00",
4099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ITL1.00",
4102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kr\\u00f3na1.00",
4103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3na1.00",
4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3nur1.00",
4105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupee1.00",
4106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupee1.00",
4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupees1.00",
4108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupiah1.00",
4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiah1.00",
4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiahs1.00",
4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Rial1.00",
4112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rial1.00",
4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rials1.00",
4114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dinar1.00",
4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinar1.00",
4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinars1.00",
4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Pound1.00",
4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pound1.00",
4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pounds1.00",
4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Pound1.00",
4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli new sheqel1.00",
4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pound1.00",
4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pounds1.00",
4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lira1.00",
4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian lira1.00",
4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian liras1.00",
4127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JMD1.00",
4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JOD1.00",
4129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JPY1.00",
4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dollar1.00",
4131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollar1.00",
4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollars1.00",
4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Yen1.00",
4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese yen1.00",
4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dinar1.00",
4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinar1.00",
4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinars1.00",
4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KES1.00",
4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KGS1.00",
4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KHR1.00",
4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KMF1.00",
4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KRW1.00",
4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KWD1.00",
4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZT1.00",
414927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Tenge1.00",
415027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenge1.00",
415127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenges1.00",
4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shilling1.00",
4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shilling1.00",
4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shillings1.00",
4155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dinar1.00",
4156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinar1.00",
4157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinars1.00",
4158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani Som1.00",
4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani som1.00",
4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani soms1.00",
4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LBP1.00",
4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LKR1.00",
4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LSL1.00",
4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LYD1.00",
4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Kip1.00",
4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kip1.00",
4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kips1.00",
4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lats1.00",
4188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Ruble1.00",
4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian lats1.00",
4190103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "Latvian lati1.00",
4191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian ruble1.00",
4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian rubles1.00",
4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Pound1.00",
4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pound1.00",
4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pounds1.00",
4196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Loti1.00",
4197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho loti1.00",
4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho lotis1.00",
4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dollar1.00",
4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollar1.00",
4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollars1.00",
4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dinar1.00",
4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinar1.00",
4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinars1.00",
4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Litas1.00",
4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talonas1.00",
4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litas1.00",
4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litai1.00",
4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonas1.00",
4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonases1.00",
4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Franc1.00",
4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Franc1.00",
4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Franc1.00",
4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible franc1.00",
4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible francs1.00",
4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial franc1.00",
4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial francs1.00",
4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian franc1.00",
4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian francs1.00",
4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX$1.00",
4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MKD1.00",
4232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MNT1.00",
4237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MRO1.00",
4240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTL1.00",
4241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MWK1.00",
4248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXN1.00",
4249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MYR1.00",
4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZM1.00",
4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZN1.00",
4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Pataca1.00",
4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese pataca1.00",
4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese patacas1.00",
4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Denar1.00",
4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denar1.00",
4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denari1.00",
4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariaries1.00",
4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Franc1.00",
4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy franc1.00",
4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy francs1.00",
4270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwachas1.00",
4273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgit1.00",
4274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgit1.00",
4275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgits1.00",
4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiyaa1.00",
4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaa1.00",
4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaas1.00",
4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Franc1.00",
4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian franc1.00",
4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian francs1.00",
4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lira1.00",
4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Pound1.00",
4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pound1.00",
4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pounds1.00",
4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiya1.00",
4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiya1.00",
4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiyas1.00",
4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupee1.00",
4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupee1.00",
4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupees1.00",
4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Peso1.00",
429559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u20131992)1.00",
429627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Unit1.00",
4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican peso1.00",
4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican pesos1.00",
429959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver peso (1861\\u20131992)1.00",
430059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver pesos (1861\\u20131992)1.00",
430127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment unit1.00",
430227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment units1.00",
4303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Leu1.00",
4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan leu1.00",
4305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan lei1.00",
4306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugrik1.00",
4307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugrik1.00",
4308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugriks1.00",
4309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirham1.00",
4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Franc1.00",
4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirham1.00",
4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirhams1.00",
4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan franc1.00",
4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan francs1.00",
4315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escudo1.00",
4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metical1.00",
4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudo1.00",
4318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudos1.00",
4319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican metical1.00",
4320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican meticals1.00",
432159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kyat1.00",
432259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyat1.00",
432359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyats1.00",
4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAD1.00",
4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NGN1.00",
4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIC1.00",
4327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NOK1.00",
4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NPR1.00",
4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT$1.00",
4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZ$1.00",
4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZD1.00",
4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dollar1.00",
4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollar1.00",
4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollars1.00",
4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupee1.00",
4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupee1.00",
4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupees1.00",
4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilder1.00",
4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilder1.00",
4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilders1.00",
4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilder1.00",
4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilder1.00",
4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilders1.00",
4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqel1.00",
4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqels1.00",
4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dollar1.00",
4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollar1.00",
4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollars1.00",
435327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdoba1.00",
435459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00",
435527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdoba1.00",
435627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdobas1.00",
435759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00",
435859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00",
4359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Naira1.00",
4360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian naira1.00",
4361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian nairas1.00",
4362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Won1.00",
4363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Krone1.00",
4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian krone1.00",
4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian kroner1.00",
4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OMR1.00",
436959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican Metical (1980\\u20132006)1.00",
437059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican metical (1980\\u20132006)1.00",
437159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican meticals (1980\\u20132006)1.00",
437259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Lei (1952\\u20132006)1.00",
437359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u20132006)1.00",
437459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian leu (1952\\u20132006)1.00",
437559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u20132006)1.00",
437659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinar (2002\\u20132006)1.00",
437759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinars (2002\\u20132006)1.00",
437859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u20132007)1.00",
437959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u20131998)1.00",
438059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinar (1992\\u20132007)1.00",
438159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinars (1992\\u20132007)1.00",
438259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pound (1957\\u20131998)1.00",
438359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pounds (1957\\u20131998)1.00",
438459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
438559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
4386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Rial1.00",
4387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rial1.00",
4388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rials1.00",
4389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PHP1.00",
4400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PKR1.00",
4401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLN1.00",
4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PYG1.00",
4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupee1.00",
4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupee1.00",
4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupees1.00",
4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balboa1.00",
4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboa1.00",
4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboas1.00",
4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kina1.00",
4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guarani1.00",
4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guarani1.00",
4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guaranis1.00",
4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Inti1.00",
4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Nuevo Sol1.00",
442359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u20131965)1.00",
4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian inti1.00",
4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian intis1.00",
4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevo sol1.00",
4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevos soles1.00",
442859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian sol (1863\\u20131965)1.00",
442959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian soles (1863\\u20131965)1.00",
4430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Peso1.00",
4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine peso1.00",
4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine pesos1.00",
4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
4434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
443559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u20131995)1.00",
4436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zloty1.00",
4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys1.00",
4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty (PLZ)1.00",
4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty1.00",
4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys (PLZ)1.00",
4441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escudo1.00",
4442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escudo1.00",
4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudo1.00",
4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudos1.00",
4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudo1.00",
4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudos1.00",
4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QAR1.00",
4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Rial1.00",
4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rial1.00",
4451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rials1.00",
4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN\\u00a51.00",
4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dollar1.00",
4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollar1.00",
4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollars1.00",
4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Leu1.00",
4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian lei1.00",
4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian leu1.00",
447559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u20131998)1.00",
4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Ruble1.00",
447759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian ruble (1991\\u20131998)1.00",
4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian ruble1.00",
447959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian rubles (1991\\u20131998)1.00",
4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian rubles1.00",
4481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Franc1.00",
4482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan franc1.00",
4483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan francs1.00",
4484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SAR1.00",
4485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SBD1.00",
4486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SCR1.00",
4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SEK1.00",
4494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SGD1.00",
4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SKK1.00",
4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SOS1.00",
4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRG1.00",
4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "STD1.00",
4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SYP1.00",
4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZL1.00",
4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saint Helena Pound1.00",
4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saint Helena pound1.00",
4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saint Helena pounds1.00",
4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobra1.00",
4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobra1.00",
4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobras1.00",
4519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riyal1.00",
4520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyal1.00",
4521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyals1.00",
4522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dinar1.00",
4523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinar1.00",
4524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinars1.00",
4525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupee1.00",
4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupee1.00",
4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupees1.00",
4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leone1.00",
4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leone1.00",
4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leones1.00",
4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dollar1.00",
4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollar1.00",
4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollars1.00",
4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Koruna1.00",
4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak koruna1.00",
4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak korunas1.00",
4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tolar1.00",
4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolar1.00",
4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolars1.00",
4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dollar1.00",
4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollar1.00",
4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollars1.00",
4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shilling1.00",
4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shilling1.00",
4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shillings1.00",
4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial)1.00",
4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand1.00",
4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand (financial)1.00",
4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rands (financial)1.00",
4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Won1.00",
4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Rouble1.00",
4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet rouble1.00",
4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet roubles1.00",
4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account)1.00",
4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account)1.00",
4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta1.00",
4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (A account)1.00",
4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (convertible account)1.00",
4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta1.00",
4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (A account)1.00",
4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (convertible account)1.00",
4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas1.00",
4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Rights1.00",
457027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupee1.00",
457127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupee1.00",
457227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupees1.00",
4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Pound1.00",
4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pound1.00",
4575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pounds1.00",
4576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dollar1.00",
4577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollar1.00",
4578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollars1.00",
457927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilder1.00",
458027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilder1.00",
458127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilders1.00",
4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangeni1.00",
4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi lilangeni1.00",
4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi emalangeni1.00",
4585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Krona1.00",
4586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish krona1.00",
4587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish kronor1.00",
4588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Franc1.00",
4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss franc1.00",
4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss francs1.00",
4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Pound1.00",
4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pound1.00",
4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pounds1.00",
4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "THB1.00",
4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TOP1.00",
4604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRL1.00",
4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TTD1.00",
4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TWD1.00",
4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZS1.00",
4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dollar1.00",
4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollar1.00",
4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollars1.00",
4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Ruble1.00",
4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somoni1.00",
4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani ruble1.00",
4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani rubles1.00",
4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somoni1.00",
4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somonis1.00",
4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shilling1.00",
4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shilling1.00",
4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shillings1.00",
4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Baht1.00",
4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escudo1.00",
4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudo1.00",
4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudos1.00",
4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u02bbanga1.00",
4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Trinidad and Tobago Dollar1.00",
4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Trinidad and Tobago dollar1.00",
4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Trinidad and Tobago dollars1.00",
4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dinar1.00",
4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinar1.00",
4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinars1.00",
4641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish lira1.00",
4644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Manat1.00",
4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirham1.00",
4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirhams1.00",
4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAH1.00",
4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGX1.00",
4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day)1.00",
4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day)1.00",
4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar1.00",
4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (next day)1.00",
4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (same day)1.00",
4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (next day)1.00",
4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (same day)1.00",
4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYU1.00",
4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
467659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u20131987)1.00",
4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shilling1.00",
467859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shilling (1966\\u20131987)1.00",
4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shilling1.00",
468059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shillings (1966\\u20131987)1.00",
4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shillings1.00",
4682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvnia1.00",
4683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanets1.00",
4684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnia1.00",
4685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnias1.00",
4686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovanets1.00",
4687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovantsiv1.00",
468827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Unit1.00",
4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirham1.00",
469027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currency1.00",
469159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan Peso (1975\\u20131993)1.00",
4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan Peso1.00",
469327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan Peso (Indexed Units)1.00",
469459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan peso (1975\\u20131993)1.00",
469527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan peso (indexed units)1.00",
4696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan peso1.00",
469759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan pesos (1975\\u20131993)1.00",
469827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan pesos (indexed units)1.00",
4699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan pesos1.00",
4700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan Som1.00",
4701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan som1.00",
4702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan som1.00",
4703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEB1.00",
4704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEF1.00",
4705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VND1.00",
4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VUV1.00",
4707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vatu1.00",
4708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatu1.00",
4709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatus1.00",
4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar1.00",
471159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00",
4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvar1.00",
4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvars1.00",
471459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvar (1871\\u20132008)1.00",
471559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvars (1871\\u20132008)1.00",
4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Dong1.00",
4717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Euro1.00",
4720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Franc1.00",
4721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euro1.00",
4722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euros1.00",
4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR franc1.00",
4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR francs1.00",
4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan Tala1.00",
4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XCD1.00",
4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPF1.00",
4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YER1.00",
4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dinar1.00",
4776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Rial1.00",
4777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinar1.00",
4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinars1.00",
4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rial1.00",
4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rials1.00",
478159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Convertible Dinar (1990\\u20131992)1.00",
478259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u20131990)1.00",
478359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian New Dinar (1994\\u20132002)1.00",
478459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinar (1990\\u20131992)1.00",
478559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinars (1990\\u20131992)1.00",
478659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinar (1966\\u20131990)1.00",
478759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinars (1966\\u20131990)1.00",
478859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinar (1994\\u20132002)1.00",
478959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinars (1994\\u20132002)1.00",
4790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAR1.00",
4793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZWD1.00",
480059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u20131998)1.00",
480159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean Zaire (1971\\u20131993)1.00",
480259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaire (1993\\u20131998)1.00",
480359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaires (1993\\u20131998)1.00",
480459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaire (1971\\u20131993)1.00",
480559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaires (1971\\u20131993)1.00",
4806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwacha1.00",
4807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwacha1.00",
4808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwachas1.00",
480959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u20132008)1.00",
481059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollar (1980\\u20132008)1.00",
481159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollars (1980\\u20132008)1.00",
4812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euro1.00",
4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euros1.00",
481459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish lira (1922\\u20132005)1.00",
4815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "special drawing rights1.00",
481627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value unit1.00",
481727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value units1.00",
4818b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "unknown currency1.00",
4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a31.00",
4820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a51.00",
4821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u0e3f1.00",
4822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ab1.00",
4823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20aa1.00",
4824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ac1.00",
48258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius        "Rs.1.00",          // Google Patch: Indian Rupee symbol \u20B9 -> "Rs."
4826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        //
4827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following has extra text, should be parsed correctly too
4828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00 random",
4829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00 random",
4830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
4831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
4832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
4833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
483459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Afghan Afghanis (1927\\u20131992) random",
4835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghanis random",
4836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian Lek random",
4837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian lek random",
483850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "1.00 Albanian lek\\u00eb random",
4839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian Dinar random",
4840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinar random",
4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinars random",
4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran Peseta random",
4843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran peseta random",
4844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran pesetas random",
484559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Kwanza (1977\\u20131990) random",
484659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random",
4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan Kwanza random",
484859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan New Kwanza (1990\\u20132000) random",
484959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanza (1977\\u20131991) random",
485059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanza (1995\\u20131999) random",
4851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanza random",
485259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanzas (1977\\u20131991) random",
485359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanzas (1995\\u20131999) random",
4854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanzas random",
485559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanza (1990\\u20132000) random",
485659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanzas (1990\\u20132000) random",
4857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Austral random",
485859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine Peso (1983\\u20131985) random",
4859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Peso random",
4860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine austral random",
4861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine australs random",
486259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine peso (1983\\u20131985) random",
4863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine peso random",
486459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine pesos (1983\\u20131985) random",
4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine pesos random",
4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian Dram random",
4867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian dram random",
4868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian drams random",
4869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban Florin random",
4870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban florin random",
4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian Dollar random",
4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollar random",
4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollars random",
4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian Schilling random",
4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schilling random",
4876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schillings random",
487759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani Manat (1993\\u20132006) random",
4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani Manat random",
487959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manat (1993\\u20132006) random",
4880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manat random",
488159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manats (1993\\u20132006) random",
4882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manats random",
4883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian Dollar random",
4884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollar random",
4885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollars random",
4886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini Dinar random",
4887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinar random",
4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinars random",
4889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi Taka random",
4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi taka random",
4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi takas random",
4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian Dollar random",
4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollar random",
4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollars random",
489559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian New Ruble (1994\\u20131999) random",
4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian Ruble random",
489759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new ruble (1994\\u20131999) random",
489859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new rubles (1994\\u20131999) random",
4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian ruble random",
4900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian rubles random",
4901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (convertible) random",
4902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (financial) random",
4903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc random",
4904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (convertible) random",
4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (financial) random",
4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc random",
4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (convertible) random",
4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (financial) random",
4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs random",
4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize Dollar random",
4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollar random",
4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollars random",
4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan Dollar random",
4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollar random",
4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollars random",
4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese Ngultrum random",
4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrum random",
4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrums random",
4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Mvdol random",
4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Peso random",
4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdol random",
4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdols random",
4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian peso random",
4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian pesos random",
4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Bolivianos random",
4928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina Convertible Mark random",
492959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random",
4930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible mark random",
4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible marks random",
493259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random",
493359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random",
4934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan Pula random",
4935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pula random",
4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pulas random",
493759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzado (1989\\u20131990) random",
493859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzado (1986\\u20131989) random",
493959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1990\\u20131993) random",
494059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzeiro (1967\\u20131986) random",
494159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1993\\u20131994) random",
4942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian Real random",
494359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzado (1989\\u20131990) random",
494459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzados (1989\\u20131990) random",
494559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzado (1986\\u20131989) random",
494659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzados (1986\\u20131989) random",
494759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1990\\u20131993) random",
494859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiro (1967\\u20131986) random",
494959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1993\\u20131994) random",
495059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1990\\u20131993) random",
495159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiros (1967\\u20131986) random",
495259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1993\\u20131994) random",
4953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian real random",
4954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian reals random",
4955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 British Pound Sterling random",
4956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 British pound sterling random",
495750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "1.00 British pounds sterling random",
4958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei Dollar random",
4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollar random",
4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollars random",
4961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Hard Lev random",
4962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Lev random",
4963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Leva random",
4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard lev random",
4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard leva random",
4966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian lev random",
4967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese Kyat random",
4968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyat random",
4969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyats random",
4970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian Franc random",
4971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian franc random",
4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian francs random",
4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian Riel random",
4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riel random",
4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riels random",
4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian Dollar random",
4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollar random",
4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollars random",
4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean Escudo random",
4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudo random",
4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudos random",
4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands Dollar random",
4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollar random",
4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollars random",
4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean Peso random",
498627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean Unit of Account (UF) random",
4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean peso random",
4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean pesos random",
498927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean unit of account (UF) random",
499027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean units of account (UF) random",
499127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chinese Yuan random",
4992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chinese yuan random",
4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian Peso random",
4994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian peso random",
4995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian pesos random",
4996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian Franc random",
4997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian franc random",
4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian francs random",
4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese Franc Congolais random",
5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese franc Congolais random",
5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese francs Congolais random",
5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican Col\\u00f3n random",
5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3n random",
5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3ns random",
5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Dinar random",
5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Kuna random",
5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinar random",
5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinars random",
5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kuna random",
5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kunas random",
5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban Peso random",
5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban peso random",
5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban pesos random",
5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot Pound random",
5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pound random",
5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pounds random",
5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic Koruna random",
5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic koruna random",
5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic korunas random",
5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak Hard Koruna random",
5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard koruna random",
5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard korunas random",
5023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish Krone random",
5024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish krone random",
5025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish kroner random",
5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German Mark random",
5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German mark random",
5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German marks random",
5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian Franc random",
5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian franc random",
5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian francs random",
5032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican Peso random",
5033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican peso random",
5034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican pesos random",
5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean Dollar random",
5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollar random",
5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollars random",
5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German Mark random",
5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German mark random",
5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German marks random",
5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian Sucre random",
504227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian Unit of Constant Value random",
5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucre random",
5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucres random",
504527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian unit of constant value random",
504627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian units of constant value random",
5047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian Pound random",
5048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pound random",
5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pounds random",
5050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran Col\\u00f3n random",
5051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran col\\u00f3n random",
5052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran colones random",
5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean Ekwele random",
5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean ekwele random",
5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean Nakfa random",
5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfa random",
5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfas random",
5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian Kroon random",
5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroon random",
5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroons random",
5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian Birr random",
5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birr random",
5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birrs random",
5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Composite Unit random",
5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Currency Unit random",
5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Monetary Unit random",
5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBC) random",
5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBD) random",
5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite unit random",
5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite units random",
5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency unit random",
5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency units random",
5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary unit random",
5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary units random",
5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBC) random",
5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBD) random",
5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBC) random",
5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBD) random",
5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands Pound random",
5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pound random",
5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pounds random",
5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian Dollar random",
5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollar random",
5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollars random",
5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish Markka random",
5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markka random",
5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markkas random",
5088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Franc random",
5089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Gold Franc random",
5090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-Franc random",
5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-franc random",
5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-francs random",
5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French franc random",
5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French francs random",
5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold franc random",
5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold francs random",
5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian Dalasi random",
5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasi random",
5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasis random",
5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Kupon Larit random",
5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Lari random",
5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larit random",
5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larits random",
5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian lari random",
5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian laris random",
510659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian Cedi (1979\\u20132007) random",
5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian Cedi random",
510859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedi (1979\\u20132007) random",
5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedi random",
511059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedis (1979\\u20132007) random",
5111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedis random",
5112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar Pound random",
5113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pound random",
5114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pounds random",
5115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek Drachma random",
5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachma random",
5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachmas random",
5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan Quetzal random",
5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzal random",
5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzals random",
5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Franc random",
5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Syli random",
5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean franc random",
5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean francs random",
5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean syli random",
5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean sylis random",
5129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau Peso random",
5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau peso random",
5131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau pesos random",
5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese Dollar random",
5133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollar random",
5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollars random",
5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian Gourde random",
5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourde random",
5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourdes random",
5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran Lempira random",
5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempira random",
5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempiras random",
5141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong Dollar random",
5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollar random",
5143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollars random",
5144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian Forint random",
5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forint random",
5146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forints random",
5147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic Kr\\u00f3na random",
5148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3na random",
5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3nur random",
5150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian Rupee random",
5151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupee random",
5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupees random",
5153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian Rupiah random",
5154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiah random",
5155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiahs random",
5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian Rial random",
5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rial random",
5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rials random",
5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi Dinar random",
5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinar random",
5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinars random",
5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish Pound random",
5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pound random",
5164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pounds random",
5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli Pound random",
5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqel random",
5167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pound random",
5168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pounds random",
5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian Lira random",
5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian lira random",
5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian liras random",
5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican Dollar random",
5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollar random",
5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollars random",
5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese Yen random",
5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese yen random",
5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian Dinar random",
5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinar random",
5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinars random",
518027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani Tenge random",
518127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenge random",
518227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenges random",
5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan Shilling random",
5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shilling random",
5185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shillings random",
5186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti Dinar random",
5187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinar random",
5188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinars random",
5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani Som random",
5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani som random",
5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani soms random",
5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian Kip random",
5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kip random",
5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kips random",
5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Lats random",
5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Ruble random",
5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lats random",
5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lati random",
5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian ruble random",
5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian rubles random",
5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese Pound random",
5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pound random",
5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pounds random",
5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho Loti random",
5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho loti random",
5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho lotis random",
5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian Dollar random",
5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollar random",
5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollars random",
5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan Dinar random",
5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinar random",
5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinars random",
5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Litas random",
5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Talonas random",
5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litas random",
5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litai random",
5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonas random",
5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonases random",
5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Convertible Franc random",
5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg Financial Franc random",
5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Franc random",
5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible franc random",
5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible francs random",
5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial franc random",
5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial francs random",
5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian franc random",
5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian francs random",
5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese Pataca random",
5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese pataca random",
5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese patacas random",
5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian Denar random",
5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denar random",
5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denari random",
5234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariaries random",
5235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Franc random",
5238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy franc random",
5239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy francs random",
5240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwachas random",
5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian Ringgit random",
5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgit random",
5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgits random",
5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian Rufiyaa random",
5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaa random",
5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaas random",
5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian Franc random",
5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian franc random",
5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian francs random",
5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Lira random",
5253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Pound random",
5254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese lira random",
5255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese liras random",
5256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pound random",
5257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pounds random",
5258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian Ouguiya random",
5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiya random",
5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiyas random",
5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian Rupee random",
5262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupee random",
5263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupees random",
5264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican Peso random",
526559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican Silver Peso (1861\\u20131992) random",
526627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican Investment Unit random",
5267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican peso random",
5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican pesos random",
526959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver peso (1861\\u20131992) random",
527059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver pesos (1861\\u20131992) random",
527127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment unit random",
527227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment units random",
5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan Leu random",
5274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan leu random",
5275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan lei random",
5276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian Tugrik random",
5277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugrik random",
5278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugriks random",
5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Dirham random",
5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Franc random",
5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirham random",
5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirhams random",
5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan franc random",
5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan francs random",
5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Escudo random",
5286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Metical random",
5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudo random",
5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudos random",
5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican metical random",
5290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican meticals random",
529159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar Kyat random",
529259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyat random",
529359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyats random",
5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dollar random",
5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollar random",
5296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollars random",
5297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupee random",
5298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupee random",
5299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupees random",
5300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilder random",
5301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilder random",
5302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilders random",
5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilder random",
5304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilder random",
5305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilders random",
5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqel random",
5307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqels random",
5308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dollar random",
5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollar random",
5310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollars random",
531127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan C\\u00f3rdoba random",
531259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random",
531327f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
531427f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
531559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random",
531659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random",
5317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Naira random",
5318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian naira random",
5319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nairas random",
5320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Won random",
5321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Krone random",
5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian krone random",
5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kroner random",
532659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican Metical (1980\\u20132006) random",
532759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican metical (1980\\u20132006) random",
532859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican meticals (1980\\u20132006) random",
532959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Lei (1952\\u20132006) random",
533059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Leu (1952\\u20132006) random",
533159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian leu (1952\\u20132006) random",
533259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian Dinar (2002\\u20132006) random",
533359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinar (2002\\u20132006) random",
533459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinars (2002\\u20132006) random",
533559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Dinar (1992\\u20132007) random",
533659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Pound (1957\\u20131998) random",
533759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinar (1992\\u20132007) random",
533859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinars (1992\\u20132007) random",
533959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pound (1957\\u20131998) random",
534059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pounds (1957\\u20131998) random",
534159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
534259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
5343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani Rial random",
5344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rial random",
5345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rials random",
5346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani Rupee random",
5347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupee random",
5348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupees random",
5349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian Balboa random",
5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboa random",
5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboas random",
5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean Kina random",
5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean kina random",
5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean kina random",
5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan Guarani random",
5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guarani random",
5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guaranis random",
5360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Inti random",
5361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Nuevo Sol random",
536259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian Sol (1863\\u20131965) random",
5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian inti random",
5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian intis random",
5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevo sol random",
5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevos soles random",
536759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian sol (1863\\u20131965) random",
536859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian soles (1863\\u20131965) random",
5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine Peso random",
5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine peso random",
5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine pesos random",
5372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
5373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
537459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Polish Zloty (1950\\u20131995) random",
5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish Zloty random",
5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys random",
5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty (PLZ) random",
5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty random",
5379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys (PLZ) random",
5380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Escudo random",
5381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea Escudo random",
5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudo random",
5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudos random",
5384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudo random",
5385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudos random",
5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari Rial random",
5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rial random",
5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rials random",
5389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian Dollar random",
5392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollar random",
5393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollars random",
5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian Leu random",
5395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian lei random",
5396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian leu random",
539759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian Ruble (1991\\u20131998) random",
5398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian Ruble random",
539959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian ruble (1991\\u20131998) random",
5400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian ruble random",
540159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian rubles (1991\\u20131998) random",
5402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian rubles random",
5403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan Franc random",
5404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan franc random",
5405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan francs random",
5406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saint Helena Pound random",
5407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saint Helena pound random",
5408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saint Helena pounds random",
5409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobra random",
5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobra random",
5411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobras random",
5412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi Riyal random",
5413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyal random",
5414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyals random",
5415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian Dinar random",
5416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinar random",
5417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinars random",
5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois Rupee random",
5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupee random",
5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupees random",
5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean Leone random",
5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leone random",
5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leones random",
5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore Dollar random",
5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollar random",
5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollars random",
5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak Koruna random",
5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak koruna random",
5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak korunas random",
5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian Tolar random",
5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolar random",
5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolars random",
5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands Dollar random",
5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollar random",
5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollars random",
5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali Shilling random",
5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shilling random",
5438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shillings random",
5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand (financial) random",
5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand random",
5441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand (financial) random",
5442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rands (financial) random",
5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean Won random",
5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet Rouble random",
5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet rouble random",
5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet roubles random",
5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (A account) random",
5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (convertible account) random",
5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta random",
5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (A account) random",
5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (convertible account) random",
5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta random",
5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (A account) random",
5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (convertible account) random",
5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas random",
5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Special Drawing Rights random",
546127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan Rupee random",
546227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupee random",
546327f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupees random",
5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese Pound random",
5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pound random",
5466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pounds random",
5467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese Dollar random",
5468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollar random",
5469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollars random",
547027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese Guilder random",
547127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilder random",
547227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilders random",
5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi Lilangeni random",
5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi lilangeni random",
5475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi emalangeni random",
5476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish Krona random",
5477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish krona random",
5478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish kronor random",
5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss Franc random",
5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss franc random",
5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss francs random",
5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian Pound random",
5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pound random",
5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pounds random",
5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan Dollar random",
5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollar random",
5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollars random",
5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Ruble random",
5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Somoni random",
5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani ruble random",
5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani rubles random",
5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somoni random",
5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somonis random",
5494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian Shilling random",
5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shilling random",
5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shillings random",
5497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai Baht random",
5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese Escudo random",
5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudo random",
5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudos random",
5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Trinidad and Tobago Dollar random",
5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Trinidad and Tobago dollar random",
5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Trinidad and Tobago dollars random",
5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian Dinar random",
5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinar random",
5510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinars random",
5511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish lira random",
5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani Manat random",
5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Next day) random",
5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Same day) random",
5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar random",
5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (next day) random",
5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (same day) random",
5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (next day) random",
5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (same day) random",
5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
552659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan Shilling (1966\\u20131987) random",
5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan Shilling random",
552859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shilling (1966\\u20131987) random",
5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shilling random",
553059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shillings (1966\\u20131987) random",
5531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shillings random",
5532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Hryvnia random",
5533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Karbovanets random",
5534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnia random",
5535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnias random",
5536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovanets random",
5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovantsiv random",
553827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian Real Value Unit random",
5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 United Arab Emirates Dirham random",
554027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Unknown Currency random",
554159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan Peso (1975\\u20131993) random",
5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan Peso random",
554327f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan Peso (Indexed Units) random",
554459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan peso (1975\\u20131993) random",
554527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan peso (indexed units) random",
5546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan peso random",
554759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan pesos (1975\\u20131993) random",
554827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan pesos (indexed units) random",
5549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan Som random",
5550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan som random",
5551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan som random",
5552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu Vatu random",
5553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatu random",
5554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatus random",
5555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan Bol\\u00edvar random",
555659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random",
5557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvar random",
5558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvars random",
555959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random",
556059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random",
5561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese Dong random",
5562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Euro random",
5565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Franc random",
5566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euro random",
5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euros random",
5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR franc random",
5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR francs random",
5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan Tala random",
5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Dinar random",
5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Rial random",
5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinar random",
5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinars random",
5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rial random",
5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rials random",
557959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random",
558059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random",
558159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian New Dinar (1994\\u20132002) random",
558259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinar (1990\\u20131992) random",
558359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinars (1990\\u20131992) random",
558459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinar (1966\\u20131990) random",
558559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinars (1966\\u20131990) random",
558659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinar (1994\\u20132002) random",
558759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinars (1994\\u20132002) random",
558859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean New Zaire (1993\\u20131998) random",
558959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean Zaire (1971\\u20131993) random",
559059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaire (1993\\u20131998) random",
559159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaires (1993\\u20131998) random",
559259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaire (1971\\u20131993) random",
559359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaires (1971\\u20131993) random",
5594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian Kwacha random",
5595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwacha random",
5596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwachas random",
559759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean Dollar (1980\\u20132008) random",
559859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollar (1980\\u20132008) random",
559959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollars (1980\\u20132008) random",
5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euro random",
5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euros random",
560259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish lira (1922\\u20132005) random",
5603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 special drawing rights random",
560427f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value unit random",
560527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value units random",
5606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "1.00 unknown currency random",
5607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
5608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
5609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* WRONG_DATA[] = {
5610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following are missing one last char in the currency name
5611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "usd1.00", // case sensitive
5612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan Cordob",
5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dolla",
5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dolla",
5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupe",
5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupe",
5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilde",
5618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilde",
5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilde",
5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilde",
5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqe",
5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dolla",
5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dolla",
5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan cordob",
5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Nair",
5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nair",
5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Wo",
5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean wo",
5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Kron",
5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kron",
5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dolla",
5632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00",
5633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "A1.00",
5634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AD1.00",
5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AE1.00",
5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AF1.00",
5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AL1.00",
5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AM1.00",
5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AN1.00",
5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AO1.00",
5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AR1.00",
5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AT1.00",
5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AU1.00",
5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AW1.00",
5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZ1.00",
5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghan1.00",
564759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u201320021.00",
5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afl1.00",
5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Le1.00",
5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dina1.00",
5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peset1.00",
5652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanz1.00",
565359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u201319901.00",
565459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u201319991.00",
565559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u201320001.00",
5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austra1.00",
5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Pes1.00",
565859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u201319851.00",
5659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dra1.00",
5660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Flori1.00",
5661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dolla1.00",
5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schillin1.00",
5663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Mana1.00",
566459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u201320061.00",
5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "B1.00",
5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BA1.00",
5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BB1.00",
5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BE1.00",
5669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BG1.00",
5670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BH1.00",
5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BI1.00",
5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BM1.00",
5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BN1.00",
5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BO1.00",
5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BR1.00",
5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BS1.00",
5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BT1.00",
5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BU1.00",
5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BW1.00",
5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BY1.00",
5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZ1.00",
5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dolla1.00",
5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dina1.00",
5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Tak1.00",
5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dolla1.00",
5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bds1.00",
568759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u201319991.00",
5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Rubl1.00",
5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Fran1.00",
5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible1.00",
5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial1.00",
5692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dolla1.00",
5693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dolla1.00",
5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultru1.00",
5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdo1.00",
5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Pes1.00",
5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivian1.00",
5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mar1.00",
5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Dina1.00",
5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pul1.00",
5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzad1.00",
5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzado Nov1.00",
5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzeir1.00",
570459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u201319931.00",
570559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u201319861.00",
5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Rea1.00",
5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British Pound Sterlin1.00",
5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dolla1.00",
5709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Le1.00",
5710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Le1.00",
5711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kya1.00",
5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Fran1.00",
5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "C1.00",
5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA1.00",
5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CD1.00",
5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BCEA1.00",
5717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BEA1.00",
5718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Fran1.00",
5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP1.00",
5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CH1.00",
5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CL1.00",
5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN1.00",
5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CO1.00",
5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CS1.00",
5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CU1.00",
5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CV1.00",
5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CY1.00",
5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZ1.00",
5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Rie1.00",
5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dolla1.00",
5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escud1.00",
5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dolla1.00",
5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Pes1.00",
573427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Accoun1.00",
573527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yua1.00",
5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Pes1.00",
5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comoro Fran1.00",
5738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Fran1.00",
5739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f31.00",
5740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dina1.00",
5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kun1.00",
5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Pes1.00",
5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Poun1.00",
5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Korun1.00",
5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Korun1.00",
5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "D1.00",
5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DD1.00",
5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DE1.00",
5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJ1.00",
5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DK1.00",
5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DO1.00",
5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZ1.00",
5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Kron1.00",
5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mar1.00",
5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Fran1.00",
5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dk1.00",
5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Pes1.00",
5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC1.00",
5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EE1.00",
5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EG1.00",
5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EQ1.00",
5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ER1.00",
5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ES1.00",
5764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ET1.00",
5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EU1.00",
5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dolla1.00",
5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Ostmar1.00",
5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucr1.00",
576927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Valu1.00",
5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Poun1.00",
5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ekwel1.00",
5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f31.00",
5773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwel1.00",
5774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakf1.00",
5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Es1.00",
5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroo1.00",
5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Bir1.00",
5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eur1.00",
5779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Uni1.00",
5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Uni1.00",
5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Uni1.00",
5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC1.00",
5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD1.00",
5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "F1.00",
5785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FB1.00",
5786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FI1.00",
5787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJ1.00",
5788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FK1.00",
5789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FR1.00",
5790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Poun1.00",
5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fd1.00",
5792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dolla1.00",
5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markk1.00",
5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fr1.00",
5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Fran1.00",
5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Fran1.00",
5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Fran1.00",
5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "G1.00",
5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GB1.00",
5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GE1.00",
5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GH1.00",
5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GI1.00",
5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GM1.00",
5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GN1.00",
5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQ1.00",
5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GR1.00",
5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GT1.00",
5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GW1.00",
5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GY1.00",
5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalas1.00",
5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Lari1.00",
5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lar1.00",
5813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Ced1.00",
581459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u201320071.00",
5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Poun1.00",
5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gol1.00",
5817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachm1.00",
5818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetza1.00",
5819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Fran1.00",
5820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syl1.00",
5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Pes1.00",
5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dolla1.00",
5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK1.00",
5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HN1.00",
5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HR1.00",
5826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HT1.00",
5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HU1.00",
5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourd1.00",
5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempir1.00",
5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dolla1.00",
5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forin1.00",
5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "I1.00",
5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IE1.00",
5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IL1.00",
5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IN1.00",
5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQ1.00",
5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IR1.00",
5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IS1.00",
5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IT1.00",
5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kron1.00",
5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupe1.00",
5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupia1.00",
5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Ria1.00",
5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dina1.00",
5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Poun1.00",
5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Poun1.00",
5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lir1.00",
5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "J1.00",
5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JM1.00",
5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JO1.00",
5851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JP1.00",
5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dolla1.00",
5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Ye1.00",
5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dina1.00",
5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K S1.00",
5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K1.00",
5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KE1.00",
5858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KG1.00",
5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KH1.00",
5860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KP1.00",
5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KR1.00",
5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KW1.00",
5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KY1.00",
5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZ1.00",
586527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Teng1.00",
5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shillin1.00",
5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dina1.00",
5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani So1.00",
5869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LA1.00",
5870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LB1.00",
5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LK1.00",
5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LR1.00",
5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LT1.00",
5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LU1.00",
5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LV1.00",
5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LY1.00",
5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Ki1.00",
5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lat1.00",
5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Rubl1.00",
5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Poun1.00",
5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Lot1.00",
5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dolla1.00",
5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dina1.00",
5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Lit1.00",
5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talona1.00",
5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Fran1.00",
5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Fran1.00",
5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Fran1.00",
5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MA1.00",
5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MD1.00",
5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDe1.00",
5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MEX1.00",
5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MG1.00",
5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ML1.00",
5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MM1.00",
5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MN1.00",
5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MO1.00",
5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MR1.00",
5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MT1.00",
5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MU1.00",
5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MV1.00",
5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MW1.00",
5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX1.00",
5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MY1.00",
5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZ1.00",
5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Patac1.00",
5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Dena1.00",
5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariar1.00",
5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Fran1.00",
5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwach1.00",
5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgi1.00",
5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiya1.00",
5913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Fran1.00",
5914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malot1.00",
5915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lir1.00",
5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Poun1.00",
5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiy1.00",
5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupe1.00",
5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Pes1.00",
592059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u201319921.00",
592127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Uni1.00",
5922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Le1.00",
5923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugri1.00",
5924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirha1.00",
5925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Fran1.00",
5926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escud1.00",
5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metica1.00",
592859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kya1.00",
5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "N1.00",
5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NA1.00",
5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAf1.00",
5932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NG1.00",
5933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NI1.00",
5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NK1.00",
5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NL1.00",
5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NO1.00",
5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NP1.00",
5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT1.00",
5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dolla1.00",
5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupe1.00",
5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilde1.00",
5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilde1.00",
5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqe1.00",
5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dolla1.00",
594559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00",
594627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdob1.00",
5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Nair1.00",
5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Wo1.00",
5949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Kron1.00",
5950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nr1.00",
5951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OM1.00",
5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Old Mozambican Metica1.00",
595359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u201320061.00",
595459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u201320061.00",
595559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u201320071.00",
595659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u201319981.00",
595759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u201320051.00",
5958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Ria1.00",
5959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PA1.00",
5960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PE1.00",
5961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PG1.00",
5962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PH1.00",
5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PK1.00",
5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PL1.00",
5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PT1.00",
5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PY1.00",
5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupe1.00",
5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladiu1.00",
5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balbo1.00",
5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kin1.00",
5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guaran1.00",
5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Int1.00",
597359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u201319651.00",
5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Sol Nuev1.00",
5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Pes1.00",
5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinu1.00",
5977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zlot1.00",
597859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u201319951.00",
5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escud1.00",
5980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escud1.00",
5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pr1.00",
5982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QA1.00",
5983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Ria1.00",
5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RD1.00",
5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RH1.00",
5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Fund1.00",
5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RS1.00",
5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RU1.00",
5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RW1.00",
5990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rb1.00",
5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dolla1.00",
5992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Le1.00",
5993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Rubl1.00",
599459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u201319981.00",
5995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Fran1.00",
5996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S1.00",
5997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SA1.00",
5998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SB1.00",
5999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SC1.00",
6000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SD1.00",
6001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SE1.00",
6002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SG1.00",
6003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SH1.00",
6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SI1.00",
6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SK1.00",
6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL R1.00",
6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL1.00",
6008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SO1.00",
6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ST1.00",
6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SU1.00",
6011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SV1.00",
6012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SY1.00",
6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZ1.00",
6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saint Helena Poun1.00",
6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobr1.00",
6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riya1.00",
6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dina1.00",
6018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupe1.00",
6019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sh1.00",
6020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leon1.00",
6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silve1.00",
6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dolla1.00",
6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Korun1.00",
6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tola1.00",
6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dolla1.00",
6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shillin1.00",
6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Ran1.00",
6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial1.00",
6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Wo1.00",
6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Roubl1.00",
6031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peset1.00",
6032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account1.00",
6033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account1.00",
6034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Right1.00",
603527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupe1.00",
6036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Poun1.00",
6037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dolla1.00",
603827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilde1.00",
6039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangen1.00",
6040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Kron1.00",
6041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Fran1.00",
6042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Poun1.00",
6043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "T S1.00",
6044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TH1.00",
6045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJ1.00",
6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TM1.00",
6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TN1.00",
6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TO1.00",
6049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TP1.00",
6050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TR1.00",
6051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TT1.00",
6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TW1.00",
6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZ1.00",
6054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dolla1.00",
6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Rubl1.00",
6056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somon1.00",
6057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shillin1.00",
6058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Cod1.00",
6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Bah1.00",
6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escud1.00",
6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u20bbang1.00",
6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Trinidad and Tobago Dolla1.00",
6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dina1.00",
6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lir1.00",
6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Mana1.00",
6066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U S1.00",
6067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U1.00",
6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UA1.00",
6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UG1.00",
6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dolla1.00",
6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day1.00",
6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day1.00",
6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US1.00",
6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UY1.00",
6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZ1.00",
6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shillin1.00",
607759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u201319871.00",
6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvni1.00",
6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanet1.00",
608027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Uni1.00",
6081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirha1.00",
608227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currenc1.00",
6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ur1.00",
608459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguay Peso (1975\\u201319931.00",
6085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguay Peso Uruguay1.00",
608627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguay Peso (Indexed Units1.00",
6087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan So1.00",
6088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "V1.00",
6089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VE1.00",
6090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VN1.00",
6091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VU1.00",
6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vat1.00",
6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edva1.00",
6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar Fuert1.00",
6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Don1.00",
6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Eur1.00",
6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Fran1.00",
6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WS1.00",
6099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoa Tal1.00",
6100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XA1.00",
6101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XB1.00",
6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XC1.00",
6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XD1.00",
6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XE1.00",
6105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XF1.00",
6106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XO1.00",
6107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XP1.00",
6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XR1.00",
6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XT1.00",
6110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XX1.00",
6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YD1.00",
6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YE1.00",
6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YU1.00",
6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dina1.00",
6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Ria1.00",
6116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yugoslavian Convertible Dina1.00",
611759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u201319901.00",
611827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Yugoslavian New Dina1.00",
6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Z1.00",
6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZA1.00",
6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZM1.00",
6122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZR1.00",
6123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZW1.00",
612459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u201319981.00",
6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zairean Zair1.00",
6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwach1.00",
612759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u201320081.00",
6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "dra1.00",
6129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "lar1.00",
6130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "le1.00",
6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "man1.00",
6132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "so1.00",
6133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale locale("en_US");
6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(DATA[i]);
6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6139b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              if ( doubleVal != 1.0 ) {
6146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                  errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal);
6147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              }
6148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          } else {
6149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Failed to parse as currency: " + formatted);
61506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) {
6160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(WRONG_DATA[i]);
6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6164b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal);
61696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
6178c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
617950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t);
618050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
618150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s;
618250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::string ss;
618350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::cout << s.toUTF8String(ss)
618450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
618550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
618650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool found[10];
618750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition fp;
618850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
618950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (tupleCount > 10) {
619050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("internal error, tupleCount too large", FALSE);
619150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  } else {
619250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
619350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      found[i] = FALSE;
619450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
619550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
619650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
619750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
619850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  while (iter.next(fp)) {
619950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UBool ok = FALSE;
620050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t id = fp.getField();
620150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t start = fp.getBeginIndex();
620250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t limit = fp.getEndIndex();
620350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
620450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // is there a logln using printf?
620550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    char buf[128];
620650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit);
620750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    logln(buf);
620850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
620950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
621050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (found[i]) {
621150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        continue;
621250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
621350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (values[i*3] == id &&
621450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+1] == start &&
621550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+2] == limit) {
621650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        found[i] = ok = TRUE;
621750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        break;
621850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
621950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
622050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
622150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok);
622250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
622350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
622450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // check that all were found
622550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool ok = TRUE;
622650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  for (int i = 0; i < tupleCount; ++i) {
622750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!found[i]) {
622850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      ok = FALSE;
622950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]);
623050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
623150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
623250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue("no expected values were missing", ok);
623350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
623450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
623550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
623650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
623750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
623850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField());
623950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex());
624050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex());
624150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
624250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() {
624450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // bug 7372
624550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
624650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter1;
624750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter2;
624850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition pos;
624950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status);
625150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (failure(status, "NumberFormat::createInstance", TRUE)) return;
625250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double num = 1234.56;
625450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str1;
625550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str2;
625650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"self==", iter1 == iter1);
625850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2);
625950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str1, &iter1, status);
626150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2);
626250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, &iter2, status);
626350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2);
626450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter1.next(pos);
626550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2);
626650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter2.next(pos);
626750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2);
626850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // should format ok with no iterator
627050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  str2.remove();
627150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, NULL, status);
627250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertEquals("null fpiter", str1, str2);
627350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
627450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
627550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
627650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
627750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() {
627850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  Locale locale("en_US");
627950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
6280b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
628150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "NumberFormat::createInstance", TRUE)) return;
628250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double val = 12345.67;
628350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
628450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
628550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6286103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_CURRENCY_FIELD, 0, 1,
6287103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_GROUPING_SEPARATOR_FIELD, 3, 4,
6288103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 7,
6289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8,
6290103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 8, 10,
629150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
629250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
629350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
629450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
629550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
629650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
629750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
629850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
629950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6300103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
630150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6303103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result);
630450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
630550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
630750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result);
631050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
631150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
631250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6313b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status);
631450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  val = -0.0000123;
631550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
631650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6317103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_SIGN_FIELD, 0, 1,
6318103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 2,
6319103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3,
6320103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 3, 5,
6321103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SYMBOL_FIELD, 5, 6,
6322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SIGN_FIELD, 6, 7,
6323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_FIELD, 7, 8
632450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
632550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
632650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
632750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
632850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
632950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
633050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
633150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
633250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6333103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
633450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
633550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6336103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result);
633750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
633850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
634050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
634150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6342103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result);
634350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
634450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
634550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
634650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  fflush(stderr);
634750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
634850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
634950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) {
635050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  switch (attrId) {
6351103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_INTEGER_FIELD: return "integer";
6352103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_FRACTION_FIELD: return "fraction";
6353103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator";
6354103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol";
6355103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign";
6356103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_FIELD: return "exponent";
6357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator";
6358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_CURRENCY_FIELD: return "currency";
6359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERCENT_FIELD: return "percent";
6360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERMILL_FIELD: return "permille";
6361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_SIGN_FIELD: return "sign";
636250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    default: return "";
636350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
636450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
636550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
636650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
636750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//   Test formatting & parsing of big decimals.
636850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      API test, not a comprehensive test.
636950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      See DecimalFormatTest/DataDrivenTests
637050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
637150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \
637250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                                __FILE__, __LINE__, u_errorName(status));}
637350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \
637450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);}
637550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
637650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) {
637750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // This function lets ASSERT_EQUALS("literal", UnicodeString) work.
637850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString us1(s1);
637950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return us1 != s2;
638050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
638150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
638250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() {
638350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
638450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode  status = U_ZERO_ERROR;
638550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f("12.345678999987654321E666", status);
638650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
638750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        StringPiece s = f.getDecimalNumber(status);
638850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
638950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1.2345678999987654321E+667", s);
639050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        //printf("%s\n", s.data());
639150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
639250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
639350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
639450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
639550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f1("this is not a number", status);
639650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status);
639750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
639850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
639950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
640050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
640150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f;
640250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("123.45", status);
640350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
640450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kDouble, f.getType());
640550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble());
640650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble(status));
640750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
640850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("123.45", f.getDecimalNumber(status));
640950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
641150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("4.5678E7", status);
641250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t n;
641350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        n = f.getLong();
641450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(45678000, n);
641550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
641650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
641750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("-123", status);
641850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kLong, f.getType());
642050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong());
642150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong(status));
642250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("-123", f.getDecimalNumber(status));
642450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
642650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
642750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("1234567890123", status);  // Number too big for 32 bits
642850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kInt64, f.getType());
643050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64());
643150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64(status));
643250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status));
643450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
643650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
643750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
643850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6439b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
644027f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
644127f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
644227f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
644327f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
644427f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("244444444444444444444444444444444444446.4");
644527f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(num, formattedResult, NULL, status);
644627f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
644727f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult);
644827f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::string ss; std::cout << formattedResult.toUTF8String(ss);
644927f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
645027f654740f2a26ad62a5c155af9199af9e69b889claireho        }
645150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
645250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
645350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
645450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check formatting a DigitList.  DigitList is internal, but this is
645550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // a critical interface that must work.
645650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6457b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
645827f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
645927f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
646027f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
646127f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
646227f654740f2a26ad62a5c155af9199af9e69b889claireho            DigitList dl;
646327f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("123.4566666666666666666666666666666666621E+40");
646427f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
646527f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
646627f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, NULL, status);
646727f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
646827f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult);
646927f654740f2a26ad62a5c155af9199af9e69b889claireho
647027f654740f2a26ad62a5c155af9199af9e69b889claireho            status = U_ZERO_ERROR;
647127f654740f2a26ad62a5c155af9199af9e69b889claireho            num.set("666.666");
647227f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
647327f654740f2a26ad62a5c155af9199af9e69b889claireho            FieldPosition pos(NumberFormat::FRACTION_FIELD);
647427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647527f654740f2a26ad62a5c155af9199af9e69b889claireho            formattedResult.remove();
647627f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, pos, status);
647727f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647827f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("666.666", formattedResult);
647927f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(4, pos.getBeginIndex());
648027f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(7, pos.getEndIndex());
648127f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
648227f654740f2a26ad62a5c155af9199af9e69b889claireho        }
648350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
648450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
648550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
648650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check a parse with a formatter with a multiplier.
648750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6488b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status);
648927f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
649027f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
649127f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
649227f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.84%";
649327f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
649427f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
649527f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
649627f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data()));
649727f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
649827f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
649927f654740f2a26ad62a5c155af9199af9e69b889claireho        }
650050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
650150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
650254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC)
650354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /*
650454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod().
650554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * See #9463
650654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     */
650750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
650850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check that a parse returns a decimal number with full accuracy
650950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
651127f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
651227f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
651327f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
651427f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.002200044400088880000070000";
651527f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
651627f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
651727f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
651827f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data()));
651927f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(1.00220004440008888,   result.getDouble());
652027f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
652127f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
652227f654740f2a26ad62a5c155af9199af9e69b889claireho        }
652350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
652454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
652550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
652650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
652750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
652827f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() {
652927f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
653027f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString text1, text2;
653127f654740f2a26ad62a5c155af9199af9e69b889claireho    double value = 99.12345;
653227f654740f2a26ad62a5c155af9199af9e69b889claireho
653327f654740f2a26ad62a5c155af9199af9e69b889claireho    // Create currenct instance
653427f654740f2a26ad62a5c155af9199af9e69b889claireho    NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status);
653527f654740f2a26ad62a5c155af9199af9e69b889claireho    if (U_FAILURE(status) || fmt == NULL) {
653627f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Unable to create NumberFormat");
653727f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
653827f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text1);
653927f654740f2a26ad62a5c155af9199af9e69b889claireho
654027f654740f2a26ad62a5c155af9199af9e69b889claireho        // Reset the same currency and format the test value again
654127f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->setCurrency(fmt->getCurrency(), status);
654227f654740f2a26ad62a5c155af9199af9e69b889claireho        ASSERT_SUCCESS(status);
654327f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text2);
654427f654740f2a26ad62a5c155af9199af9e69b889claireho
654527f654740f2a26ad62a5c155af9199af9e69b889claireho        if (text1 != text2) {
654627f654740f2a26ad62a5c155af9199af9e69b889claireho            errln((UnicodeString)"NumberFormat::format() should return the same result - text1="
654727f654740f2a26ad62a5c155af9199af9e69b889claireho                + text1 + " text2=" + text2);
654827f654740f2a26ad62a5c155af9199af9e69b889claireho        }
654927f654740f2a26ad62a5c155af9199af9e69b889claireho        delete fmt;
655027f654740f2a26ad62a5c155af9199af9e69b889claireho    }
655127f654740f2a26ad62a5c155af9199af9e69b889claireho}
655227f654740f2a26ad62a5c155af9199af9e69b889claireho
655327f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() {
655427f654740f2a26ad62a5c155af9199af9e69b889claireho
655527f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
655627f654740f2a26ad62a5c155af9199af9e69b889claireho    Formattable result;
655727f654740f2a26ad62a5c155af9199af9e69b889claireho    ParsePosition parsePos(0);
655827f654740f2a26ad62a5c155af9199af9e69b889claireho
655927f654740f2a26ad62a5c155af9199af9e69b889claireho    // set the exponent symbol
656027f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
656127f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status);
656227f654740f2a26ad62a5c155af9199af9e69b889claireho    if(U_FAILURE(status)) {
656327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)");
656427f654740f2a26ad62a5c155af9199af9e69b889claireho        return;
656527f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6566b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
656727f654740f2a26ad62a5c155af9199af9e69b889claireho    // create format instance
656827f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
656927f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormat fmt("#####", symbols, status);
6570b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(U_FAILURE(status)) {
657127f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)");
657227f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6573b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
657427f654740f2a26ad62a5c155af9199af9e69b889claireho    // parse the text
6575b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    fmt.parse("5.06e-27", result, parsePos);
657627f654740f2a26ad62a5c155af9199af9e69b889claireho    if(result.getType() != Formattable::kDouble &&
6577b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       result.getDouble() != 5.06E-27 &&
6578b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       parsePos.getIndex() != 8
657927f654740f2a26ad62a5c155af9199af9e69b889claireho       )
658027f654740f2a26ad62a5c155af9199af9e69b889claireho    {
6581b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("ERROR: parse failed - expected 5.06E-27, 8  - returned %d, %i",
6582b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho              result.getDouble(), parsePos.getIndex());
658327f654740f2a26ad62a5c155af9199af9e69b889claireho    }
658427f654740f2a26ad62a5c155af9199af9e69b889claireho}
658527f654740f2a26ad62a5c155af9199af9e69b889claireho
6586b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() {
6587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6588b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* Test that number formats are properly inherited from es_419 */
6589b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* These could be subject to change if the CLDR data changes */
6590b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* parentLocaleTests[][2]= {
6591b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* locale ID */  /* expected */
6592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CO", "1.250,75" },
6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CR", "1.250,75" },
6594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_ES", "1.250,75" },
6595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_GQ", "1.250,75" },
6596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_MX", "1,250.75" },
6597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_US", "1,250.75" },
6598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_VE", "1.250,75" },
6599b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
6600b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString s;
6602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for(int i=0; i < (int)(sizeof(parentLocaleTests)/sizeof(parentLocaleTests[i])); i++){
6604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UErrorCode status = U_ZERO_ERROR;
6605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        const char *localeID = parentLocaleTests[i][0];
6606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString expected(parentLocaleTests[i][1], -1, US_INV);
6607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        expected = expected.unescape();
6608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        char loc[256]={0};
6609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        uloc_canonicalize(localeID, loc, 256, &status);
6610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status);
6611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(U_FAILURE(status)){
6612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status));
6613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        s.remove();
6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        fmt->format(1250.75, s);
6617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(s!=expected){
6618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("FAIL: Expected: ")+expected
6619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString(" Got: ") + s
6620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
6621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)){
6623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln((UnicodeString)"FAIL: Status " + (int32_t)status);
6624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete fmt;
6626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
6627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
6629103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6630103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
6631103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API.
6632103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
6633103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() {
6634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status);
6636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    CHECK_DATA(status, "NumberingSystem::getAvailableNames()")
6637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t nsCount = availableNumberingSystems->count(status);
6639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( nsCount < 36 ) {
6640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 36, got %d",nsCount);
6641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* A relatively simple test of the API.  We call getAvailableNames() and cycle through */
6644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* each name returned, attempting to create a numbering system based on that name and  */
6645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* verifying that the name returned from the resulting numbering system is the same    */
6646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* one that we initially thought.                                                      */
6647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t len;
6649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for ( int32_t i = 0 ; i < nsCount ; i++ ) {
6650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const char *nsname = availableNumberingSystems->next(&len,status);
6651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status);
6652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if ( uprv_strcmp(nsname,ns->getName()) ) {
6653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("FAIL: Numbering system name didn't match for name = %s\n",nsname);
6654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
6655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete ns;
6657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete availableNumberingSystems;
6660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid
6663103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void)
6664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
6665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(pattern,"#",1);
6666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(pattern,"#",1);
6667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(infstr,"INF",3);
6669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(infstr,"INF",3);
6670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(nanstr,"NAN",3);
6672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(nanstr,"NAN",3);
6673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar outputbuf[50] = {0};
6675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status);
6677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("FAIL: error in unum_open() - %s", u_errorName(status));
6679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
6680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status);
6683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status);
6684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: error setting symbols");
6686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double inf = uprv_getInfinity();
6689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN);
6691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0);
6692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UFieldPosition position = { 0, 0, 0};
6694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_formatDouble(fmt,inf,outputbuf,50,&position,&status);
6695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( u_strcmp(infstr, outputbuf)) {
6697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf);
6698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_close(fmt);
6701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h"
6704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() {
6706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49
670754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n",
6708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
670954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) {
671054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
671154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) {
671254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        infoln("Note: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is %d. Decrease the #define? sizeof(DecimalFormat)=%d\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE, sizeof(DecimalFormat));
671354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
6714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else
671554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped.");
6716103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
6717103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
671854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // get some additional case
671954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
672054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
672154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000",""),status);
672254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 1;
672354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0001";
672454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
672554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
672654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
672754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
672854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),""));
672954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
673054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),""));
673154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6732103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
673354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
673454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
673554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
673654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN; // -9223372036854775808L;
673754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
673854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
673954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
674054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
674154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
674254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775808";
674354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
674454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
674554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
674654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
674754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
674854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
674954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
675054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6751103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
675254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
675354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
675454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
675554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MAX; // -9223372036854775808L;
675654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
675754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
675854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
675954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
676054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
676154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "9223372036854775807";
676254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
676354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
676454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
676554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
676654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
676754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
676854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
676954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6770103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
677154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
677254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
677354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
677454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 0;
677554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
677654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
677754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
677854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
677954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
678054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0000000000000000000";
678154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
678254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
678354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
678454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
678554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
678654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
678754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
678854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6789103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
679054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
679154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
679254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
679354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN + 1;
679454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775807";
679554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
679654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
679754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
679854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
679954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
680154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6803103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
680454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
680554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
680654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
680754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) {
680854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) {
680954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
681154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) {
681254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
681454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
681554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
6817103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
6818103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6819103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
682059d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) {
682159d709d503bab6e2b61931737e662dd293b40578ccornelius  UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": ");
682259d709d503bab6e2b61931737e662dd293b40578ccornelius
682359d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattable *u = f.toUFormattable();
682459d709d503bab6e2b61931737e662dd293b40578ccornelius  logln();
682559d709d503bab6e2b61931737e662dd293b40578ccornelius  if (u == NULL) {
682659d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error: f.toUFormattable() retuned NULL.");
682759d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
682859d709d503bab6e2b61931737e662dd293b40578ccornelius  }
682959d709d503bab6e2b61931737e662dd293b40578ccornelius  logln("%s:%d: comparing Formattable with UFormattable", file, line);
683059d709d503bab6e2b61931737e662dd293b40578ccornelius  logln(fileLine + toString(f));
683159d709d503bab6e2b61931737e662dd293b40578ccornelius
683259d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode status = U_ZERO_ERROR;
683359d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode valueStatus = U_ZERO_ERROR;
683459d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType expectUType = UFMT_COUNT; // invalid
683559d709d503bab6e2b61931737e662dd293b40578ccornelius
683659d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool triedExact = FALSE; // did we attempt an exact comparison?
683759d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool exactMatch = FALSE; // was the exact comparison true?
683859d709d503bab6e2b61931737e662dd293b40578ccornelius
683959d709d503bab6e2b61931737e662dd293b40578ccornelius  switch( f.getType() ) {
684059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDate:
684159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DATE;
684259d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus));
684359d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
684459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
684559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDouble:
684659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DOUBLE;
684759d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus));
684859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
684959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kLong:
685159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_LONG;
685259d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus));
685359d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
685459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kString:
685659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_STRING;
685759d709d503bab6e2b61931737e662dd293b40578ccornelius    {
685859d709d503bab6e2b61931737e662dd293b40578ccornelius      UnicodeString str;
685959d709d503bab6e2b61931737e662dd293b40578ccornelius      f.getString(str);
686059d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
686159d709d503bab6e2b61931737e662dd293b40578ccornelius      const UChar* uch = ufmt_getUChars(u, &len, &valueStatus);
686259d709d503bab6e2b61931737e662dd293b40578ccornelius      if(U_SUCCESS(valueStatus)) {
686359d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString str2(uch, len);
686459d709d503bab6e2b61931737e662dd293b40578ccornelius        assertTrue("UChar* NULL-terminated", uch[len]==0);
686559d709d503bab6e2b61931737e662dd293b40578ccornelius        exactMatch = (str == str2);
686659d709d503bab6e2b61931737e662dd293b40578ccornelius      }
686759d709d503bab6e2b61931737e662dd293b40578ccornelius      triedExact = TRUE;
686859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
686959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
687059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kArray:
687159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_ARRAY;
687259d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
687359d709d503bab6e2b61931737e662dd293b40578ccornelius    {
687459d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count = ufmt_getArrayLength(u, &valueStatus);
687559d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count2;
687659d709d503bab6e2b61931737e662dd293b40578ccornelius      const Formattable *array2 = f.getArray(count2);
687759d709d503bab6e2b61931737e662dd293b40578ccornelius      exactMatch = assertEquals(fileLine + " array count", count, count2);
687859d709d503bab6e2b61931737e662dd293b40578ccornelius
687959d709d503bab6e2b61931737e662dd293b40578ccornelius      if(exactMatch) {
688059d709d503bab6e2b61931737e662dd293b40578ccornelius        for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) {
688159d709d503bab6e2b61931737e662dd293b40578ccornelius          UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus);
688259d709d503bab6e2b61931737e662dd293b40578ccornelius          if(*Formattable::fromUFormattable(uu) != (array2[i])) {
688359d709d503bab6e2b61931737e662dd293b40578ccornelius            errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i,
688459d709d503bab6e2b61931737e662dd293b40578ccornelius                  (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i]));
688559d709d503bab6e2b61931737e662dd293b40578ccornelius            exactMatch = FALSE;
688659d709d503bab6e2b61931737e662dd293b40578ccornelius          } else {
688759d709d503bab6e2b61931737e662dd293b40578ccornelius            if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) {
688859d709d503bab6e2b61931737e662dd293b40578ccornelius              exactMatch = FALSE;
688959d709d503bab6e2b61931737e662dd293b40578ccornelius            }
689059d709d503bab6e2b61931737e662dd293b40578ccornelius          }
689159d709d503bab6e2b61931737e662dd293b40578ccornelius        }
689259d709d503bab6e2b61931737e662dd293b40578ccornelius      }
689359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
689459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
689559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kInt64:
689659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_INT64;
689759d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus));
689859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
689959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kObject:
690159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_OBJECT;
690259d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus));
690359d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
690459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690559d709d503bab6e2b61931737e662dd293b40578ccornelius  }
690659d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType uType = ufmt_getType(u, &status);
690759d709d503bab6e2b61931737e662dd293b40578ccornelius
690859d709d503bab6e2b61931737e662dd293b40578ccornelius  if(U_FAILURE(status)) {
690959d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status));
691059d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
691159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691259d709d503bab6e2b61931737e662dd293b40578ccornelius
691359d709d503bab6e2b61931737e662dd293b40578ccornelius  if(uType != expectUType) {
691459d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType);
691559d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691659d709d503bab6e2b61931737e662dd293b40578ccornelius
691759d709d503bab6e2b61931737e662dd293b40578ccornelius  if(triedExact) {
691859d709d503bab6e2b61931737e662dd293b40578ccornelius    if(U_FAILURE(valueStatus)) {
691959d709d503bab6e2b61931737e662dd293b40578ccornelius      errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus));
692059d709d503bab6e2b61931737e662dd293b40578ccornelius    } else if(!exactMatch) {
692159d709d503bab6e2b61931737e662dd293b40578ccornelius     errln("%s:%d: failed exact match for the Formattable type", file, line);
692259d709d503bab6e2b61931737e662dd293b40578ccornelius    } else {
692359d709d503bab6e2b61931737e662dd293b40578ccornelius      logln("%s:%d: exact match OK", file, line);
692459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
692559d709d503bab6e2b61931737e662dd293b40578ccornelius  } else {
692659d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d: note, did not attempt exact match for this formattable type", file, line);
692759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
692859d709d503bab6e2b61931737e662dd293b40578ccornelius
692959d709d503bab6e2b61931737e662dd293b40578ccornelius  if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u))
693059d709d503bab6e2b61931737e662dd293b40578ccornelius      && f.isNumeric()) {
693159d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode convStatus = U_ZERO_ERROR;
693259d709d503bab6e2b61931737e662dd293b40578ccornelius
693359d709d503bab6e2b61931737e662dd293b40578ccornelius    if(uType != UFMT_INT64) { // may fail to compare
693459d709d503bab6e2b61931737e662dd293b40578ccornelius      assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus));
693559d709d503bab6e2b61931737e662dd293b40578ccornelius    }
693659d709d503bab6e2b61931737e662dd293b40578ccornelius
693759d709d503bab6e2b61931737e662dd293b40578ccornelius    if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) {
693859d709d503bab6e2b61931737e662dd293b40578ccornelius      StringPiece fDecNum = f.getDecimalNumber(convStatus);
693959d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1
694059d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
694159d709d503bab6e2b61931737e662dd293b40578ccornelius      const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus);
694259d709d503bab6e2b61931737e662dd293b40578ccornelius#else
694359d709d503bab6e2b61931737e662dd293b40578ccornelius      // copy version
694459d709d503bab6e2b61931737e662dd293b40578ccornelius      char decNumChars[200];
694559d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus);
694659d709d503bab6e2b61931737e662dd293b40578ccornelius#endif
694759d709d503bab6e2b61931737e662dd293b40578ccornelius
694859d709d503bab6e2b61931737e662dd293b40578ccornelius      if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) {
694959d709d503bab6e2b61931737e662dd293b40578ccornelius        logln(fileLine + decNumChars);
695059d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars length==", len, fDecNum.length());
695159d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data());
695259d709d503bab6e2b61931737e662dd293b40578ccornelius      }
695359d709d503bab6e2b61931737e662dd293b40578ccornelius
695459d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionF = U_ZERO_ERROR;
695559d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t l = f.getInt64(int64ConversionF);
695659d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionU = U_ZERO_ERROR;
695759d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t r = ufmt_getInt64(u, &int64ConversionU);
695859d709d503bab6e2b61931737e662dd293b40578ccornelius
695959d709d503bab6e2b61931737e662dd293b40578ccornelius      if( (l==r)
696059d709d503bab6e2b61931737e662dd293b40578ccornelius          && ( uType != UFMT_INT64 ) // int64 better not overflow
696159d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionU)
696259d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) {
696359d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("%s:%d: OK: 64 bit overflow", file, line);
696459d709d503bab6e2b61931737e662dd293b40578ccornelius      } else {
696559d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " as int64 ==", l, r);
696659d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF);
696759d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU);
696859d709d503bab6e2b61931737e662dd293b40578ccornelius      }
696959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
697059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
697159d709d503bab6e2b61931737e662dd293b40578ccornelius  return exactMatch || !triedExact;
697259d709d503bab6e2b61931737e662dd293b40578ccornelius}
697359d709d503bab6e2b61931737e662dd293b40578ccornelius
697459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) {
697559d709d503bab6e2b61931737e662dd293b40578ccornelius  {
697659d709d503bab6e2b61931737e662dd293b40578ccornelius    // test that a default formattable is equal to Formattable()
697759d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
697859d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalUFormattablePointer defaultUFormattable(ufmt_open(&status));
697959d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("calling umt_open", status);
698059d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable defaultFormattable;
698159d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
698259d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
698359d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
698459d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
698559d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
698659d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
698759d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable",
698859d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
698959d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable()))));
699059d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable",
699159d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
699259d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultFormattable.toUFormattable())));
699359d709d503bab6e2b61931737e662dd293b40578ccornelius    assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()",
699459d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
699559d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultUFormattable.getAlias())));
699659d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable);
699759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
699859d709d503bab6e2b61931737e662dd293b40578ccornelius  // test some random Formattables
699959d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700059d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(ucal_getNow(), Formattable::kIsDate);
700159d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
700259d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700359d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700459d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((double)1.61803398874989484820); // golden ratio
700559d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
700659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700759d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700859d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon
700959d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701159d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701259d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/
701359d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701459d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701559d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701659d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f("Hello world."); // should be invariant?
701759d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701859d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701959d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702059d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
702159d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg
702259d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a StringPiece", status2);
702359d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
702459d709d503bab6e2b61931737e662dd293b40578ccornelius  }
702559d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
702759d709d503bab6e2b61931737e662dd293b40578ccornelius    UObject *obj = new Locale();
702859d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(obj);
702959d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a Formattable from a default constructed Locale()", status2);
703059d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
703159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
703259d709d503bab6e2b61931737e662dd293b40578ccornelius  {
703359d709d503bab6e2b61931737e662dd293b40578ccornelius    const Formattable array[] = {
703459d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable(ucal_getNow(), Formattable::kIsDate),
703559d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((int32_t)4),
703659d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((double)1.234),
703759d709d503bab6e2b61931737e662dd293b40578ccornelius    };
703859d709d503bab6e2b61931737e662dd293b40578ccornelius
703959d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable fa(array, 3);
704059d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, fa);
704159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
704259d709d503bab6e2b61931737e662dd293b40578ccornelius}
704359d709d503bab6e2b61931737e662dd293b40578ccornelius
704459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) {
704559d709d503bab6e2b61931737e662dd293b40578ccornelius  double input[] = {
704659d709d503bab6e2b61931737e662dd293b40578ccornelius        0, 0,
704759d709d503bab6e2b61931737e662dd293b40578ccornelius        0.1, -0.1,
704859d709d503bab6e2b61931737e662dd293b40578ccornelius        123, -123,
704959d709d503bab6e2b61931737e662dd293b40578ccornelius        12345, -12345,
705059d709d503bab6e2b61931737e662dd293b40578ccornelius        123.45, -123.45,
705159d709d503bab6e2b61931737e662dd293b40578ccornelius        123.44501, -123.44501,
705259d709d503bab6e2b61931737e662dd293b40578ccornelius        0.001234, -0.001234,
705359d709d503bab6e2b61931737e662dd293b40578ccornelius        0.00000000123, -0.00000000123,
705459d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000000000000000123, -0.0000000000000000000123,
705559d709d503bab6e2b61931737e662dd293b40578ccornelius        1.2, -1.2,
705659d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000012344501, -0.0000000012344501,
705759d709d503bab6e2b61931737e662dd293b40578ccornelius        123445.01, -123445.01,
705859d709d503bab6e2b61931737e662dd293b40578ccornelius        12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0,
705959d709d503bab6e2b61931737e662dd293b40578ccornelius    };
706059d709d503bab6e2b61931737e662dd293b40578ccornelius    const char* expected[] = {
706159d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00", "0.00",
706259d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.100", "-0.100",
706359d709d503bab6e2b61931737e662dd293b40578ccornelius        "123", "-123",
706459d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345", "-12345",
706559d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
706659d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
706759d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.001234", "-0.001234",
706859d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00000000123", "-0.00000000123",
706959d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000000000000000123", "-0.0000000000000000000123",
707059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.20", "-1.20",
707159d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000012345", "-0.0000000012345",
707259d709d503bab6e2b61931737e662dd293b40578ccornelius        "123450", "-123450",
707359d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345000000000000000000000000000000", "-12345000000000000000000000000000000",
707459d709d503bab6e2b61931737e662dd293b40578ccornelius    };
707559d709d503bab6e2b61931737e662dd293b40578ccornelius
707659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
707759d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
707859d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
707959d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
708059d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status,"NumberFormat::createInstance")
708159d709d503bab6e2b61931737e662dd293b40578ccornelius
708259d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
708359d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
708459d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(5);
708559d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setGroupingUsed(false);
708659d709d503bab6e2b61931737e662dd293b40578ccornelius
708759d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
708859d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString expectedResult;
708959d709d503bab6e2b61931737e662dd293b40578ccornelius    for (unsigned int i = 0; i < sizeof(input)/sizeof(double); ++i) {
709059d709d503bab6e2b61931737e662dd293b40578ccornelius        numberFormat->format(input[i], result);
709159d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString expectedResult(expected[i]);
709259d709d503bab6e2b61931737e662dd293b40578ccornelius        if (result != expectedResult) {
709359d709d503bab6e2b61931737e662dd293b40578ccornelius          errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result);
709459d709d503bab6e2b61931737e662dd293b40578ccornelius        }
709559d709d503bab6e2b61931737e662dd293b40578ccornelius        result.remove();
709659d709d503bab6e2b61931737e662dd293b40578ccornelius    }
709759d709d503bab6e2b61931737e662dd293b40578ccornelius}
709859d709d503bab6e2b61931737e662dd293b40578ccornelius
709959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() {
710059d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
710159d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
710259d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
710359d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
710459d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
710559d709d503bab6e2b61931737e662dd293b40578ccornelius
710659d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
710759d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(3);
710859d709d503bab6e2b61931737e662dd293b40578ccornelius
710959d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
711059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->format(0.0, result);
711159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (result != "0") {
711259d709d503bab6e2b61931737e662dd293b40578ccornelius        errln((UnicodeString)"Expected: 0, got " + result);
711359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
711459d709d503bab6e2b61931737e662dd293b40578ccornelius}
711559d709d503bab6e2b61931737e662dd293b40578ccornelius
711659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() {
711759d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
711859d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
711959d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
712059d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
712159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
712259d709d503bab6e2b61931737e662dd293b40578ccornelius        dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status));
712359d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
712459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
712559d709d503bab6e2b61931737e662dd293b40578ccornelius
712659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
712759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
712859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
712959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
713059d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
713159d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
713259d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713359d709d503bab6e2b61931737e662dd293b40578ccornelius
713459d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
713559d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
713659d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
713759d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713859d709d503bab6e2b61931737e662dd293b40578ccornelius
713959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
714059d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
714159d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
714259d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714359d709d503bab6e2b61931737e662dd293b40578ccornelius
714459d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
714559d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(6);
714659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
714759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
714859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714959d709d503bab6e2b61931737e662dd293b40578ccornelius
715059d709d503bab6e2b61931737e662dd293b40578ccornelius}
715159d709d503bab6e2b61931737e662dd293b40578ccornelius
715259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() {
715359d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
715459d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status);
715559d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
715659d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
715759d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
715859d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
715959d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u200e-0,5");
716059d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
716159d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
716259d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
716359d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Expected -0,5 to parse for Farsi.");
716459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
716559d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
716659d709d503bab6e2b61931737e662dd293b40578ccornelius}
716759d709d503bab6e2b61931737e662dd293b40578ccornelius
716859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() {
716959d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
717059d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status);
717159d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
717259d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
717359d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
717459d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
717559d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u208B0.5");
717659d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
717759d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
717859d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
717959d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Expected ") + value + UnicodeString(" to parse."));
718059d709d503bab6e2b61931737e662dd293b40578ccornelius    }
718159d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
718259d709d503bab6e2b61931737e662dd293b40578ccornelius}
718359d709d503bab6e2b61931737e662dd293b40578ccornelius
718459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() {
718559d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
718659d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormatSymbols custom(Locale::getUS(), status);
718759d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormatSymbols constructor");
718859d709d503bab6e2b61931737e662dd293b40578ccornelius
718959d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*");
719059d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^");
719159d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":");
719259d709d503bab6e2b61931737e662dd293b40578ccornelius
719359d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString pat(" #,##0.00");
719459d709d503bab6e2b61931737e662dd293b40578ccornelius    pat.insert(0, (UChar)0x00A4);
719559d709d503bab6e2b61931737e662dd293b40578ccornelius
719659d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat fmt(pat, custom, status);
719759d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormat constructor");
719859d709d503bab6e2b61931737e662dd293b40578ccornelius
719959d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString numstr("* 1^234:56");
720059d709d503bab6e2b61931737e662dd293b40578ccornelius    expect2(fmt, (Formattable)((double)1234.56), numstr);
720159d709d503bab6e2b61931737e662dd293b40578ccornelius}
720259d709d503bab6e2b61931737e662dd293b40578ccornelius
720359d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct {
720459d709d503bab6e2b61931737e662dd293b40578ccornelius    const char *   locale;
720559d709d503bab6e2b61931737e662dd293b40578ccornelius    UBool          lenient;
720659d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString  numString;
720759d709d503bab6e2b61931737e662dd293b40578ccornelius    double         value;
720859d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem;
720959d709d503bab6e2b61931737e662dd293b40578ccornelius
721059d709d503bab6e2b61931737e662dd293b40578ccornelius
721159d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() {
721259d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem items[] = {
721359d709d503bab6e2b61931737e662dd293b40578ccornelius        // locale               lenient numString                                                       value
721459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
721559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
721659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
721759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
721859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
721959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
722059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
722159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
722259d709d503bab6e2b61931737e662dd293b40578ccornelius
722359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
722459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
722559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
722659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
722759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
722859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
722959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
723059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
723159d709d503bab6e2b61931737e662dd293b40578ccornelius
723259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
723359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
723459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
723559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
723659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
723759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
723859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
723959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
724059d709d503bab6e2b61931737e662dd293b40578ccornelius
724159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
724259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
724359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
724459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
724559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
724659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
724759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
724859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
724959d709d503bab6e2b61931737e662dd293b40578ccornelius
725059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
725359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
725459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
725559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
725659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
725759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
725859d709d503bab6e2b61931737e662dd293b40578ccornelius
725959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("12"),                                      12 },
726059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("12"),                                      12 },
726159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("-23"),                                    -23 },
726259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("-23"),                                    -23 },
726359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
726459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
726559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
726659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
726759d709d503bab6e2b61931737e662dd293b40578ccornelius
726859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
726959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"),                 -67 },
727359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
727459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
727559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"),   -67 },
727659d709d503bab6e2b61931737e662dd293b40578ccornelius
727759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
728259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
728359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
728459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
728559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
728659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
728759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"),                -67 },
728859d709d503bab6e2b61931737e662dd293b40578ccornelius        // terminator
728959d709d503bab6e2b61931737e662dd293b40578ccornelius        { NULL,                 0,      UnicodeString(""),                                                0 },
729059d709d503bab6e2b61931737e662dd293b40578ccornelius    };
729159d709d503bab6e2b61931737e662dd293b40578ccornelius
729259d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem * itemPtr;
729359d709d503bab6e2b61931737e662dd293b40578ccornelius    for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
729459d709d503bab6e2b61931737e662dd293b40578ccornelius        UErrorCode status = U_ZERO_ERROR;
729559d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status);
729659d709d503bab6e2b61931737e662dd293b40578ccornelius        if (U_SUCCESS(status)) {
729759d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->setLenient(itemPtr->lenient);
729859d709d503bab6e2b61931737e662dd293b40578ccornelius            Formattable fmtobj;
729959d709d503bab6e2b61931737e662dd293b40578ccornelius            ParsePosition ppos;
730059d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->parse(itemPtr->numString, fmtobj, ppos);
730159d709d503bab6e2b61931737e662dd293b40578ccornelius            if (ppos.getIndex() == itemPtr->numString.length()) {
730259d709d503bab6e2b61931737e662dd293b40578ccornelius                double parsedValue = fmtobj.getDouble(status);
730359d709d503bab6e2b61931737e662dd293b40578ccornelius                if (U_FAILURE(status) || parsedValue != itemPtr->value) {
730459d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue);
730559d709d503bab6e2b61931737e662dd293b40578ccornelius                }
730659d709d503bab6e2b61931737e662dd293b40578ccornelius            } else {
730759d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex());
730859d709d503bab6e2b61931737e662dd293b40578ccornelius            }
730959d709d503bab6e2b61931737e662dd293b40578ccornelius        } else {
731059d709d503bab6e2b61931737e662dd293b40578ccornelius            dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status));
731159d709d503bab6e2b61931737e662dd293b40578ccornelius        }
731259d709d503bab6e2b61931737e662dd293b40578ccornelius        delete numfmt;
731359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
731459d709d503bab6e2b61931737e662dd293b40578ccornelius}
731559d709d503bab6e2b61931737e662dd293b40578ccornelius
7316fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct {
7317fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  DecimalFormat::ERoundingMode mode;
7318fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  double value;
7319fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  UnicodeString expected;
7320fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data;
7321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0.
7324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() {
7325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const Test10419Data items[] = {
7326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundCeiling, 1.488,  "2"},
7327fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundDown, 1.588,  "1"},
7328fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundFloor, 1.888,  "1"},
7329fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfDown, 1.5,  "1"},
7330fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfEven, 2.5,  "2"},
7331fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfUp, 2.5,  "3"},
7332fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundUp, 1.5,  "2"},
7333fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    };
7334fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7335fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status));
7336fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        dataerrln("Failure creating DecimalFormat %s", u_errorName(status));
7338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < (int32_t) (sizeof(items) / sizeof(items[0])); ++i) {
7341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setRoundingMode(items[i].mode);
7342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setMaximumFractionDigits(0);
7343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UnicodeString actual;
7344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        if (items[i].expected != decfmt->format(items[i].value, actual)) {
7345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            errln("Expected " + items[i].expected + ", got " + actual);
7346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() {
7351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt is now 'a'
7352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("'I''ll'*a###.##", status);
7354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("a")) {
7361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Padding character should be 'a'.");
7362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt ought to be '*' since that is the default and no
7366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // explicit padding char is specified in the new pattern.
7367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.applyPattern("AA#,##0.00ZZ", status);
7368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Oops this still prints 'a' even though we changed the pattern.
7370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("*")) {
7371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("applyPattern did not clear padding character.");
7372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() {
7376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat format("0.00E0", status);
7378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat::ERoundingMode roundingModes[] = {
7384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundCeiling,
7385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundDown,
7386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundFloor,
7387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfDown,
7388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfEven,
7389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfUp,
7390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundUp};
7391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const char *descriptions[] = {
7392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Ceiling",
7393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Down",
7394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Floor",
7395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half down",
7396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half even",
7397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half up",
7398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round up"};
7399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016};
7402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3",
7405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3",
7408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"};
7411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016};
7422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3",
7425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3",
7426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3",
7427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3",
7428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7429fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"};
7431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0
7441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {0.0, -0.0};
7443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0"};
7452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/
7462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15};
7465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25",
7468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25"};
7474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15};
7485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25",
7490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25"};
7494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35};
7505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25",
7508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25"};
7514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35};
7525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25",
7530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25"};
7534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() {
7546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("0.00E0", status);
7548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (!assertSuccess("Formt creation", status)) {
7549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString out;
7552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.format(-0.0, out);
7553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertEquals("format", "-0.00E0", out);
7554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding(
7557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        DecimalFormat& format,
7558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const double *values,
7559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *expected,
7560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const DecimalFormat::ERoundingMode *roundingModes,
7561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *descriptions,
7562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t valueSize,
7563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t roundingModeSize) {
7564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < roundingModeSize; ++i) {
7565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        format.setRoundingMode(roundingModes[i]);
7566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        for (int32_t j = 0; j < valueSize; j++) {
7567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString currentExpected(expected[i * valueSize + j]);
7568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            currentExpected = currentExpected.unescape();
7569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString actual;
7570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            format.format(values[j], actual);
7571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            if (currentExpected != actual) {
7572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                char buffer[256];
7573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                sprintf(
7574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        buffer,
7575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        "For %s value %f, expected ",
7576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        descriptions[i],
7577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        values[j]);
7578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                errln(UnicodeString(buffer) + currentExpected + ", got " + actual);
7579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            }
7580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() {
7585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING;
7587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)1234.5, "$1,234.50", TRUE, status);
7590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1234.5, "($1,234.50)", TRUE, status);
7592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)0, "$0.00", TRUE, status);
7594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-0.2, "($0.20)", TRUE, status);
7596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status);
7598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status);
7600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("de_DE", style, status),
7601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status);
7602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186
7605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() {
7606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status);
7608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormatSymbols for root");
7610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString pattern("#,##0.###");
7613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status);
7614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormat using root symbols");
7616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone();
7620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32);
7621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (*fmtClone == *fmtBase) {
7622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth");
7623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtClone;
7625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtBase;
7627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
7630