numfmtst.cpp revision 786288bd87363f3f86c1211ef7e1fb94aa9a40f7
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT:
395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep * Copyright (c) 1997-2015, 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
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUR[] = {69,85,82,0}; // "EUR"
43b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD"
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4559d709d503bab6e2b61931737e662dd293b40578ccornelius
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class NumberFormatTest
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { errcheckln(status, UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; }
5127f654740f2a26ad62a5c155af9199af9e69b889claireho#define CHECK_DATA(status,str) if (U_FAILURE(status)) { dataerrln(UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; }
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO_BEGIN;
568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencySign);
578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrency);
588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestParse);
598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRounding487);
608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestQuotes);
618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponential);
628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPatterns);
638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  // Upgrade to alphaWorks - liu 5/99
658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponent);
668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientific);
678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPad);
688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPatterns2);
698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSecondaryGrouping);
708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSurrogateSupport);
718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAPI);
728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyObject);
748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyPatterns);
758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  //TESTCASE_AUTO(TestDigitList);
768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestWhiteSpaceParsing);
778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestComplexCurrency);  // This test removed because CLDR no longer uses choice formats in currency symbols.
788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRegCurrency);
798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSymbolsWithBadLocale);
808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAdoptDecimalFormatSymbols);
818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientific2);
838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestScientificGrouping);
848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestInt64);
858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestPerMill);
878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestIllegalPatterns);
888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCases);
898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyNames);
918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyAmount);
928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyUnit);
938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCoverage);
948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestJB3832);
958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestHost);
968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestHostClone);
978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFormat);
988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRounding);
998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestNonpositiveMultiplier);
1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestNumberingSystems);
1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestSpaceParsing);
1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestMultiCurrencySign);
1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFormatForMixParsing);
1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestDecimalFormatCurrencyParse);
1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyIsoPluralFormat);
1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyParsing);
1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestParseCurrencyInUCurr);
1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormatAttributes);
1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFieldPositionIterator);
1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestDecimal);
1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestCurrencyFractionDigits);
1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExponentParse);
1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestExplicitParents);
1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestLenientParse);
1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestAvailableNumberingSystems);
1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestRoundingPattern);
1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(Test9087);
1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormatFastpaths);
1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO(TestFormattableSize);
12059d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestUFormattable);
12159d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestSignificantDigits);
12259d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestShowZero);
12359d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestCompatibleCurrencies);
12459d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestBug9936);
12559d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseNegativeWithFaLocale);
12659d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseNegativeWithAlternateMinusSign);
12759d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestCustomCurrencySignAndSeparator);
12859d709d503bab6e2b61931737e662dd293b40578ccornelius  TESTCASE_AUTO(TestParseSignsAndMarks);
129fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(Test10419RoundingWith0FractionDigits);
130fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(Test10468ApplyPattern);
131fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestRoundingScientific10542);
132fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestZeroScientific10547);
133fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestAccountingCurrency);
134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  TESTCASE_AUTO(TestEquality);
135f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  TESTCASE_AUTO(TestCurrencyUsage);
13695bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep  TESTCASE_AUTO(TestFastPathConsistent11524);
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" },
719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    {"pt_PT_PREEURO", "1,150$50\\u00A0\\u200B"}, // per cldrbug 7670
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);
749f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    if (!(s==CharsToUnicodeString("1,50\\u00A0DM")))
750f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM");
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(),
833f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                   1234.56, CharsToUnicodeString("1 235 JPY")); // 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                }
2294f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            } else if (mfmt == NULL) {
2295f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                errln("FAIL: " + where + "Loc \"" + mloc + "\": skip case using previous locale, no valid MeasureFormat");
2296f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2297f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2298f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2299f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt>
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(str, ec)) goto error;
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")",
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             str, mfmt->format(n, out.remove(), ec));
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("format", ec);
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                Formattable m;
2314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mfmt->parseObject(str, m, ec);
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (assertSuccess("parseCurrency", ec)) {
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")",
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 n, m);
2319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
2320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln("FAIL: source " + str);
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 6:
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // perr: <pattern or '-'> <invalid string>
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Under construction");
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 7: {
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // pat: <pattern> <exp. toPattern, or '-' or 'err'>
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString testpat;
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString exppat;
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(testpat, ec)) goto error;
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(exppat, ec)) goto error;
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool err = exppat == "err";
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool existingPat = FALSE;
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (testpat == "-") {
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid command \"pat: - err\"");
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                existingPat = TRUE;
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                testpat = pat;
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exppat == "-") exppat = testpat;
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DecimalFormat* f = 0;
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode ec2 = U_ZERO_ERROR;
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (existingPat) {
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = fmt;
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = new DecimalFormat(testpat, ec2);
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_SUCCESS(ec2)) {
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid pattern \"" + testpat +
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" was accepted");
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UnicodeString pat2;
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "\"" + testpat + "\".toPattern()",
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 exppat, f->toPattern(pat2));
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("Ok: " + where + "Invalid pattern \"" + testpat +
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Valid pattern \"" + testpat +
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!existingPat) delete f;
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } break;
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case -1:
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: " + where + "Unknown command \"" + tok + "\"");
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    goto done;
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error:
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(ec)) {
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Unexpected EOF");
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
23836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec));
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done:
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete mfmt;
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ref;
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) {
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == b.getType()) {
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return a == b;
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == Formattable::kLong) {
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kInt64) {
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getLong() == b.getLong();
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
240650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kDouble) {
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double) b.getLong();
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kInt64) {
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double)b.getInt64();
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kInt64) {
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return a.getInt64() == (int64_t)b.getLong();
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getInt64() == (int64_t)b.getDouble();
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return FALSE;
2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, n, str, FALSE);
2427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, str, n);
2428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, n, str, FALSE);
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, str, n);
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n,
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               const UnicodeString& exp,
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               UErrorCode status) {
243927f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
244027f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect2(*fmt, n, exp);
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable num;
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.parse(str, num, status);
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
245227f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status));
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (equalValue(num, n)) {
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + "\" x " +
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num));
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
246227f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL \"") + str + "\" x " +
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Formattable num;
2471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.parse(str, num, status);
2472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
2473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL: Parse failed for \"") + str + "\"");
2474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
2475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (equalValue(num, n)) {
2477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + " = " +
2478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num));
2479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
2480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL \"") + str + " = " +
2481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n,
2486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString saw;
2488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    FieldPosition pos;
2489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.format(n, saw, pos, status);
2491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (saw == exp) {
249350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln(UnicodeString("Ok   ") + toString(n) +
2494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\"");
2496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // number => string (but not the other way around: number
2498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // => string => number2, might have number2 != number):
2499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (rt) {
2500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable n2;
2501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.parse(exp, n2, status);
2502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
2503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\"");
2504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                return;
2505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString saw2;
2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (saw2 != exp) {
2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      " => \"" + saw2 + "\"");
2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
251550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL ") + toString(n) +
2516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n,
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString saw;
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(n, saw, pos, status);
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (saw == exp) {
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   ") + toString(n) + " x " +
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\"");
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // number => string (but not the other way around: number
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // => string => number2, might have number2 != number):
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (rt) {
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable n2;
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(exp, n2, status);
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) {
254127f654740f2a26ad62a5c155af9199af9e69b889claireho                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status));
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString saw2;
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (saw2 != exp) {
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      " => \"" + saw2 + "\"");
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
255327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL ") + toString(n) + " x " +
2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n,
2560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                              const UnicodeString& exp, UBool rt,
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UErrorCode status) {
256227f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
256327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(*fmt, n, exp, rt);
2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale,
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                      double value, const UnicodeString& string) {
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat& fmt = * (DecimalFormat*) &nf;
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar DEFAULT_CURR[] = {45/*-*/,0};
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar curr[4];
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_strcpy(curr, DEFAULT_CURR);
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*locale.getLanguage() != 0) {
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ucurr_forLocale(locale.getName(), curr, 4, &ec);
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("ucurr_forLocale", ec);
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr, ec);
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("DecimalFormat::setCurrency", ec);
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr); //Deprecated variant, for coverage only
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(value, s);
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020);
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Default display of the number yields "1234.5599999999999"
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // instead of "1234.56".  Use a formatter to fix this.
259050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberFormat* f =
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat::createInstance(Locale::getUS(), ec);
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString v;
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Oops; bad formatter.  Use default op+= display.
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        v = (UnicodeString)"" + value;
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setMaximumFractionDigits(4);
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setGroupingUsed(FALSE);
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->format(value, v);
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (s == string) {
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s));
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) +
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + prettify(string));
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) {
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.toPattern(pat);
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pat == exp) {
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\"");
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\"");
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos) {
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, 0, (UnicodeString)"");
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, UChar pad) {
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, width, UnicodeString(pad));
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, const UnicodeString& pad) {
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t apos = 0, awidth = 0;
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString apadStr;
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.applyPattern(pat, status);
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = fmt.getPadPosition();
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = fmt.getFormatWidth();
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr=fmt.getPadCharacterString();
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = -1;
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = width;
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr = pad;
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (apos == pos && awidth == width && apadStr == pad) {
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString infoStr;
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pos == ILLEGAL) {
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr;
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\" pos=" + apos + infoStr);
2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos +
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " width=" + awidth + " pad=" + apadStr +
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + pos + " " + width + " " + pad);
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
265659d709d503bab6e2b61931737e662dd293b40578ccornelius
265759d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale  - FIXME
265859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() {
265959d709d503bab6e2b61931737e662dd293b40578ccornelius/*
2660fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar JPY[] = {0x4A, 0x50, 0x59, 0};
2661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar CNY[] = {0x43, 0x4E, 0x59, 0};
266259d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
266359d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmt(
266459d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getUS(), status));
266559d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
266659d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Could not create number format instance.");
266759d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
266859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
266959d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
267059d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\u00A51,235");
267159d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__);
267259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\uFFE51,235");
267359d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
267459d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, CNY, 1235,  "CN\\u00A51,235");
267559d709d503bab6e2b61931737e662dd293b40578ccornelius
267659d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtTW(
267759d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status));
267859d709d503bab6e2b61931737e662dd293b40578ccornelius
267959d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__);
268059d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\u00A51,235");
268159d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__);
268259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\uFFE51,235");
268359d709d503bab6e2b61931737e662dd293b40578ccornelius
268459d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtJP(
268559d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getJapan(), status));
268659d709d503bab6e2b61931737e662dd293b40578ccornelius
268759d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__);
268859d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\u00A51,235");
268959d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__);
269059d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\uFFE51,235");
269159d709d503bab6e2b61931737e662dd293b40578ccornelius
269259d709d503bab6e2b61931737e662dd293b40578ccornelius    // more..
269359d709d503bab6e2b61931737e662dd293b40578ccornelius*/
269459d709d503bab6e2b61931737e662dd293b40578ccornelius}
269559d709d503bab6e2b61931737e662dd293b40578ccornelius
269659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) {
269759d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
269859d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString utext = ctou(text);
269959d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos));
270059d709d503bab6e2b61931737e662dd293b40578ccornelius    if (!ppos.getIndex()) {
270159d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Parse of ") + utext + " should have succeeded.");
270259d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
270359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
270459d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
270559d709d503bab6e2b61931737e662dd293b40578ccornelius
270659d709d503bab6e2b61931737e662dd293b40578ccornelius    char theInfo[100];
270759d709d503bab6e2b61931737e662dd293b40578ccornelius    sprintf(theInfo, "For locale %s, string \"%s\", currency ",
270859d709d503bab6e2b61931737e662dd293b40578ccornelius            fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(),
270959d709d503bab6e2b61931737e662dd293b40578ccornelius            text);
271059d709d503bab6e2b61931737e662dd293b40578ccornelius    u_austrcpy(theInfo+uprv_strlen(theInfo), currency);
271159d709d503bab6e2b61931737e662dd293b40578ccornelius
271259d709d503bab6e2b61931737e662dd293b40578ccornelius    char theOperation[100];
271359d709d503bab6e2b61931737e662dd293b40578ccornelius
271459d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
271559d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check amount:");
271659d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue(theOperation, amount ==  currencyAmount->getNumber().getDouble(status));
271759d709d503bab6e2b61931737e662dd293b40578ccornelius
271859d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
271959d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check currency:");
272059d709d503bab6e2b61931737e662dd293b40578ccornelius    assertEquals(theOperation, currency, currencyAmount->getISOCurrency());
272159d709d503bab6e2b61931737e662dd293b40578ccornelius}
272259d709d503bab6e2b61931737e662dd293b40578ccornelius
272359d709d503bab6e2b61931737e662dd293b40578ccornelius
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* localeID = "pt_PT@currency=PTE";
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc(localeID);
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0\\u200B")); // per cldrbug 7670
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status);
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
27326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status));
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1150.50, s);
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(s!=expected){
273750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL: Expected: ")+expected
273850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                + UnicodeString(" Got: ") + s
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost()
2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2749103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API
2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32NumberTest::testLocales(this);
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale loc("en_US@compat=host");
2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (UNumberFormatStyle k = UNUM_DECIMAL;
2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho         k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) {
2755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
2756b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status));
2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (!NumberFormat::isStyleSupported(k)) {
2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (status != U_UNSUPPORTED_ERROR) {
2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL: expected style %d to be unsupported - %s",
2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
2762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (full.isNull() || U_FAILURE(status)) {
2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("FAIL: Can't create number instance of style %d for host - %s",
2766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString result1;
2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable number(10.00);
2771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->format(number, result1, status);
2772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't format for host");
2774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable formattable;
2777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->parse(result1, formattable, status);
2778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't parse for host");
2780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone()
2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *full = NumberFormat::createInstance(loc, status);
2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL || U_FAILURE(status)) {
27976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status));
2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: format failure.");
2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat()
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test is here to increase code coverage.
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *cloneObj;
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable toFormat, result;
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0};
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale  saveDefaultLocale = Locale::getDefault();
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( Locale::getUK(), status );
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("couldn't set default Locale!");
2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status);
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( saveDefaultLocale, status );
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
28366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Status %s", u_errorName(status));
2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj = (MeasureFormat *)measureObj->clone();
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cloneObj == NULL) {
2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone doesn't work");
2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status));
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->format(toFormat, str, status);
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->parseObject(str, result, status);
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->format(toFormat, str, status);
2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->parseObject(str, result, status);
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*measureObj != *cloneObj) {
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Cloned object is not equal to the original object");
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete measureObj;
2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cloneObj;
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_USELESS_COLLATOR_ERROR;
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (MeasureFormat::createCurrencyFormat(status) != NULL) {
2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("createCurrencyFormat should have returned NULL.");
2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */
2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() {
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
28816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int roundingIncrements[]={1, 2, 5, 20, 50, 100};
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int testValues[]={0, 300};
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j=0; j<2; j++) {
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) {
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df->setRoundingMode((DecimalFormat::ERoundingMode)mode);
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int increment=0; increment<6; increment++) {
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double base=testValues[j];
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double rInc=roundingIncrements[increment];
2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                rInc=1.000000000/rInc;
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2900c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    delete df;
2901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2903103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() {
2904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
2905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    struct {
2906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString  pattern;
2907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        double        testCase;
2908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString expected;
2909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } tests[] = {
2910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" },
2911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"#50",    1230,  (UnicodeString)"1250" }
2912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
2913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t numOfTests = (sizeof(tests)/sizeof(tests[0]));
2914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString result;
2915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_FAILURE(status)) {
2918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
2920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2922103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (int32_t i = 0; i < numOfTests; i++) {
2923103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        result.remove();
2924103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2925103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->applyPattern(tests[i].pattern, status);
2926103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(status)) {
2927103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status));
2928103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2929103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->format(tests[i].testCase, result);
2931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (result != tests[i].expected) {
2933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected);
2934103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2936103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2937103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete df;
2938103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
2939103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) {
2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->setRoundingIncrement(increment);
2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double lastParsed=INT32_MIN; //Intger.MIN_VALUE
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i=-iterations; i<=iterations;i++) {
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double iValue=base+(increment*(i*0.1));
2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double smallIncrement=0.00000001;
2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (iValue!=0) {
2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            smallIncrement*=iValue;
2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //we not only test the value, but some values in a small range around it
2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue-smallIncrement, lastParsed);
2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue, lastParsed);
2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue+smallIncrement, lastParsed);
2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) {
2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formattedDecimal;
2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double parsed;
2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable result;
2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->format(iValue, formattedDecimal, status);
2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error formatting number.");
2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->parse(formattedDecimal, result, status);
2968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error parsing number.");
2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parsed=result.getDouble();
2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (lastParsed>parsed) {
2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Rounding wrong direction! %d > %d", lastParsed, parsed);
2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return lastParsed;
2980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2982c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() {
2983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
2985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
2986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormat df(UnicodeString("0"), US, status);
2987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0)");
298850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2989c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test zero multiplier
2990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
2991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    int32_t mult = df.getMultiplier();
2992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(0);
2993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != mult) {
2994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(0) did not ignore its zero input");
2995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
299650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2997c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test negative multiplier
299850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2999c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-1);
3000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != -1) {
3001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(-1) ignored its negative input");
3002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        return;
3003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
300450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3005c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1122.123", -1122.123);
3006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1122.123", 1122.123);
3007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1.2", -1.2);
3008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1.2", 1.2);
3009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
301050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // Note:  the tests with the final parameter of FALSE will not round trip.
301150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The initial numeric value will format correctly, after the multiplier.
301250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        Parsing the formatted text will be out-of-range for an int64, however.
301350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The expect() function could be modified to detect this and fall back
301450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        to looking at the decimal parsed value, but it doesn't.
301550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN,    "9223372036854775808", FALSE);
301650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN+1,  "9223372036854775807");
301750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)-123,                  "123");
301850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)123,                  "-123");
3019c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, U_INT64_MAX-1, "-9223372036854775806");
302050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MAX,   "-9223372036854775807");
3021c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-2);
3023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806");
302450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2),   "-9223372036854775808");
302550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE);
3026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-7);
302850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE);
302950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7),   "9223372036854775807");
3030c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800");
3031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported
3033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // (right now the big numbers get turned into doubles and lose tons of accuracy)
3034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX));
3035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1));
3036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2)));
3037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2)));
3038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it
3040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}
3045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct {
3047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const char * stringToParse;
3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          parsedPos;
3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          errorIndex;
3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        lenient;
3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem;
3052c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
305350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() {
3055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the data are:
3056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the string to be parsed, parsed position, parsed error index
3057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const TestSpaceParsingItem DATA[] = {
3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // TOTO: Update the following TODOs, some may be handled now
3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, FALSE},
3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, FALSE},
3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, FALSE},
3062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$ 124 ",       5, -1, FALSE}, // TODO: need to handle space correctly
3063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly
3064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        0,  0, FALSE}, // TODO: need to handle space correctly
3067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           0,  3, FALSE}, // TODO: need to handle space correctly
3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // {"124 $",       5, -1, FALSE}, // TODO: OK or not, need currency spacing rule
3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          0,  3, FALSE},
3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, TRUE},
3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, TRUE},
3072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, TRUE},
3073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         5, -1, TRUE},
3074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   5, -1, TRUE},
3075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        6, -1, TRUE},
3076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124$",         4, -1, TRUE}, // TODO: need to handle trailing currency correctly
3077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           3, -1, TRUE},
3078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124 $",        5, -1, TRUE}, // TODO: OK or not, need currency spacing rule
3079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          4, -1, TRUE},
3080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale locale("en_US");
3083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status);
3084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete foo;
3087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ParsePosition parsePosition(0);
3091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse);
3092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int parsedPosition = DATA[i].parsedPos;
3093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int errorIndex = DATA[i].errorIndex;
3094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        foo->setLenient(DATA[i].lenient);
3095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        foo->parse(stringToBeParsed, result, parsePosition);
3097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getIndex() != parsedPosition ||
3098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            parsePosition.getErrorIndex() != errorIndex) {
3099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")");
3100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getErrorIndex() == -1 &&
310250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            result.getType() == Formattable::kLong &&
3103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != 124) {
3104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong());
3105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete foo;
3108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/**
3111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword.
3112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */
3113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *localeName;
3115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double      value;
3116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UBool        isRBNF;
3117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *expectedResult;
3118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem;
3119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() {
3121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem DATA[] = {
3123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" },
3124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" },
3125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" },
312659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" },
3127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35
3128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ar_MA", 1234.567, FALSE, "1.234,567" },
3129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" },
3131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" },
3132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35
3133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" },
313554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" },
3136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { NULL, 0, FALSE, NULL }
3137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode ec;
314027f654740f2a26ad62a5c155af9199af9e69b889claireho
3141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem *item;
3142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (item = DATA; item->localeName != NULL; item++) {
3143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        ec = U_ZERO_ERROR;
3144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale loc = Locale::createFromName(item->localeName);
314550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3146fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *origFmt = NumberFormat::createInstance(loc,ec);
3147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(ec)) {
3148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec));
3149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            continue;
3150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3151fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // Clone to test ticket #10682
3152fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *fmt = (NumberFormat *) origFmt->clone();
3153fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        delete origFmt;
3154fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
3155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (item->isRBNF) {
3157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        } else {
3159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt;
3162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Test bogus keyword value
3166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    ec = U_ZERO_ERROR;
3167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Locale loc4 = Locale::createFromName("en_US@numbers=foobar");
3168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec);
3169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if ( ec != U_UNSUPPORTED_ERROR ) {
3170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR");
3171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt4;
3172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
317427f654740f2a26ad62a5c155af9199af9e69b889claireho    ec = U_ZERO_ERROR;
317550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns = NumberingSystem::createInstance(ec);
317650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
317750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec));
317850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
317950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318027f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( ns != NULL ) {
318127f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getDynamicClassID();
318227f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getStaticClassID();
318327f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
318427f654740f2a26ad62a5c155af9199af9e69b889claireho        errln("FAIL: getInstance() returned NULL.");
318527f654740f2a26ad62a5c155af9199af9e69b889claireho    }
318650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns1 = new NumberingSystem(*ns);
318850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (ns1 == NULL) {
318950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("FAIL: NumberSystem copy constructor returned NULL.");
319050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
319150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
319250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns1;
319350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns;
3194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
319850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() {
3200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][6] = {
3201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the fields in the following test are:
320250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
320350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // currency pattern (with negative pattern),
3204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency number to be formatted,
3205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency symbol name, such as "$" for USD,
3206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency ISO name, such as "USD",
3207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using plural name, such as "US dollars".
3208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for US locale
320950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"},
321050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"},
321159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"},
3212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for CHINA locale
3213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"},
3214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"},
3215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"}
3216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0};
3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString doubleCurrencyStr(doubleCurrencySign);
3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0};
3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString tripleCurrencyStr(tripleCurrencySign);
3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* locale = DATA[i][0];
3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString pat = ctou(DATA[i][1]);
3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][2]);
3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status);
3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete sym;
3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j=1; j<=3; ++j) {
3234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // j represents the number of currency sign in the pattern.
3235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (j == 2) {
3236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr);
3237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            } else if (j == 3) {
3238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr);
3239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status);
3242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
3243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAILED init DecimalFormat ");
3244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                delete fmt;
3245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                continue;
3246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString s;
3248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            ((NumberFormat*) fmt)->format(numberToBeFormat, s);
3249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][3] is the currency format result using a
3250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // single currency sign.
3251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // double currency sign.
3253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // triple currency sign.
3255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][j+2] is the currency format result using
3256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // 'j' number of currency sign.
3257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString currencyFormatResult = ctou(DATA[i][2+j]);
3258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (s.compare(currencyFormatResult)) {
3259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s);
3260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // mix style parsing
3262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            for (int k=3; k<=5; ++k) {
3263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][3] is the currency format result using a
3264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // single currency sign.
3265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][4] is the currency format result using
3266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // double currency sign.
3267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][5] is the currency format result using
3268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // triple currency sign.
3269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UnicodeString oneCurrencyFormat = ctou(DATA[i][k]);
3270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UErrorCode status = U_ZERO_ERROR;
3271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              Formattable parseRes;
3272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              fmt->parse(oneCurrencyFormat, parseRes, status);
3273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              if (U_FAILURE(status) ||
3274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kDouble &&
327550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                   parseRes.getDouble() != numberToBeFormat) ||
3276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kLong &&
3277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                   parseRes.getLong() != numberToBeFormat)) {
3278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " +
3279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                        i + ", " + j + ", " + k);
3280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              }
3281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete fmt;
3283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
328950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() {
3291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status);
3293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete curFmt;
3295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* formats[] = {
3298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1,234.56",  // string to be parsed
3299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1,234.56",
3300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1,234.56",
3301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1,234.56 US dollars"
3302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
330327f654740f2a26ad62a5c155af9199af9e69b889claireho    const CurrencyAmount* curramt = NULL;
3304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) {
3305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(formats[i]);
330627f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed);
3307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        curFmt->parseObject(stringToBeParsed, result, status);
3310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
331150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status));
331250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else if (result.getType() != Formattable::kObject ||
331327f654740f2a26ad62a5c155af9199af9e69b889claireho            (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL ||
331427f654740f2a26ad62a5c155af9199af9e69b889claireho            curramt->getNumber().getDouble() != 1234.56 ||
331527f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD)
331627f654740f2a26ad62a5c155af9199af9e69b889claireho        ) {
3317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number ");
331827f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getNumber().getDouble() != 1234.56) {
331927f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble());
3320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
332127f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getISOCurrency() != ISO_CURRENCY_USD) {
332227f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency());
3323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete curFmt;
3327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
333050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() {
3332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Locale.US
3333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status);
3335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString pat;
3340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UChar currency = 0x00A4;
3341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // "\xA4#,##0.00;-\xA4#,##0.00"
3342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00");
3343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormat* fmt = new DecimalFormat(pat, sym, status);
3344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete fmt;
3346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse");
3347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][2] = {
3350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
3351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // string to be parsed, the parsed result (number)
335250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1.00", "1"},
335350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1.00", "1"},
335450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1.00 US dollar", "1"},
335550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1,234.56", "1234.56"},
335650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1,234.56", "1234.56"},
335750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1,234.56 US dollar", "1234.56"},
3358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(DATA[i][0]);
3361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double parsedResult = atof(DATA[i][1]);
3362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        fmt->parse(stringToBeParsed, result, status);
3365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status) ||
3366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kDouble &&
3367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getDouble() != parsedResult) ||
3368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kLong &&
3369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != parsedResult)) {
3370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"FAIL parse: Expected " + parsedResult);
3371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete fmt;
337450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
337750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() {
3379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
338150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
338750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
338859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"},
3389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
339059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"},
339159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"},
339259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"},
3393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"},
3394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"},
339559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
339659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"},
339759d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
339859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
339959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
3400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test locale without currency information
340150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
3402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test choice format
340359d709d503bab6e2b61931737e662dd293b40578ccornelius        {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"},
3404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
3405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
341050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3411f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for (int32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) {
3412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius      for (int32_t kIndex = 0; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) {
3413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNumberFormatStyle k = currencyStyles[kIndex];
3414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
3420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
34226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
342627f654740f2a26ad62a5c155af9199af9e69b889claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
343350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
3436b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
344550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
3454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
346050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln((UnicodeString)"FAIL: getCurrencyFormat of locale " +
3461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      localeString + " failed roundtripping the number");
3462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
3463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble());
3464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
3465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong());
3466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
3467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
347050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() {
3476b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
347850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
3484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"},
348559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"},
3486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"es_AR", "1", "USD", "US$1,00", "USD1,00", "1,00 d\\u00f3lar estadounidense"},
3487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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"},
348859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
3489f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        {"he_IL", "1", "USD", "1.00\\u00a0$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"},
349059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"},
3491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"},
349259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"},
3493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00 \\ubbf8\\uad6d \\ub2ec\\ub7ec"},
3494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00 \\u7c73\\u30c9\\u30eb"},
349559d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00a01.00", "CNY\\u00a01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
349659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349759d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"},
349959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"},
350059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"},
350159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"}
3502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
350859d709d503bab6e2b61931737e662dd293b40578ccornelius    static const char* currencyStyleNames[] = {
350959d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY",
351059d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_ISO",
351159d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_PLURAL"
351259d709d503bab6e2b61931737e662dd293b40578ccornelius    };
351350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0;
3516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) {
3517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    printf("loop: %d\n", deadloop++);
3518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
351959d709d503bab6e2b61931737e662dd293b40578ccornelius    for (uint32_t i=0; i< sizeof(DATA)/sizeof(DATA[0]); ++i) {  /* i = test case #  - should be i=0*/
3520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius      for (int32_t kIndex = 2; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) {
352159d709d503bab6e2b61931737e662dd293b40578ccornelius        UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */
3522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
352859d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("#%d NumberFormat(%s, %s) Currency=%s\n",
352959d709d503bab6e2b61931737e662dd293b40578ccornelius              i, localeString, currencyStyleNames[kIndex],
353059d709d503bab6e2b61931737e662dd293b40578ccornelius              currencyISOCode);
353159d709d503bab6e2b61931737e662dd293b40578ccornelius
3532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
35346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
3538b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
354550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
354859d709d503bab6e2b61931737e662dd293b40578ccornelius        /*
3549b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        */
3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
355950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
356859d709d503bab6e2b61931737e662dd293b40578ccornelius            logln("parse(%s)", DATA[i][j]);
3569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
357559d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] +
357659d709d503bab6e2b61931737e662dd293b40578ccornelius                      "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+".  Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]");
3577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
357859d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble());
3579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
358059d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong());
3581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
358259d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)" round-trip would be: " + strBuf);
3583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
358650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
3591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() {
3596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[] = {
3597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US DOLLAR",  // case in-sensitive
3598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
3599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
3600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
3601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
3602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
360354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "A$1.00",
3604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFN1.00",
3611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ALL1.00",
3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AMD1.00",
3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ANG1.00",
3614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOA1.00",
3615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "ARS1.00",
3622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARS1.00",
3627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AUD1.00",
3630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AWG1.00",
3631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZN1.00",
363459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u20132002)1.00",
363559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan afghani (1927\\u20132002)1.00",
3636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghani1.00",
3637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghanis1.00",
3638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Lek1.00",
3639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek1.00",
3640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek\\u00eb1.00",
3641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dinar1.00",
3642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinar1.00",
3643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinars1.00",
3644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peseta1.00",
3645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran peseta1.00",
3646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran pesetas1.00",
364759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u20131991)1.00",
364859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u20131999)1.00",
3649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanza1.00",
365059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u20132000)1.00",
365159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanza (1977\\u20131991)1.00",
365259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanza (1995\\u20131999)1.00",
3653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanza1.00",
365459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanzas (1977\\u20131991)1.00",
365559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanzas (1995\\u20131999)1.00",
3656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanzas1.00",
365759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanza (1990\\u20132000)1.00",
365859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanzas (1990\\u20132000)1.00",
3659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austral1.00",
366059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u20131985)1.00",
3661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Peso1.00",
3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine austral1.00",
3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine australs1.00",
366459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine peso (1983\\u20131985)1.00",
3665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine peso1.00",
366659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine pesos (1983\\u20131985)1.00",
3667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine pesos1.00",
3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dram1.00",
3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian dram1.00",
3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian drams1.00",
3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Florin1.00",
3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban florin1.00",
3673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dollar1.00",
3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollar1.00",
3675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollars1.00",
3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schilling1.00",
3677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schilling1.00",
3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schillings1.00",
367959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u20132006)1.00",
3680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Manat1.00",
368159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manat (1993\\u20132006)1.00",
3682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manat1.00",
368359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manats (1993\\u20132006)1.00",
3684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manats1.00",
3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAM1.00",
3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BBD1.00",
3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BDT1.00",
3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEF1.00",
3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGL1.00",
3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BHD1.00",
3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BIF1.00",
3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BMD1.00",
3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BND1.00",
3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOB1.00",
3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRL1.00",
3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BTN1.00",
3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BWP1.00",
3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYR1.00",
3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZD1.00",
3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dollar1.00",
3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollar1.00",
3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollars1.00",
3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dinar1.00",
3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinar1.00",
3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinars1.00",
3734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Taka1.00",
3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi taka1.00",
3736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi takas1.00",
3737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dollar1.00",
3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollar1.00",
3739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollars1.00",
374059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u20131999)1.00",
3741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Ruble1.00",
374259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new ruble (1994\\u20131999)1.00",
374359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new rubles (1994\\u20131999)1.00",
3744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian ruble1.00",
3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian rubles1.00",
3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible)1.00",
3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial)1.00",
3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc1.00",
3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (convertible)1.00",
3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (financial)1.00",
3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc1.00",
3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (convertible)1.00",
3753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (financial)1.00",
3754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs1.00",
3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dollar1.00",
3756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollar1.00",
3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollars1.00",
3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dollar1.00",
3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollar1.00",
3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollars1.00",
3761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultrum1.00",
3762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrum1.00",
3763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrums1.00",
3764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdol1.00",
3765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Peso1.00",
3766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdol1.00",
3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdols1.00",
3768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian peso1.00",
3769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian pesos1.00",
3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivianos1.00",
3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mark1.00",
377459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00",
3775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible mark1.00",
3776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible marks1.00",
377759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinar (1992\\u20131994)1.00",
377859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinars (1992\\u20131994)1.00",
3779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pula1.00",
3780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pula1.00",
3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pulas1.00",
378259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzado (1989\\u20131990)1.00",
378359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzado (1986\\u20131989)1.00",
378459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u20131993)1.00",
378559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u20131986)1.00",
378659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1993\\u20131994)1.00",
3787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Real1.00",
378859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzado (1989\\u20131990)1.00",
378959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzados (1989\\u20131990)1.00",
379059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzado (1986\\u20131989)1.00",
379159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzados (1986\\u20131989)1.00",
379259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1990\\u20131993)1.00",
379359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiro (1967\\u20131986)1.00",
379459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1993\\u20131994)1.00",
379559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1990\\u20131993)1.00",
379659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiros (1967\\u20131986)1.00",
379759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1993\\u20131994)1.00",
3798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian real1.00",
3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian reals1.00",
3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British Pound Sterling1.00",
3801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British pound sterling1.00",
380250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "British pounds sterling1.00",
3803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dollar1.00",
3804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollar1.00",
3805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollars1.00",
3806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Lev1.00",
3807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Lev1.00",
3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Leva1.00",
3809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard lev1.00",
3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard leva1.00",
3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian lev1.00",
3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kyat1.00",
3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyat1.00",
3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyats1.00",
3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Franc1.00",
3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian franc1.00",
3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian francs1.00",
3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA$1.00",
3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CAD1.00",
3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BCEAO1.00",
3823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BEAC1.00",
3824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA franc BCEAO1.00",
3825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA franc BEAC1.00",
3826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA francs BCEAO1.00",
3827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA francs BEAC1.00",
3828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Franc1.00",
3829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP franc1.00",
3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP francs1.00",
3831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFPF1.00",
3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHF1.00",
3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLP1.00",
3840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CNY1.00",
3841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COP1.00",
3842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CRC1.00",
3845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CVE1.00",
3852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CYP1.00",
3853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZK1.00",
3854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Riel1.00",
3855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riel1.00",
3856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riels1.00",
3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dollar1.00",
3858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollar1.00",
3859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollars1.00",
3860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escudo1.00",
3861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudo1.00",
3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudos1.00",
3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dollar1.00",
3864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollar1.00",
3865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollars1.00",
3866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Peso1.00",
386727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Account (UF)1.00",
3868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean peso1.00",
3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean pesos1.00",
387027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean unit of account (UF)1.00",
387127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean units of account (UF)1.00",
387227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yuan1.00",
3873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chinese yuan1.00",
3874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Peso1.00",
3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian peso1.00",
3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian pesos1.00",
3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian Franc1.00",
3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian franc1.00",
3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian francs1.00",
3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Franc1.00",
3881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese franc1.00",
3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese francs1.00",
3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f3n1.00",
3884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3n1.00",
3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3ns1.00",
3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dinar1.00",
3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kuna1.00",
3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinar1.00",
3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinars1.00",
3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kuna1.00",
3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kunas1.00",
3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Peso1.00",
3893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban peso1.00",
3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban pesos1.00",
3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Pound1.00",
3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pound1.00",
3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pounds1.00",
3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Koruna1.00",
3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic koruna1.00",
3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic korunas1.00",
3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Koruna1.00",
3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard koruna1.00",
3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard korunas1.00",
3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJF1.00",
3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DKK1.00",
3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DOP1.00",
3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZD1.00",
3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Krone1.00",
3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish krone1.00",
3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish kroner1.00",
3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mark1.00",
3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German mark1.00",
3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German marks1.00",
3918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Franc1.00",
3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian franc1.00",
3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian francs1.00",
3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Peso1.00",
3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican peso1.00",
3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican pesos1.00",
3924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC$1.00",
3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESP1.00",
3940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ETB1.00",
3941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EUR1.00",
3942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dollar1.00",
3943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollar1.00",
3944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollars1.00",
3945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Mark1.00",
3946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German mark1.00",
3947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German marks1.00",
3948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucre1.00",
394927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Value1.00",
3950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucre1.00",
3951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucres1.00",
395227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian unit of constant value1.00",
395327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian units of constant value1.00",
3954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Pound1.00",
3955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pound1.00",
3956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pounds1.00",
3957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f3n1.00",
3958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran col\\u00f3n1.00",
3959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran colones1.00",
3960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwele1.00",
3961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean ekwele1.00",
3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakfa1.00",
3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfa1.00",
3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfas1.00",
3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroon1.00",
3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroon1.00",
3967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroons1.00",
3968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Birr1.00",
3969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birr1.00",
3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birrs1.00",
3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Euro1.00",
3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Unit1.00",
3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Unit1.00",
3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Unit1.00",
3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC)1.00",
3976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD)1.00",
3977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite unit1.00",
3978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite units1.00",
3979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency unit1.00",
3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency units1.00",
3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary unit1.00",
3982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary units1.00",
3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBC)1.00",
3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBD)1.00",
3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBC)1.00",
3986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBD)1.00",
3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJD1.00",
3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Pound1.00",
3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pound1.00",
3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pounds1.00",
3997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dollar1.00",
3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollar1.00",
3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollars1.00",
4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markka1.00",
4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markka1.00",
4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markkas1.00",
400350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "CHF1.00",
4004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Franc1.00",
4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Franc1.00",
4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Franc1.00",
4007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-franc1.00",
4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-francs1.00",
4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French franc1.00",
4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French francs1.00",
4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold franc1.00",
4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold francs1.00",
4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GBP1.00",
4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEL1.00",
4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHS1.00",
4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNF1.00",
4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GYD1.00",
4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalasi1.00",
4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasi1.00",
4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasis1.00",
4040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Larit1.00",
4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lari1.00",
4042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larit1.00",
4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larits1.00",
4044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian lari1.00",
4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian laris1.00",
404659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u20132007)1.00",
4047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Cedi1.00",
404859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedi (1979\\u20132007)1.00",
4049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedi1.00",
405059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedis (1979\\u20132007)1.00",
4051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedis1.00",
4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Pound1.00",
4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pound1.00",
4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pounds1.00",
4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachma1.00",
4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachma1.00",
4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachmas1.00",
4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetzal1.00",
4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzal1.00",
4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzals1.00",
4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Franc1.00",
4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syli1.00",
4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean franc1.00",
4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean francs1.00",
4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean syli1.00",
4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean sylis1.00",
4069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Peso1.00",
4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau peso1.00",
4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau pesos1.00",
4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dollar1.00",
4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollar1.00",
4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollars1.00",
4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK$1.00",
4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HKD1.00",
4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HUF1.00",
4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourde1.00",
4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourde1.00",
4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourdes1.00",
4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempira1.00",
4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempira1.00",
4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempiras1.00",
4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dollar1.00",
4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollar1.00",
4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollars1.00",
4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forint1.00",
4095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forint1.00",
4096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forints1.00",
4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IDR1.00",
4098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IEP1.00",
4099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILS1.00",
4102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "INR1.00",
4103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQD1.00",
4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IRR1.00",
4105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ITL1.00",
4108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kr\\u00f3na1.00",
4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3na1.00",
4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3nur1.00",
4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupee1.00",
4112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupee1.00",
4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupees1.00",
4114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupiah1.00",
4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiah1.00",
4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiahs1.00",
4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Rial1.00",
4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rial1.00",
4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rials1.00",
4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dinar1.00",
4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinar1.00",
4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinars1.00",
4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Pound1.00",
4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pound1.00",
4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pounds1.00",
4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Pound1.00",
4127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli new sheqel1.00",
4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pound1.00",
4129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pounds1.00",
4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lira1.00",
4131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian lira1.00",
4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian liras1.00",
4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JMD1.00",
4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JOD1.00",
4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JPY1.00",
4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dollar1.00",
4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollar1.00",
4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollars1.00",
4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Yen1.00",
4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese yen1.00",
4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dinar1.00",
4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinar1.00",
4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinars1.00",
4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KES1.00",
4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KGS1.00",
4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KHR1.00",
4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KMF1.00",
4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KRW1.00",
4151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KWD1.00",
4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZT1.00",
415527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Tenge1.00",
415627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenge1.00",
415727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenges1.00",
4158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shilling1.00",
4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shilling1.00",
4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shillings1.00",
4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dinar1.00",
4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinar1.00",
4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinars1.00",
4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani Som1.00",
4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani som1.00",
4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani soms1.00",
4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LBP1.00",
4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LKR1.00",
4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LSL1.00",
4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LYD1.00",
4190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Kip1.00",
4191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kip1.00",
4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kips1.00",
4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lats1.00",
4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Ruble1.00",
4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian lats1.00",
4196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "Latvian lati1.00",
4197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian ruble1.00",
4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian rubles1.00",
4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Pound1.00",
4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pound1.00",
4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pounds1.00",
4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Loti1.00",
4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho loti1.00",
4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho lotis1.00",
4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dollar1.00",
4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollar1.00",
4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollars1.00",
4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dinar1.00",
4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinar1.00",
4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinars1.00",
4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Litas1.00",
4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talonas1.00",
4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litas1.00",
4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litai1.00",
4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonas1.00",
4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonases1.00",
4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Franc1.00",
4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Franc1.00",
4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Franc1.00",
4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible franc1.00",
4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible francs1.00",
4222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial franc1.00",
4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial francs1.00",
4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian franc1.00",
4225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian francs1.00",
4226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX$1.00",
4233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MKD1.00",
4238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MNT1.00",
4243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MRO1.00",
4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTL1.00",
4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MWK1.00",
4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXN1.00",
4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MYR1.00",
4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZM1.00",
4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZN1.00",
4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Pataca1.00",
4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese pataca1.00",
4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese patacas1.00",
4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Denar1.00",
4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denar1.00",
4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denari1.00",
4270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariaries1.00",
4271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Franc1.00",
4274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy franc1.00",
4275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy francs1.00",
4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwachas1.00",
4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgit1.00",
4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgit1.00",
4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgits1.00",
4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiyaa1.00",
4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaa1.00",
4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaas1.00",
4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Franc1.00",
4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian franc1.00",
4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian francs1.00",
4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lira1.00",
4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Pound1.00",
4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pound1.00",
4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pounds1.00",
4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiya1.00",
4295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiya1.00",
4296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiyas1.00",
4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupee1.00",
4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupee1.00",
4299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupees1.00",
4300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Peso1.00",
430159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u20131992)1.00",
430227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Unit1.00",
4303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican peso1.00",
4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican pesos1.00",
430559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver peso (1861\\u20131992)1.00",
430659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver pesos (1861\\u20131992)1.00",
430727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment unit1.00",
430827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment units1.00",
4309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Leu1.00",
4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan leu1.00",
4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan lei1.00",
4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugrik1.00",
4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugrik1.00",
4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugriks1.00",
4315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirham1.00",
4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Franc1.00",
4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirham1.00",
4318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirhams1.00",
4319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan franc1.00",
4320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan francs1.00",
4321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escudo1.00",
4322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metical1.00",
4323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudo1.00",
4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudos1.00",
4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican metical1.00",
4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican meticals1.00",
432759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kyat1.00",
432859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyat1.00",
432959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyats1.00",
4330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAD1.00",
4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NGN1.00",
4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIC1.00",
4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NOK1.00",
4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NPR1.00",
4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT$1.00",
4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZ$1.00",
4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZD1.00",
4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dollar1.00",
4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollar1.00",
4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollars1.00",
4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupee1.00",
4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupee1.00",
4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupees1.00",
4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilder1.00",
4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilder1.00",
4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilders1.00",
4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilder1.00",
4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilder1.00",
4353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilders1.00",
4354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqel1.00",
4355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqels1.00",
4356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dollar1.00",
4357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollar1.00",
4358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollars1.00",
435927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdoba1.00",
436059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00",
436127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdoba1.00",
436227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdobas1.00",
436359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00",
436459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00",
4365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Naira1.00",
4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian naira1.00",
4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian nairas1.00",
4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Won1.00",
4369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Krone1.00",
4372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian krone1.00",
4373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian kroner1.00",
4374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OMR1.00",
437559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican Metical (1980\\u20132006)1.00",
437659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican metical (1980\\u20132006)1.00",
437759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican meticals (1980\\u20132006)1.00",
437859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Lei (1952\\u20132006)1.00",
437959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u20132006)1.00",
438059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian leu (1952\\u20132006)1.00",
438159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u20132006)1.00",
438259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinar (2002\\u20132006)1.00",
438359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinars (2002\\u20132006)1.00",
438459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u20132007)1.00",
438559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u20131998)1.00",
438659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinar (1992\\u20132007)1.00",
438759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinars (1992\\u20132007)1.00",
438859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pound (1957\\u20131998)1.00",
438959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pounds (1957\\u20131998)1.00",
439059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
439159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
4392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Rial1.00",
4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rial1.00",
4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rials1.00",
4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PHP1.00",
4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PKR1.00",
4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLN1.00",
4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PYG1.00",
4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupee1.00",
4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupee1.00",
4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupees1.00",
4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balboa1.00",
4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboa1.00",
4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboas1.00",
4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kina1.00",
4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guarani1.00",
4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guarani1.00",
4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guaranis1.00",
4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Inti1.00",
4428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Nuevo Sol1.00",
442959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u20131965)1.00",
4430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian inti1.00",
4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian intis1.00",
4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevo sol1.00",
4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevos soles1.00",
443459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian sol (1863\\u20131965)1.00",
443559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian soles (1863\\u20131965)1.00",
4436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Peso1.00",
4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine peso1.00",
4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine pesos1.00",
4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
444159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u20131995)1.00",
4442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zloty1.00",
4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys1.00",
4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty (PLZ)1.00",
4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty1.00",
4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys (PLZ)1.00",
4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escudo1.00",
4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escudo1.00",
4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudo1.00",
4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudos1.00",
4451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudo1.00",
4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudos1.00",
4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QAR1.00",
4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Rial1.00",
4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rial1.00",
4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rials1.00",
4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN\\u00a51.00",
4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dollar1.00",
4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollar1.00",
4477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollars1.00",
4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Leu1.00",
4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian lei1.00",
4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian leu1.00",
448159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u20131998)1.00",
4482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Ruble1.00",
448359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian ruble (1991\\u20131998)1.00",
4484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian ruble1.00",
448559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian rubles (1991\\u20131998)1.00",
4486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian rubles1.00",
4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Franc1.00",
4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan franc1.00",
4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan francs1.00",
4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SAR1.00",
4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SBD1.00",
4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SCR1.00",
4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SEK1.00",
4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SGD1.00",
4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SKK1.00",
4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SOS1.00",
4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRG1.00",
4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "STD1.00",
4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SYP1.00",
4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZL1.00",
4519f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena Pound1.00",
4520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena pound1.00",
4521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena pounds1.00",
4522f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra1.00",
4523f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra1.00",
4524f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras1.00",
4525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riyal1.00",
4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyal1.00",
4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyals1.00",
4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dinar1.00",
4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinar1.00",
4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinars1.00",
4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupee1.00",
4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupee1.00",
4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupees1.00",
4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leone1.00",
4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leone1.00",
4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leones1.00",
4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dollar1.00",
4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollar1.00",
4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollars1.00",
4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Koruna1.00",
4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak koruna1.00",
4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak korunas1.00",
4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tolar1.00",
4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolar1.00",
4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolars1.00",
4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dollar1.00",
4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollar1.00",
4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollars1.00",
4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shilling1.00",
4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shilling1.00",
4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shillings1.00",
4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial)1.00",
4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand1.00",
4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand (financial)1.00",
4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rands (financial)1.00",
4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Won1.00",
4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Rouble1.00",
4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet rouble1.00",
4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet roubles1.00",
4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account)1.00",
4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account)1.00",
4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta1.00",
4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (A account)1.00",
4570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (convertible account)1.00",
4571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta1.00",
4572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (A account)1.00",
4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (convertible account)1.00",
4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas1.00",
4575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Rights1.00",
457627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupee1.00",
457727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupee1.00",
457827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupees1.00",
4579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Pound1.00",
4580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pound1.00",
4581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pounds1.00",
4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dollar1.00",
4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollar1.00",
4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollars1.00",
458527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilder1.00",
458627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilder1.00",
458727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilders1.00",
4588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangeni1.00",
4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi lilangeni1.00",
4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi emalangeni1.00",
4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Krona1.00",
4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish krona1.00",
4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish kronor1.00",
4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Franc1.00",
4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss franc1.00",
4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss francs1.00",
4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Pound1.00",
4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pound1.00",
4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pounds1.00",
4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "THB1.00",
4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TOP1.00",
4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRL1.00",
4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TTD1.00",
4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TWD1.00",
4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZS1.00",
4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dollar1.00",
4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollar1.00",
4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollars1.00",
4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Ruble1.00",
4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somoni1.00",
4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani ruble1.00",
4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani rubles1.00",
4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somoni1.00",
4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somonis1.00",
4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shilling1.00",
4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shilling1.00",
4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shillings1.00",
4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Baht1.00",
4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escudo1.00",
4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudo1.00",
4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudos1.00",
4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u02bbanga1.00",
4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4641f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago Dollar1.00",
4642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago dollar1.00",
4643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago dollars1.00",
4644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dinar1.00",
4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinar1.00",
4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinars1.00",
4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish lira1.00",
4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Manat1.00",
4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirham1.00",
4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirhams1.00",
4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAH1.00",
4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGX1.00",
4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day)1.00",
4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day)1.00",
4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar1.00",
4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (next day)1.00",
4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (same day)1.00",
4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (next day)1.00",
4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (same day)1.00",
4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYU1.00",
4680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
468259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u20131987)1.00",
4683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shilling1.00",
468459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shilling (1966\\u20131987)1.00",
4685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shilling1.00",
468659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shillings (1966\\u20131987)1.00",
4687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shillings1.00",
4688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvnia1.00",
4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanets1.00",
4690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnia1.00",
4691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnias1.00",
4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovanets1.00",
4693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovantsiv1.00",
469427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Unit1.00",
4695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirham1.00",
469627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currency1.00",
469759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan Peso (1975\\u20131993)1.00",
4698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan Peso1.00",
469927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan Peso (Indexed Units)1.00",
470059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan peso (1975\\u20131993)1.00",
470127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan peso (indexed units)1.00",
4702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan peso1.00",
470359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan pesos (1975\\u20131993)1.00",
470427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan pesos (indexed units)1.00",
4705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan pesos1.00",
4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan Som1.00",
4707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan som1.00",
4708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan som1.00",
4709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEB1.00",
4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEF1.00",
4711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VND1.00",
4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VUV1.00",
4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vatu1.00",
4714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatu1.00",
4715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatus1.00",
4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar1.00",
471759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00",
4718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvar1.00",
4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvars1.00",
472059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvar (1871\\u20132008)1.00",
472159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvars (1871\\u20132008)1.00",
4722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Dong1.00",
4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Euro1.00",
4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Franc1.00",
4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euro1.00",
4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euros1.00",
4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR franc1.00",
4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR francs1.00",
4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan Tala1.00",
4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XCD1.00",
4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPF1.00",
4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YER1.00",
4775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dinar1.00",
4782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Rial1.00",
4783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinar1.00",
4784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinars1.00",
4785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rial1.00",
4786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rials1.00",
478759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Convertible Dinar (1990\\u20131992)1.00",
478859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u20131990)1.00",
478959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian New Dinar (1994\\u20132002)1.00",
479059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinar (1990\\u20131992)1.00",
479159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinars (1990\\u20131992)1.00",
479259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinar (1966\\u20131990)1.00",
479359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinars (1966\\u20131990)1.00",
479459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinar (1994\\u20132002)1.00",
479559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinars (1994\\u20132002)1.00",
4796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAR1.00",
4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZWD1.00",
480659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u20131998)1.00",
480759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean Zaire (1971\\u20131993)1.00",
480859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaire (1993\\u20131998)1.00",
480959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaires (1993\\u20131998)1.00",
481059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaire (1971\\u20131993)1.00",
481159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaires (1971\\u20131993)1.00",
4812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwacha1.00",
4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwacha1.00",
4814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwachas1.00",
481559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u20132008)1.00",
481659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollar (1980\\u20132008)1.00",
481759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollars (1980\\u20132008)1.00",
4818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euro1.00",
4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euros1.00",
482059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish lira (1922\\u20132005)1.00",
4821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "special drawing rights1.00",
482227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value unit1.00",
482327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value units1.00",
4824b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "unknown currency1.00",
4825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a31.00",
4826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a51.00",
4827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ab1.00",
4828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20aa1.00",
4829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ac1.00",
4830786288bd87363f3f86c1211ef7e1fb94aa9a40f7Fredrik Roubert        "\\u20b91.00",
4831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        //
4832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following has extra text, should be parsed correctly too
4833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00 random",
4834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00 random",
4835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
4836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
4837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
4838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
483959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Afghan Afghanis (1927\\u20131992) random",
4840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghanis random",
4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian Lek random",
4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian lek random",
484350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "1.00 Albanian lek\\u00eb random",
4844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian Dinar random",
4845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinar random",
4846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinars random",
4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran Peseta random",
4848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran peseta random",
4849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran pesetas random",
485059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Kwanza (1977\\u20131990) random",
485159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random",
4852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan Kwanza random",
485359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan New Kwanza (1990\\u20132000) random",
485459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanza (1977\\u20131991) random",
485559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanza (1995\\u20131999) random",
4856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanza random",
485759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanzas (1977\\u20131991) random",
485859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanzas (1995\\u20131999) random",
4859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanzas random",
486059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanza (1990\\u20132000) random",
486159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanzas (1990\\u20132000) random",
4862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Austral random",
486359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine Peso (1983\\u20131985) random",
4864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Peso random",
4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine austral random",
4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine australs random",
486759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine peso (1983\\u20131985) random",
4868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine peso random",
486959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine pesos (1983\\u20131985) random",
4870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine pesos random",
4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian Dram random",
4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian dram random",
4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian drams random",
4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban Florin random",
4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban florin random",
4876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian Dollar random",
4877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollar random",
4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollars random",
4879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian Schilling random",
4880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schilling random",
4881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schillings random",
488259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani Manat (1993\\u20132006) random",
4883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani Manat random",
488459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manat (1993\\u20132006) random",
4885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manat random",
488659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manats (1993\\u20132006) random",
4887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manats random",
4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian Dollar random",
4889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollar random",
4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollars random",
4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini Dinar random",
4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinar random",
4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinars random",
4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi Taka random",
4895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi taka random",
4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi takas random",
4897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian Dollar random",
4898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollar random",
4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollars random",
490059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian New Ruble (1994\\u20131999) random",
4901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian Ruble random",
490259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new ruble (1994\\u20131999) random",
490359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new rubles (1994\\u20131999) random",
4904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian ruble random",
4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian rubles random",
4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (convertible) random",
4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (financial) random",
4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc random",
4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (convertible) random",
4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (financial) random",
4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc random",
4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (convertible) random",
4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (financial) random",
4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs random",
4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize Dollar random",
4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollar random",
4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollars random",
4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan Dollar random",
4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollar random",
4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollars random",
4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese Ngultrum random",
4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrum random",
4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrums random",
4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Mvdol random",
4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Peso random",
4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdol random",
4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdols random",
4928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian peso random",
4929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian pesos random",
4930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Bolivianos random",
4933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina Convertible Mark random",
493459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random",
4935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible mark random",
4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible marks random",
493759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random",
493859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random",
4939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan Pula random",
4940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pula random",
4941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pulas random",
494259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzado (1989\\u20131990) random",
494359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzado (1986\\u20131989) random",
494459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1990\\u20131993) random",
494559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzeiro (1967\\u20131986) random",
494659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1993\\u20131994) random",
4947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian Real random",
494859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzado (1989\\u20131990) random",
494959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzados (1989\\u20131990) random",
495059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzado (1986\\u20131989) random",
495159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzados (1986\\u20131989) random",
495259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1990\\u20131993) random",
495359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiro (1967\\u20131986) random",
495459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1993\\u20131994) random",
495559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1990\\u20131993) random",
495659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiros (1967\\u20131986) random",
495759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1993\\u20131994) random",
4958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian real random",
4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian reals random",
4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 British Pound Sterling random",
4961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 British pound sterling random",
496250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "1.00 British pounds sterling random",
4963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei Dollar random",
4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollar random",
4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollars random",
4966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Hard Lev random",
4967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Lev random",
4968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Leva random",
4969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard lev random",
4970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard leva random",
4971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian lev random",
4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese Kyat random",
4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyat random",
4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyats random",
4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian Franc random",
4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian franc random",
4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian francs random",
4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian Riel random",
4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riel random",
4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riels random",
4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian Dollar random",
4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollar random",
4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollars random",
4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean Escudo random",
4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudo random",
4986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudos random",
4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands Dollar random",
4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollar random",
4989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollars random",
4990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean Peso random",
499127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean Unit of Account (UF) random",
4992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean peso random",
4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean pesos random",
499427f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean unit of account (UF) random",
499527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean units of account (UF) random",
499627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chinese Yuan random",
4997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chinese yuan random",
4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian Peso random",
4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian peso random",
5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian pesos random",
5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian Franc random",
5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian franc random",
5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian francs random",
5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese Franc Congolais random",
5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese franc Congolais random",
5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese francs Congolais random",
5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican Col\\u00f3n random",
5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3n random",
5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3ns random",
5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Dinar random",
5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Kuna random",
5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinar random",
5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinars random",
5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kuna random",
5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kunas random",
5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban Peso random",
5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban peso random",
5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban pesos random",
5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot Pound random",
5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pound random",
5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pounds random",
5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic Koruna random",
5023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic koruna random",
5024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic korunas random",
5025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak Hard Koruna random",
5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard koruna random",
5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard korunas random",
5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish Krone random",
5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish krone random",
5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish kroner random",
5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German Mark random",
5032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German mark random",
5033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German marks random",
5034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian Franc random",
5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian franc random",
5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian francs random",
5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican Peso random",
5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican peso random",
5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican pesos random",
5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean Dollar random",
5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollar random",
5042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollars random",
5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German Mark random",
5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German mark random",
5045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German marks random",
5046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian Sucre random",
504727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian Unit of Constant Value random",
5048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucre random",
5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucres random",
505027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian unit of constant value random",
505127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian units of constant value random",
5052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian Pound random",
5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pound random",
5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pounds random",
5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran Col\\u00f3n random",
5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran col\\u00f3n random",
5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran colones random",
5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean Ekwele random",
5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean ekwele random",
5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean Nakfa random",
5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfa random",
5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfas random",
5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian Kroon random",
5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroon random",
5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroons random",
5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian Birr random",
5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birr random",
5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birrs random",
5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Composite Unit random",
5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Currency Unit random",
5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Monetary Unit random",
5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBC) random",
5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBD) random",
5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite unit random",
5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite units random",
5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency unit random",
5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency units random",
5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary unit random",
5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary units random",
5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBC) random",
5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBD) random",
5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBC) random",
5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBD) random",
5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands Pound random",
5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pound random",
5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pounds random",
5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian Dollar random",
5088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollar random",
5089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollars random",
5090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish Markka random",
5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markka random",
5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markkas random",
5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Franc random",
5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Gold Franc random",
5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-Franc random",
5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-franc random",
5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-francs random",
5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French franc random",
5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French francs random",
5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold franc random",
5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold francs random",
5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian Dalasi random",
5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasi random",
5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasis random",
5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Kupon Larit random",
5106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Lari random",
5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larit random",
5108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larits random",
5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian lari random",
5110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian laris random",
511159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian Cedi (1979\\u20132007) random",
5112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian Cedi random",
511359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedi (1979\\u20132007) random",
5114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedi random",
511559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedis (1979\\u20132007) random",
5116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedis random",
5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar Pound random",
5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pound random",
5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pounds random",
5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek Drachma random",
5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachma random",
5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachmas random",
5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan Quetzal random",
5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzal random",
5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzals random",
5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Franc random",
5129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Syli random",
5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean franc random",
5131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean francs random",
5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean syli random",
5133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean sylis random",
5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau Peso random",
5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau peso random",
5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau pesos random",
5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese Dollar random",
5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollar random",
5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollars random",
5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian Gourde random",
5141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourde random",
5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourdes random",
5143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran Lempira random",
5144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempira random",
5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempiras random",
5146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong Dollar random",
5147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollar random",
5148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollars random",
5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian Forint random",
5150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forint random",
5151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forints random",
5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic Kr\\u00f3na random",
5153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3na random",
5154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3nur random",
5155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian Rupee random",
5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupee random",
5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupees random",
5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian Rupiah random",
5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiah random",
5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiahs random",
5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian Rial random",
5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rial random",
5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rials random",
5164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi Dinar random",
5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinar random",
5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinars random",
5167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish Pound random",
5168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pound random",
5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pounds random",
5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli Pound random",
5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqel random",
5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pound random",
5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pounds random",
5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian Lira random",
5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian lira random",
5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian liras random",
5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican Dollar random",
5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollar random",
5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollars random",
5180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese Yen random",
5181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese yen random",
5182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian Dinar random",
5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinar random",
5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinars random",
518527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani Tenge random",
518627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenge random",
518727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenges random",
5188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan Shilling random",
5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shilling random",
5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shillings random",
5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti Dinar random",
5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinar random",
5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinars random",
5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani Som random",
5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani som random",
5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani soms random",
5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian Kip random",
5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kip random",
5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kips random",
5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Lats random",
5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Ruble random",
5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lats random",
5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lati random",
5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian ruble random",
5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian rubles random",
5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese Pound random",
5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pound random",
5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pounds random",
5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho Loti random",
5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho loti random",
5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho lotis random",
5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian Dollar random",
5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollar random",
5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollars random",
5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan Dinar random",
5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinar random",
5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinars random",
5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Litas random",
5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Talonas random",
5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litas random",
5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litai random",
5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonas random",
5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonases random",
5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Convertible Franc random",
5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg Financial Franc random",
5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Franc random",
5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible franc random",
5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible francs random",
5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial franc random",
5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial francs random",
5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian franc random",
5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian francs random",
5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese Pataca random",
5234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese pataca random",
5235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese patacas random",
5236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian Denar random",
5237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denar random",
5238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denari random",
5239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariaries random",
5240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Franc random",
5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy franc random",
5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy francs random",
5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwachas random",
5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian Ringgit random",
5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgit random",
5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgits random",
5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian Rufiyaa random",
5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaa random",
5253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaas random",
5254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian Franc random",
5255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian franc random",
5256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian francs random",
5257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Lira random",
5258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Pound random",
5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese lira random",
5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese liras random",
5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pound random",
5262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pounds random",
5263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian Ouguiya random",
5264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiya random",
5265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiyas random",
5266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian Rupee random",
5267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupee random",
5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupees random",
5269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican Peso random",
527059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican Silver Peso (1861\\u20131992) random",
527127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican Investment Unit random",
5272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican peso random",
5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican pesos random",
527459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver peso (1861\\u20131992) random",
527559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver pesos (1861\\u20131992) random",
527627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment unit random",
527727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment units random",
5278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan Leu random",
5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan leu random",
5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan lei random",
5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian Tugrik random",
5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugrik random",
5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugriks random",
5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Dirham random",
5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Franc random",
5286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirham random",
5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirhams random",
5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan franc random",
5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan francs random",
5290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Escudo random",
5291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Metical random",
5292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudo random",
5293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudos random",
5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican metical random",
5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican meticals random",
529659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar Kyat random",
529759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyat random",
529859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyats random",
5299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dollar random",
5300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollar random",
5301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollars random",
5302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupee random",
5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupee random",
5304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupees random",
5305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilder random",
5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilder random",
5307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilders random",
5308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilder random",
5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilder random",
5310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilders random",
5311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqel random",
5312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqels random",
5313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dollar random",
5314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollar random",
5315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollars random",
531627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan C\\u00f3rdoba random",
531759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random",
531827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
531927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
532059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random",
532159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random",
5322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Naira random",
5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian naira random",
5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nairas random",
5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Won random",
5326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Krone random",
5329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian krone random",
5330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kroner random",
533159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican Metical (1980\\u20132006) random",
533259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican metical (1980\\u20132006) random",
533359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican meticals (1980\\u20132006) random",
533459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Lei (1952\\u20132006) random",
533559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Leu (1952\\u20132006) random",
533659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian leu (1952\\u20132006) random",
533759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian Dinar (2002\\u20132006) random",
533859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinar (2002\\u20132006) random",
533959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinars (2002\\u20132006) random",
534059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Dinar (1992\\u20132007) random",
534159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Pound (1957\\u20131998) random",
534259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinar (1992\\u20132007) random",
534359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinars (1992\\u20132007) random",
534459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pound (1957\\u20131998) random",
534559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pounds (1957\\u20131998) random",
534659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
534759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
5348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani Rial random",
5349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rial random",
5350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rials random",
5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani Rupee random",
5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupee random",
5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupees random",
5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian Balboa random",
5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboa random",
5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboas random",
5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean Kina random",
5360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean kina random",
5361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Papua New Guinean kina random",
5362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan Guarani random",
5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guarani random",
5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guaranis random",
5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Inti random",
5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Nuevo Sol random",
536759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian Sol (1863\\u20131965) random",
5368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian inti random",
5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian intis random",
5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevo sol random",
5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevos soles random",
537259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian sol (1863\\u20131965) random",
537359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian soles (1863\\u20131965) random",
5374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine Peso random",
5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine peso random",
5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine pesos random",
5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
537959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Polish Zloty (1950\\u20131995) random",
5380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish Zloty random",
5381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys random",
5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty (PLZ) random",
5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty random",
5384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys (PLZ) random",
5385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Escudo random",
5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea Escudo random",
5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudo random",
5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudos random",
5389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudo random",
5390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudos random",
5391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari Rial random",
5392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rial random",
5393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rials random",
5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian Dollar random",
5397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollar random",
5398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollars random",
5399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian Leu random",
5400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian lei random",
5401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian leu random",
540259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian Ruble (1991\\u20131998) random",
5403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian Ruble random",
540459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian ruble (1991\\u20131998) random",
5405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian ruble random",
540659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian rubles (1991\\u20131998) random",
5407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian rubles random",
5408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan Franc random",
5409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan franc random",
5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan francs random",
5411f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena Pound random",
5412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena pound random",
5413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena pounds random",
5414f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra random",
5415f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra random",
5416f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras random",
5417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi Riyal random",
5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyal random",
5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyals random",
5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian Dinar random",
5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinar random",
5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinars random",
5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois Rupee random",
5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupee random",
5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupees random",
5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean Leone random",
5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leone random",
5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leones random",
5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore Dollar random",
5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollar random",
5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollars random",
5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak Koruna random",
5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak koruna random",
5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak korunas random",
5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian Tolar random",
5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolar random",
5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolars random",
5438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands Dollar random",
5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollar random",
5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollars random",
5441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali Shilling random",
5442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shilling random",
5443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shillings random",
5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand (financial) random",
5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand random",
5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand (financial) random",
5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rands (financial) random",
5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean Won random",
5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet Rouble random",
5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet rouble random",
5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet roubles random",
5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (A account) random",
5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (convertible account) random",
5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta random",
5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (A account) random",
5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (convertible account) random",
5461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta random",
5462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (A account) random",
5463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (convertible account) random",
5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas random",
5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Special Drawing Rights random",
546627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan Rupee random",
546727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupee random",
546827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupees random",
5469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese Pound random",
5470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pound random",
5471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pounds random",
5472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese Dollar random",
5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollar random",
5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollars random",
547527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese Guilder random",
547627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilder random",
547727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilders random",
5478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi Lilangeni random",
5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi lilangeni random",
5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi emalangeni random",
5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish Krona random",
5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish krona random",
5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish kronor random",
5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss Franc random",
5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss franc random",
5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss francs random",
5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian Pound random",
5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pound random",
5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pounds random",
5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan Dollar random",
5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollar random",
5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollars random",
5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Ruble random",
5494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Somoni random",
5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani ruble random",
5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani rubles random",
5497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somoni random",
5498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somonis random",
5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian Shilling random",
5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shilling random",
5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shillings random",
5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai Baht random",
5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese Escudo random",
5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudo random",
5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudos random",
5510f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago Dollar random",
5511f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago dollar random",
5512f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago dollars random",
5513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian Dinar random",
5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinar random",
5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinars random",
5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish lira random",
5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani Manat random",
5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Next day) random",
5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Same day) random",
5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar random",
5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (next day) random",
5526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (same day) random",
5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
5528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (next day) random",
5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (same day) random",
5530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
553159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan Shilling (1966\\u20131987) random",
5532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan Shilling random",
553359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shilling (1966\\u20131987) random",
5534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shilling random",
553559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shillings (1966\\u20131987) random",
5536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shillings random",
5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Hryvnia random",
5538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Karbovanets random",
5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnia random",
5540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnias random",
5541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovanets random",
5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovantsiv random",
554327f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian Real Value Unit random",
5544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 United Arab Emirates Dirham random",
554527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Unknown Currency random",
554659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan Peso (1975\\u20131993) random",
5547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan Peso random",
554827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan Peso (Indexed Units) random",
554959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan peso (1975\\u20131993) random",
555027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan peso (indexed units) random",
5551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan peso random",
555259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan pesos (1975\\u20131993) random",
555327f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan pesos (indexed units) random",
5554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan Som random",
5555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan som random",
5556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uzbekistan som random",
5557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu Vatu random",
5558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatu random",
5559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatus random",
5560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan Bol\\u00edvar random",
556159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random",
5562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvar random",
5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvars random",
556459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random",
556559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random",
5566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese Dong random",
5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Euro random",
5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Franc random",
5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euro random",
5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euros random",
5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR franc random",
5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR francs random",
5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan Tala random",
5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Dinar random",
5579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Rial random",
5580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinar random",
5581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinars random",
5582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rial random",
5583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rials random",
558459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random",
558559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random",
558659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian New Dinar (1994\\u20132002) random",
558759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinar (1990\\u20131992) random",
558859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinars (1990\\u20131992) random",
558959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinar (1966\\u20131990) random",
559059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinars (1966\\u20131990) random",
559159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinar (1994\\u20132002) random",
559259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinars (1994\\u20132002) random",
559359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean New Zaire (1993\\u20131998) random",
559459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean Zaire (1971\\u20131993) random",
559559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaire (1993\\u20131998) random",
559659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaires (1993\\u20131998) random",
559759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaire (1971\\u20131993) random",
559859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaires (1971\\u20131993) random",
5599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian Kwacha random",
5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwacha random",
5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwachas random",
560259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean Dollar (1980\\u20132008) random",
560359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollar (1980\\u20132008) random",
560459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollars (1980\\u20132008) random",
5605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euro random",
5606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euros random",
560759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish lira (1922\\u20132005) random",
5608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 special drawing rights random",
560927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value unit random",
561027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value units random",
5611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "1.00 unknown currency random",
5612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* WRONG_DATA[] = {
5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following are missing one last char in the currency name
5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "usd1.00", // case sensitive
5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan Cordob",
5618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dolla",
5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dolla",
5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupe",
5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupe",
5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilde",
5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilde",
5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilde",
5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilde",
5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqe",
5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dolla",
5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dolla",
5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan cordob",
5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Nair",
5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nair",
5632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Wo",
5633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean wo",
5634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Kron",
5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kron",
5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dolla",
5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00",
5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "A1.00",
5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AD1.00",
5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AE1.00",
5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AF1.00",
5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AL1.00",
5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AM1.00",
5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AN1.00",
5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AO1.00",
5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AR1.00",
5647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AT1.00",
5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AU1.00",
5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AW1.00",
5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZ1.00",
5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghan1.00",
565259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u201320021.00",
5653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afl1.00",
5654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Le1.00",
5655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dina1.00",
5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peset1.00",
5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanz1.00",
565859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u201319901.00",
565959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u201319991.00",
566059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u201320001.00",
5661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austra1.00",
5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Pes1.00",
566359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u201319851.00",
5664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dra1.00",
5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Flori1.00",
5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dolla1.00",
5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schillin1.00",
5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Mana1.00",
566959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u201320061.00",
5670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "B1.00",
5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BA1.00",
5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BB1.00",
5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BE1.00",
5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BG1.00",
5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BH1.00",
5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BI1.00",
5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BM1.00",
5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BN1.00",
5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BO1.00",
5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BR1.00",
5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BS1.00",
5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BT1.00",
5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BU1.00",
5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BW1.00",
5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BY1.00",
5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZ1.00",
5687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dolla1.00",
5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dina1.00",
5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Tak1.00",
5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dolla1.00",
5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bds1.00",
569259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u201319991.00",
5693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Rubl1.00",
5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Fran1.00",
5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible1.00",
5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial1.00",
5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dolla1.00",
5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dolla1.00",
5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultru1.00",
5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdo1.00",
5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Pes1.00",
5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivian1.00",
5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mar1.00",
5704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Dina1.00",
5705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pul1.00",
5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzad1.00",
5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzado Nov1.00",
5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzeir1.00",
570959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u201319931.00",
571059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u201319861.00",
5711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Rea1.00",
5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British Pound Sterlin1.00",
5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dolla1.00",
5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Le1.00",
5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Le1.00",
5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kya1.00",
5717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Fran1.00",
5718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "C1.00",
5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA1.00",
5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CD1.00",
5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BCEA1.00",
5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFA Franc BEA1.00",
5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Fran1.00",
5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP1.00",
5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CH1.00",
5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CL1.00",
5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN1.00",
5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CO1.00",
5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CS1.00",
5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CU1.00",
5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CV1.00",
5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CY1.00",
5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZ1.00",
5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Rie1.00",
5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dolla1.00",
5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escud1.00",
5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dolla1.00",
5738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Pes1.00",
573927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Accoun1.00",
574027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yua1.00",
5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Pes1.00",
5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comoro Fran1.00",
5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Fran1.00",
5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f31.00",
5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dina1.00",
5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kun1.00",
5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Pes1.00",
5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Poun1.00",
5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Korun1.00",
5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Korun1.00",
5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "D1.00",
5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DD1.00",
5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DE1.00",
5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJ1.00",
5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DK1.00",
5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DO1.00",
5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZ1.00",
5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Kron1.00",
5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mar1.00",
5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Fran1.00",
5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dk1.00",
5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Pes1.00",
5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC1.00",
5764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EE1.00",
5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EG1.00",
5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EQ1.00",
5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ER1.00",
5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ES1.00",
5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ET1.00",
5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EU1.00",
5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dolla1.00",
5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Ostmar1.00",
5773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucr1.00",
577427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Valu1.00",
5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Poun1.00",
5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ekwel1.00",
5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f31.00",
5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwel1.00",
5779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakf1.00",
5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Es1.00",
5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroo1.00",
5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Bir1.00",
5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eur1.00",
5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Uni1.00",
5785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Uni1.00",
5786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Uni1.00",
5787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC1.00",
5788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD1.00",
5789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "F1.00",
5790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FB1.00",
5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FI1.00",
5792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJ1.00",
5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FK1.00",
5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FR1.00",
5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Poun1.00",
5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fd1.00",
5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dolla1.00",
5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markk1.00",
5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fr1.00",
5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Fran1.00",
5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Fran1.00",
5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Fran1.00",
5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "G1.00",
5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GB1.00",
5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GE1.00",
5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GH1.00",
5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GI1.00",
5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GM1.00",
5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GN1.00",
5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQ1.00",
5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GR1.00",
5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GT1.00",
5813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GW1.00",
5814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GY1.00",
5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalas1.00",
5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Lari1.00",
5817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lar1.00",
5818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Ced1.00",
581959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u201320071.00",
5820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Poun1.00",
5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gol1.00",
5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachm1.00",
5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetza1.00",
5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Fran1.00",
5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syl1.00",
5826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Pes1.00",
5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dolla1.00",
5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK1.00",
5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HN1.00",
5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HR1.00",
5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HT1.00",
5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HU1.00",
5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourd1.00",
5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempir1.00",
5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dolla1.00",
5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forin1.00",
5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "I1.00",
5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IE1.00",
5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IL1.00",
5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IN1.00",
5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQ1.00",
5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IR1.00",
5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IS1.00",
5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IT1.00",
5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kron1.00",
5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupe1.00",
5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupia1.00",
5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Ria1.00",
5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dina1.00",
5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Poun1.00",
5851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Poun1.00",
5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lir1.00",
5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "J1.00",
5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JM1.00",
5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JO1.00",
5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JP1.00",
5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dolla1.00",
5858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Ye1.00",
5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dina1.00",
5860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K S1.00",
5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K1.00",
5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KE1.00",
5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KG1.00",
5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KH1.00",
5865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KP1.00",
5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KR1.00",
5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KW1.00",
5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KY1.00",
5869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZ1.00",
587027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Teng1.00",
5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shillin1.00",
5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dina1.00",
5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani So1.00",
5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LA1.00",
5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LB1.00",
5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LK1.00",
5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LR1.00",
5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LT1.00",
5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LU1.00",
5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LV1.00",
5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LY1.00",
5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Ki1.00",
5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lat1.00",
5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Rubl1.00",
5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Poun1.00",
5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Lot1.00",
5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dolla1.00",
5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dina1.00",
5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Lit1.00",
5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talona1.00",
5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Fran1.00",
5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Fran1.00",
5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Fran1.00",
5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MA1.00",
5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MD1.00",
5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDe1.00",
5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MEX1.00",
5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MG1.00",
5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ML1.00",
5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MM1.00",
5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MN1.00",
5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MO1.00",
5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MR1.00",
5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MT1.00",
5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MU1.00",
5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MV1.00",
5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MW1.00",
5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX1.00",
5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MY1.00",
5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZ1.00",
5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Patac1.00",
5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Dena1.00",
5913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariar1.00",
5914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Fran1.00",
5915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwach1.00",
5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgi1.00",
5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiya1.00",
5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Fran1.00",
5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malot1.00",
5920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lir1.00",
5921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Poun1.00",
5922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiy1.00",
5923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupe1.00",
5924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Pes1.00",
592559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u201319921.00",
592627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Uni1.00",
5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Le1.00",
5928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugri1.00",
5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirha1.00",
5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Fran1.00",
5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escud1.00",
5932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metica1.00",
593359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kya1.00",
5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "N1.00",
5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NA1.00",
5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAf1.00",
5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NG1.00",
5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NI1.00",
5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NK1.00",
5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NL1.00",
5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NO1.00",
5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NP1.00",
5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT1.00",
5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dolla1.00",
5945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupe1.00",
5946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilde1.00",
5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilde1.00",
5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqe1.00",
5949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dolla1.00",
595059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00",
595127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdob1.00",
5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Nair1.00",
5953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Wo1.00",
5954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Kron1.00",
5955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nr1.00",
5956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OM1.00",
5957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Old Mozambican Metica1.00",
595859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u201320061.00",
595959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u201320061.00",
596059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u201320071.00",
596159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u201319981.00",
596259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u201320051.00",
5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Ria1.00",
5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PA1.00",
5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PE1.00",
5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PG1.00",
5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PH1.00",
5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PK1.00",
5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PL1.00",
5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PT1.00",
5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PY1.00",
5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupe1.00",
5973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladiu1.00",
5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balbo1.00",
5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kin1.00",
5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guaran1.00",
5977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Int1.00",
597859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u201319651.00",
5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Sol Nuev1.00",
5980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Pes1.00",
5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinu1.00",
5982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zlot1.00",
598359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u201319951.00",
5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escud1.00",
5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escud1.00",
5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pr1.00",
5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QA1.00",
5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Ria1.00",
5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RD1.00",
5990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RH1.00",
5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Fund1.00",
5992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RS1.00",
5993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RU1.00",
5994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RW1.00",
5995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rb1.00",
5996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dolla1.00",
5997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Le1.00",
5998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Rubl1.00",
599959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u201319981.00",
6000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Fran1.00",
6001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S1.00",
6002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SA1.00",
6003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SB1.00",
6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SC1.00",
6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SD1.00",
6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SE1.00",
6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SG1.00",
6008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SH1.00",
6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SI1.00",
6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SK1.00",
6011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL R1.00",
6012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL1.00",
6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SO1.00",
6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ST1.00",
6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SU1.00",
6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SV1.00",
6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SY1.00",
6018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZ1.00",
6019f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena Poun1.00",
6020f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobr1.00",
6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riya1.00",
6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dina1.00",
6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupe1.00",
6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sh1.00",
6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leon1.00",
6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silve1.00",
6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dolla1.00",
6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Korun1.00",
6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tola1.00",
6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dolla1.00",
6031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shillin1.00",
6032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Ran1.00",
6033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial1.00",
6034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Wo1.00",
6035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Roubl1.00",
6036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peset1.00",
6037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account1.00",
6038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account1.00",
6039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Right1.00",
604027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupe1.00",
6041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Poun1.00",
6042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dolla1.00",
604327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilde1.00",
6044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangen1.00",
6045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Kron1.00",
6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Fran1.00",
6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Poun1.00",
6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "T S1.00",
6049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TH1.00",
6050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJ1.00",
6051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TM1.00",
6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TN1.00",
6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TO1.00",
6054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TP1.00",
6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TR1.00",
6056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TT1.00",
6057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TW1.00",
6058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZ1.00",
6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dolla1.00",
6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Rubl1.00",
6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somon1.00",
6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shillin1.00",
6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Cod1.00",
6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Bah1.00",
6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escud1.00",
6066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u20bbang1.00",
6067f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago Dolla1.00",
6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dina1.00",
6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lir1.00",
6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Mana1.00",
6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U S1.00",
6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U1.00",
6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UA1.00",
6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UG1.00",
6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dolla1.00",
6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day1.00",
6077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day1.00",
6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US1.00",
6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UY1.00",
6080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZ1.00",
6081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shillin1.00",
608259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u201319871.00",
6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvni1.00",
6084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanet1.00",
608527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Uni1.00",
6086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirha1.00",
608727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currenc1.00",
6088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ur1.00",
608959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguay Peso (1975\\u201319931.00",
6090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguay Peso Uruguay1.00",
609127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguay Peso (Indexed Units1.00",
6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uzbekistan So1.00",
6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "V1.00",
6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VE1.00",
6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VN1.00",
6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VU1.00",
6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vat1.00",
6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edva1.00",
6099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar Fuert1.00",
6100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Don1.00",
6101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Eur1.00",
6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Fran1.00",
6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WS1.00",
6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoa Tal1.00",
6105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XA1.00",
6106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XB1.00",
6107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XC1.00",
6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XD1.00",
6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XE1.00",
6110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XF1.00",
6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XO1.00",
6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XP1.00",
6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XR1.00",
6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XT1.00",
6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XX1.00",
6116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YD1.00",
6117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YE1.00",
6118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YU1.00",
6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dina1.00",
6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Ria1.00",
6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yugoslavian Convertible Dina1.00",
612259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u201319901.00",
612327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Yugoslavian New Dina1.00",
6124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Z1.00",
6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZA1.00",
6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZM1.00",
6127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZR1.00",
6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZW1.00",
612959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u201319981.00",
6130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zairean Zair1.00",
6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwach1.00",
613259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u201320081.00",
6133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "dra1.00",
6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "lar1.00",
6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "le1.00",
6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "man1.00",
6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "so1.00",
6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
6139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale locale("en_US");
6141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
6142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(DATA[i]);
6143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              if ( doubleVal != 1.0 ) {
6151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                  errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal);
6152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              }
6153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          } else {
6154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Failed to parse as currency: " + formatted);
61556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) {
6165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(WRONG_DATA[i]);
6166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal);
61746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
6183c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
618450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t);
618550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
618650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s;
618750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::string ss;
618850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::cout << s.toUTF8String(ss)
618950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
619050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
619150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool found[10];
619250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition fp;
619350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
619450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (tupleCount > 10) {
619550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("internal error, tupleCount too large", FALSE);
619650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  } else {
619750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
619850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      found[i] = FALSE;
619950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
620050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
620150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
620250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
620350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  while (iter.next(fp)) {
620450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UBool ok = FALSE;
620550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t id = fp.getField();
620650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t start = fp.getBeginIndex();
620750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t limit = fp.getEndIndex();
620850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
620950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // is there a logln using printf?
621050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    char buf[128];
621150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit);
621250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    logln(buf);
621350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
621450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
621550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (found[i]) {
621650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        continue;
621750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
621850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (values[i*3] == id &&
621950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+1] == start &&
622050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+2] == limit) {
622150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        found[i] = ok = TRUE;
622250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        break;
622350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
622450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
622550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
622650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok);
622750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
622850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
622950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // check that all were found
623050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool ok = TRUE;
623150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  for (int i = 0; i < tupleCount; ++i) {
623250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!found[i]) {
623350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      ok = FALSE;
623450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]);
623550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
623650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
623750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue("no expected values were missing", ok);
623850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
623950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
624150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
624250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
624350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField());
624450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex());
624550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex());
624650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
624750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() {
624950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // bug 7372
625050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
625150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter1;
625250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter2;
625350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition pos;
625450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status);
625650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (failure(status, "NumberFormat::createInstance", TRUE)) return;
625750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double num = 1234.56;
625950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str1;
626050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str2;
626150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"self==", iter1 == iter1);
626350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2);
626450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str1, &iter1, status);
626650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2);
626750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, &iter2, status);
626850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2);
626950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter1.next(pos);
627050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2);
627150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter2.next(pos);
627250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2);
627350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
627450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // should format ok with no iterator
627550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  str2.remove();
627650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, NULL, status);
627750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertEquals("null fpiter", str1, str2);
627850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
627950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
628050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
628150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
628250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() {
628350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  Locale locale("en_US");
628450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
6285b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
628650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "NumberFormat::createInstance", TRUE)) return;
628750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double val = 12345.67;
628850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
628950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
629050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_CURRENCY_FIELD, 0, 1,
6292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_GROUPING_SEPARATOR_FIELD, 3, 4,
6293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 7,
6294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8,
6295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 8, 10,
629650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
629750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
629850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
629950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
630050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
630250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
630350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
630450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
630650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result);
630950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
631050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6311103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
631250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
631350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6314103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result);
631550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
631650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
631750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6318b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status);
631950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  val = -0.0000123;
632050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
632150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_SIGN_FIELD, 0, 1,
6323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 2,
6324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3,
6325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 3, 5,
6326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SYMBOL_FIELD, 5, 6,
6327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SIGN_FIELD, 6, 7,
6328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_FIELD, 7, 8
632950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
633050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
633150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
633250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
633350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
633450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
633550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
633650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
633750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6338103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
633950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
634050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6341103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result);
634250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
634350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
634550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
634650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6347103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result);
634850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
634950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
635050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
635150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  fflush(stderr);
635250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
635350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
635450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) {
635550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  switch (attrId) {
6356103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_INTEGER_FIELD: return "integer";
6357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_FRACTION_FIELD: return "fraction";
6358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator";
6359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol";
6360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign";
6361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_FIELD: return "exponent";
6362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator";
6363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_CURRENCY_FIELD: return "currency";
6364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERCENT_FIELD: return "percent";
6365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERMILL_FIELD: return "permille";
6366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_SIGN_FIELD: return "sign";
636750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    default: return "";
636850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
636950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
637050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
637150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
637250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//   Test formatting & parsing of big decimals.
637350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      API test, not a comprehensive test.
637450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      See DecimalFormatTest/DataDrivenTests
637550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
637650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \
637750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                                __FILE__, __LINE__, u_errorName(status));}
637850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \
637950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);}
638050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
638150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) {
638250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // This function lets ASSERT_EQUALS("literal", UnicodeString) work.
638350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString us1(s1);
638450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return us1 != s2;
638550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
638650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
638750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() {
638850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
638950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode  status = U_ZERO_ERROR;
639050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f("12.345678999987654321E666", status);
639150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
639250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        StringPiece s = f.getDecimalNumber(status);
639350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
639450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1.2345678999987654321E+667", s);
639550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        //printf("%s\n", s.data());
639650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
639750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
639850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
639950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
640050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f1("this is not a number", status);
640150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status);
640250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
640350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
640450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
640550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
640650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f;
640750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("123.45", status);
640850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
640950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kDouble, f.getType());
641050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble());
641150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble(status));
641250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("123.45", f.getDecimalNumber(status));
641450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
641650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("4.5678E7", status);
641750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t n;
641850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        n = f.getLong();
641950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(45678000, n);
642050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
642150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
642250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("-123", status);
642350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kLong, f.getType());
642550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong());
642650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong(status));
642750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("-123", f.getDecimalNumber(status));
642950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
643150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
643250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("1234567890123", status);  // Number too big for 32 bits
643350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kInt64, f.getType());
643550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64());
643650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64(status));
643750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status));
643950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
644050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
644150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
644250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
644350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
644527f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
644627f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
644727f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
644827f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
644927f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("244444444444444444444444444444444444446.4");
645027f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(num, formattedResult, NULL, status);
645127f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
645227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult);
645327f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::string ss; std::cout << formattedResult.toUTF8String(ss);
645427f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
645527f654740f2a26ad62a5c155af9199af9e69b889claireho        }
645650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
645750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
645850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
645950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check formatting a DigitList.  DigitList is internal, but this is
646050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // a critical interface that must work.
646150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6462b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
646327f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
646427f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
646527f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
646627f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
646727f654740f2a26ad62a5c155af9199af9e69b889claireho            DigitList dl;
646827f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("123.4566666666666666666666666666666666621E+40");
646927f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
647027f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647127f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, NULL, status);
647227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult);
647427f654740f2a26ad62a5c155af9199af9e69b889claireho
647527f654740f2a26ad62a5c155af9199af9e69b889claireho            status = U_ZERO_ERROR;
647627f654740f2a26ad62a5c155af9199af9e69b889claireho            num.set("666.666");
647727f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
647827f654740f2a26ad62a5c155af9199af9e69b889claireho            FieldPosition pos(NumberFormat::FRACTION_FIELD);
647927f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
648027f654740f2a26ad62a5c155af9199af9e69b889claireho            formattedResult.remove();
648127f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, pos, status);
648227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
648327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("666.666", formattedResult);
648427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(4, pos.getBeginIndex());
648527f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(7, pos.getEndIndex());
648627f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
648727f654740f2a26ad62a5c155af9199af9e69b889claireho        }
648850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
648950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
649050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
649150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check a parse with a formatter with a multiplier.
649250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6493b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status);
649427f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
649527f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
649627f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
649727f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.84%";
649827f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
649927f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
650027f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
650127f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data()));
650227f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
650327f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
650427f654740f2a26ad62a5c155af9199af9e69b889claireho        }
650550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
650650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
650754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC)
650854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /*
650954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod().
651054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * See #9463
651154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     */
651250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
651350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check that a parse returns a decimal number with full accuracy
651450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
651627f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
651727f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
651827f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
651927f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.002200044400088880000070000";
652027f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
652127f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
652227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
652327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data()));
652427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(1.00220004440008888,   result.getDouble());
652527f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
652627f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
652727f654740f2a26ad62a5c155af9199af9e69b889claireho        }
652850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
652954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
653050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
653150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
653250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
653327f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() {
653427f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
653527f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString text1, text2;
653627f654740f2a26ad62a5c155af9199af9e69b889claireho    double value = 99.12345;
653727f654740f2a26ad62a5c155af9199af9e69b889claireho
653827f654740f2a26ad62a5c155af9199af9e69b889claireho    // Create currenct instance
653927f654740f2a26ad62a5c155af9199af9e69b889claireho    NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status);
654027f654740f2a26ad62a5c155af9199af9e69b889claireho    if (U_FAILURE(status) || fmt == NULL) {
654127f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Unable to create NumberFormat");
654227f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
654327f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text1);
654427f654740f2a26ad62a5c155af9199af9e69b889claireho
654527f654740f2a26ad62a5c155af9199af9e69b889claireho        // Reset the same currency and format the test value again
654627f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->setCurrency(fmt->getCurrency(), status);
654727f654740f2a26ad62a5c155af9199af9e69b889claireho        ASSERT_SUCCESS(status);
654827f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text2);
654927f654740f2a26ad62a5c155af9199af9e69b889claireho
655027f654740f2a26ad62a5c155af9199af9e69b889claireho        if (text1 != text2) {
655127f654740f2a26ad62a5c155af9199af9e69b889claireho            errln((UnicodeString)"NumberFormat::format() should return the same result - text1="
655227f654740f2a26ad62a5c155af9199af9e69b889claireho                + text1 + " text2=" + text2);
655327f654740f2a26ad62a5c155af9199af9e69b889claireho        }
655427f654740f2a26ad62a5c155af9199af9e69b889claireho        delete fmt;
655527f654740f2a26ad62a5c155af9199af9e69b889claireho    }
655627f654740f2a26ad62a5c155af9199af9e69b889claireho}
655727f654740f2a26ad62a5c155af9199af9e69b889claireho
655827f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() {
655927f654740f2a26ad62a5c155af9199af9e69b889claireho
656027f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
656127f654740f2a26ad62a5c155af9199af9e69b889claireho    Formattable result;
656227f654740f2a26ad62a5c155af9199af9e69b889claireho    ParsePosition parsePos(0);
656327f654740f2a26ad62a5c155af9199af9e69b889claireho
656427f654740f2a26ad62a5c155af9199af9e69b889claireho    // set the exponent symbol
656527f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
656627f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status);
656727f654740f2a26ad62a5c155af9199af9e69b889claireho    if(U_FAILURE(status)) {
656827f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)");
656927f654740f2a26ad62a5c155af9199af9e69b889claireho        return;
657027f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6571b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
657227f654740f2a26ad62a5c155af9199af9e69b889claireho    // create format instance
657327f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
657427f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormat fmt("#####", symbols, status);
6575b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(U_FAILURE(status)) {
657627f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)");
657727f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6578b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
657927f654740f2a26ad62a5c155af9199af9e69b889claireho    // parse the text
6580b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    fmt.parse("5.06e-27", result, parsePos);
658127f654740f2a26ad62a5c155af9199af9e69b889claireho    if(result.getType() != Formattable::kDouble &&
6582b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       result.getDouble() != 5.06E-27 &&
6583b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       parsePos.getIndex() != 8
658427f654740f2a26ad62a5c155af9199af9e69b889claireho       )
658527f654740f2a26ad62a5c155af9199af9e69b889claireho    {
6586b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("ERROR: parse failed - expected 5.06E-27, 8  - returned %d, %i",
6587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho              result.getDouble(), parsePos.getIndex());
658827f654740f2a26ad62a5c155af9199af9e69b889claireho    }
658927f654740f2a26ad62a5c155af9199af9e69b889claireho}
659027f654740f2a26ad62a5c155af9199af9e69b889claireho
6591b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() {
6592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* Test that number formats are properly inherited from es_419 */
6594b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* These could be subject to change if the CLDR data changes */
6595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* parentLocaleTests[][2]= {
6596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* locale ID */  /* expected */
6597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CO", "1.250,75" },
6598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CR", "1.250,75" },
6599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_ES", "1.250,75" },
6600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_GQ", "1.250,75" },
6601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_MX", "1,250.75" },
6602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_US", "1,250.75" },
6603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_VE", "1.250,75" },
6604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
6605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString s;
6607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for(int i=0; i < (int)(sizeof(parentLocaleTests)/sizeof(parentLocaleTests[i])); i++){
6609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UErrorCode status = U_ZERO_ERROR;
6610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        const char *localeID = parentLocaleTests[i][0];
6611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString expected(parentLocaleTests[i][1], -1, US_INV);
6612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        expected = expected.unescape();
6613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        char loc[256]={0};
6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        uloc_canonicalize(localeID, loc, 256, &status);
6615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status);
6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(U_FAILURE(status)){
6617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status));
6618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
6619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        s.remove();
6621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        fmt->format(1250.75, s);
6622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(s!=expected){
6623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("FAIL: Expected: ")+expected
6624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString(" Got: ") + s
6625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
6626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)){
6628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln((UnicodeString)"FAIL: Status " + (int32_t)status);
6629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete fmt;
6631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
6632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
6634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
6636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API.
6637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
6638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() {
6639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status);
6641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    CHECK_DATA(status, "NumberingSystem::getAvailableNames()")
6642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t nsCount = availableNumberingSystems->count(status);
6644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( nsCount < 36 ) {
6645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 36, got %d",nsCount);
6646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* A relatively simple test of the API.  We call getAvailableNames() and cycle through */
6649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* each name returned, attempting to create a numbering system based on that name and  */
6650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* verifying that the name returned from the resulting numbering system is the same    */
6651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* one that we initially thought.                                                      */
6652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t len;
6654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for ( int32_t i = 0 ; i < nsCount ; i++ ) {
6655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const char *nsname = availableNumberingSystems->next(&len,status);
6656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status);
6657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if ( uprv_strcmp(nsname,ns->getName()) ) {
6658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("FAIL: Numbering system name didn't match for name = %s\n",nsname);
6659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
6660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete ns;
6662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete availableNumberingSystems;
6665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid
6668103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void)
6669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
6670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(pattern,"#",1);
6671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(pattern,"#",1);
6672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(infstr,"INF",3);
6674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(infstr,"INF",3);
6675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(nanstr,"NAN",3);
6677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(nanstr,"NAN",3);
6678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar outputbuf[50] = {0};
6680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status);
6682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("FAIL: error in unum_open() - %s", u_errorName(status));
6684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
6685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status);
6688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status);
6689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: error setting symbols");
6691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double inf = uprv_getInfinity();
6694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN);
6696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0);
6697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UFieldPosition position = { 0, 0, 0};
6699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_formatDouble(fmt,inf,outputbuf,50,&position,&status);
6700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( u_strcmp(infstr, outputbuf)) {
6702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf);
6703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_close(fmt);
6706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h"
6709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() {
6711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49
671254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n",
6713103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
671454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) {
671554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
671654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) {
671754dcd9b6a06071f647dac967e9e267abb9410720Craig 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));
671854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
6719103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else
672054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped.");
6721103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
6722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
672354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // get some additional case
672454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
672554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
672654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000",""),status);
672754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 1;
672854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0001";
672954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
673054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
673154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
673254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
673354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),""));
673454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
673554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),""));
673654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
673854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
673954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
674054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
674154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN; // -9223372036854775808L;
674254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
674354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
674454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
674554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
674654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
674754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775808";
674854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
674954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
675054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
675154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
675254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
675354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
675454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
675554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6756103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
675754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
675854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
675954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
676054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MAX; // -9223372036854775808L;
676154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
676254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
676354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
676454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
676554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
676654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "9223372036854775807";
676754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
676854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
676954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
677054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
677154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
677254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
677354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
677454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6775103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
677654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
677754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
677854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
677954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 0;
678054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
678154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
678254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
678354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
678454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
678554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0000000000000000000";
678654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
678754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
678854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
678954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
679054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
679154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
679254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
679354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6794103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
679554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
679654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
679754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
679854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN + 1;
679954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775807";
680054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
680154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
680254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
680354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
680454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
680654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
680954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
681054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
681154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
681254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) {
681354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) {
681454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
681654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) {
681754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
681954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
682054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
682154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
6822103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
6823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
682559d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) {
682659d709d503bab6e2b61931737e662dd293b40578ccornelius  UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": ");
682759d709d503bab6e2b61931737e662dd293b40578ccornelius
682859d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattable *u = f.toUFormattable();
682959d709d503bab6e2b61931737e662dd293b40578ccornelius  logln();
683059d709d503bab6e2b61931737e662dd293b40578ccornelius  if (u == NULL) {
683159d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error: f.toUFormattable() retuned NULL.");
683259d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
683359d709d503bab6e2b61931737e662dd293b40578ccornelius  }
683459d709d503bab6e2b61931737e662dd293b40578ccornelius  logln("%s:%d: comparing Formattable with UFormattable", file, line);
683559d709d503bab6e2b61931737e662dd293b40578ccornelius  logln(fileLine + toString(f));
683659d709d503bab6e2b61931737e662dd293b40578ccornelius
683759d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode status = U_ZERO_ERROR;
683859d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode valueStatus = U_ZERO_ERROR;
683959d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType expectUType = UFMT_COUNT; // invalid
684059d709d503bab6e2b61931737e662dd293b40578ccornelius
684159d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool triedExact = FALSE; // did we attempt an exact comparison?
684259d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool exactMatch = FALSE; // was the exact comparison true?
684359d709d503bab6e2b61931737e662dd293b40578ccornelius
684459d709d503bab6e2b61931737e662dd293b40578ccornelius  switch( f.getType() ) {
684559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDate:
684659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DATE;
684759d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus));
684859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
684959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDouble:
685159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DOUBLE;
685259d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus));
685359d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
685459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kLong:
685659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_LONG;
685759d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus));
685859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
685959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
686059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kString:
686159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_STRING;
686259d709d503bab6e2b61931737e662dd293b40578ccornelius    {
686359d709d503bab6e2b61931737e662dd293b40578ccornelius      UnicodeString str;
686459d709d503bab6e2b61931737e662dd293b40578ccornelius      f.getString(str);
686559d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
686659d709d503bab6e2b61931737e662dd293b40578ccornelius      const UChar* uch = ufmt_getUChars(u, &len, &valueStatus);
686759d709d503bab6e2b61931737e662dd293b40578ccornelius      if(U_SUCCESS(valueStatus)) {
686859d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString str2(uch, len);
686959d709d503bab6e2b61931737e662dd293b40578ccornelius        assertTrue("UChar* NULL-terminated", uch[len]==0);
687059d709d503bab6e2b61931737e662dd293b40578ccornelius        exactMatch = (str == str2);
687159d709d503bab6e2b61931737e662dd293b40578ccornelius      }
687259d709d503bab6e2b61931737e662dd293b40578ccornelius      triedExact = TRUE;
687359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
687459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
687559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kArray:
687659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_ARRAY;
687759d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
687859d709d503bab6e2b61931737e662dd293b40578ccornelius    {
687959d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count = ufmt_getArrayLength(u, &valueStatus);
688059d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count2;
688159d709d503bab6e2b61931737e662dd293b40578ccornelius      const Formattable *array2 = f.getArray(count2);
688259d709d503bab6e2b61931737e662dd293b40578ccornelius      exactMatch = assertEquals(fileLine + " array count", count, count2);
688359d709d503bab6e2b61931737e662dd293b40578ccornelius
688459d709d503bab6e2b61931737e662dd293b40578ccornelius      if(exactMatch) {
688559d709d503bab6e2b61931737e662dd293b40578ccornelius        for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) {
688659d709d503bab6e2b61931737e662dd293b40578ccornelius          UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus);
688759d709d503bab6e2b61931737e662dd293b40578ccornelius          if(*Formattable::fromUFormattable(uu) != (array2[i])) {
688859d709d503bab6e2b61931737e662dd293b40578ccornelius            errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i,
688959d709d503bab6e2b61931737e662dd293b40578ccornelius                  (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i]));
689059d709d503bab6e2b61931737e662dd293b40578ccornelius            exactMatch = FALSE;
689159d709d503bab6e2b61931737e662dd293b40578ccornelius          } else {
689259d709d503bab6e2b61931737e662dd293b40578ccornelius            if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) {
689359d709d503bab6e2b61931737e662dd293b40578ccornelius              exactMatch = FALSE;
689459d709d503bab6e2b61931737e662dd293b40578ccornelius            }
689559d709d503bab6e2b61931737e662dd293b40578ccornelius          }
689659d709d503bab6e2b61931737e662dd293b40578ccornelius        }
689759d709d503bab6e2b61931737e662dd293b40578ccornelius      }
689859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
689959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690059d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kInt64:
690159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_INT64;
690259d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus));
690359d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
690459d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690559d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kObject:
690659d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_OBJECT;
690759d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus));
690859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
690959d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
691059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691159d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType uType = ufmt_getType(u, &status);
691259d709d503bab6e2b61931737e662dd293b40578ccornelius
691359d709d503bab6e2b61931737e662dd293b40578ccornelius  if(U_FAILURE(status)) {
691459d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status));
691559d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
691659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691759d709d503bab6e2b61931737e662dd293b40578ccornelius
691859d709d503bab6e2b61931737e662dd293b40578ccornelius  if(uType != expectUType) {
691959d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType);
692059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
692159d709d503bab6e2b61931737e662dd293b40578ccornelius
692259d709d503bab6e2b61931737e662dd293b40578ccornelius  if(triedExact) {
692359d709d503bab6e2b61931737e662dd293b40578ccornelius    if(U_FAILURE(valueStatus)) {
692459d709d503bab6e2b61931737e662dd293b40578ccornelius      errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus));
692559d709d503bab6e2b61931737e662dd293b40578ccornelius    } else if(!exactMatch) {
692659d709d503bab6e2b61931737e662dd293b40578ccornelius     errln("%s:%d: failed exact match for the Formattable type", file, line);
692759d709d503bab6e2b61931737e662dd293b40578ccornelius    } else {
692859d709d503bab6e2b61931737e662dd293b40578ccornelius      logln("%s:%d: exact match OK", file, line);
692959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
693059d709d503bab6e2b61931737e662dd293b40578ccornelius  } else {
693159d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d: note, did not attempt exact match for this formattable type", file, line);
693259d709d503bab6e2b61931737e662dd293b40578ccornelius  }
693359d709d503bab6e2b61931737e662dd293b40578ccornelius
693459d709d503bab6e2b61931737e662dd293b40578ccornelius  if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u))
693559d709d503bab6e2b61931737e662dd293b40578ccornelius      && f.isNumeric()) {
693659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode convStatus = U_ZERO_ERROR;
693759d709d503bab6e2b61931737e662dd293b40578ccornelius
693859d709d503bab6e2b61931737e662dd293b40578ccornelius    if(uType != UFMT_INT64) { // may fail to compare
693959d709d503bab6e2b61931737e662dd293b40578ccornelius      assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus));
694059d709d503bab6e2b61931737e662dd293b40578ccornelius    }
694159d709d503bab6e2b61931737e662dd293b40578ccornelius
694259d709d503bab6e2b61931737e662dd293b40578ccornelius    if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) {
694359d709d503bab6e2b61931737e662dd293b40578ccornelius      StringPiece fDecNum = f.getDecimalNumber(convStatus);
694459d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1
694559d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
694659d709d503bab6e2b61931737e662dd293b40578ccornelius      const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus);
694759d709d503bab6e2b61931737e662dd293b40578ccornelius#else
694859d709d503bab6e2b61931737e662dd293b40578ccornelius      // copy version
694959d709d503bab6e2b61931737e662dd293b40578ccornelius      char decNumChars[200];
695059d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus);
695159d709d503bab6e2b61931737e662dd293b40578ccornelius#endif
695259d709d503bab6e2b61931737e662dd293b40578ccornelius
695359d709d503bab6e2b61931737e662dd293b40578ccornelius      if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) {
695459d709d503bab6e2b61931737e662dd293b40578ccornelius        logln(fileLine + decNumChars);
695559d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars length==", len, fDecNum.length());
695659d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data());
695759d709d503bab6e2b61931737e662dd293b40578ccornelius      }
695859d709d503bab6e2b61931737e662dd293b40578ccornelius
695959d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionF = U_ZERO_ERROR;
696059d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t l = f.getInt64(int64ConversionF);
696159d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionU = U_ZERO_ERROR;
696259d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t r = ufmt_getInt64(u, &int64ConversionU);
696359d709d503bab6e2b61931737e662dd293b40578ccornelius
696459d709d503bab6e2b61931737e662dd293b40578ccornelius      if( (l==r)
696559d709d503bab6e2b61931737e662dd293b40578ccornelius          && ( uType != UFMT_INT64 ) // int64 better not overflow
696659d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionU)
696759d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) {
696859d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("%s:%d: OK: 64 bit overflow", file, line);
696959d709d503bab6e2b61931737e662dd293b40578ccornelius      } else {
697059d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " as int64 ==", l, r);
697159d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF);
697259d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU);
697359d709d503bab6e2b61931737e662dd293b40578ccornelius      }
697459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
697559d709d503bab6e2b61931737e662dd293b40578ccornelius  }
697659d709d503bab6e2b61931737e662dd293b40578ccornelius  return exactMatch || !triedExact;
697759d709d503bab6e2b61931737e662dd293b40578ccornelius}
697859d709d503bab6e2b61931737e662dd293b40578ccornelius
697959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) {
698059d709d503bab6e2b61931737e662dd293b40578ccornelius  {
698159d709d503bab6e2b61931737e662dd293b40578ccornelius    // test that a default formattable is equal to Formattable()
698259d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
698359d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalUFormattablePointer defaultUFormattable(ufmt_open(&status));
698459d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("calling umt_open", status);
698559d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable defaultFormattable;
698659d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
698759d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
698859d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
698959d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
699059d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
699159d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
699259d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable",
699359d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
699459d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable()))));
699559d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable",
699659d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
699759d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultFormattable.toUFormattable())));
699859d709d503bab6e2b61931737e662dd293b40578ccornelius    assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()",
699959d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
700059d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultUFormattable.getAlias())));
700159d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable);
700259d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700359d709d503bab6e2b61931737e662dd293b40578ccornelius  // test some random Formattables
700459d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700559d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(ucal_getNow(), Formattable::kIsDate);
700659d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
700759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700859d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700959d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((double)1.61803398874989484820); // golden ratio
701059d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701259d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701359d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon
701459d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701559d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701659d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701759d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/
701859d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701959d709d503bab6e2b61931737e662dd293b40578ccornelius  }
702059d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702159d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f("Hello world."); // should be invariant?
702259d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
702359d709d503bab6e2b61931737e662dd293b40578ccornelius  }
702459d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702559d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
702659d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg
702759d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a StringPiece", status2);
702859d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
702959d709d503bab6e2b61931737e662dd293b40578ccornelius  }
703059d709d503bab6e2b61931737e662dd293b40578ccornelius  {
703159d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
703259d709d503bab6e2b61931737e662dd293b40578ccornelius    UObject *obj = new Locale();
703359d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(obj);
703459d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a Formattable from a default constructed Locale()", status2);
703559d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
703659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
703759d709d503bab6e2b61931737e662dd293b40578ccornelius  {
703859d709d503bab6e2b61931737e662dd293b40578ccornelius    const Formattable array[] = {
703959d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable(ucal_getNow(), Formattable::kIsDate),
704059d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((int32_t)4),
704159d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((double)1.234),
704259d709d503bab6e2b61931737e662dd293b40578ccornelius    };
704359d709d503bab6e2b61931737e662dd293b40578ccornelius
704459d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable fa(array, 3);
704559d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, fa);
704659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
704759d709d503bab6e2b61931737e662dd293b40578ccornelius}
704859d709d503bab6e2b61931737e662dd293b40578ccornelius
704959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) {
705059d709d503bab6e2b61931737e662dd293b40578ccornelius  double input[] = {
705159d709d503bab6e2b61931737e662dd293b40578ccornelius        0, 0,
705259d709d503bab6e2b61931737e662dd293b40578ccornelius        0.1, -0.1,
705359d709d503bab6e2b61931737e662dd293b40578ccornelius        123, -123,
705459d709d503bab6e2b61931737e662dd293b40578ccornelius        12345, -12345,
705559d709d503bab6e2b61931737e662dd293b40578ccornelius        123.45, -123.45,
705659d709d503bab6e2b61931737e662dd293b40578ccornelius        123.44501, -123.44501,
705759d709d503bab6e2b61931737e662dd293b40578ccornelius        0.001234, -0.001234,
705859d709d503bab6e2b61931737e662dd293b40578ccornelius        0.00000000123, -0.00000000123,
705959d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000000000000000123, -0.0000000000000000000123,
706059d709d503bab6e2b61931737e662dd293b40578ccornelius        1.2, -1.2,
706159d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000012344501, -0.0000000012344501,
706259d709d503bab6e2b61931737e662dd293b40578ccornelius        123445.01, -123445.01,
706359d709d503bab6e2b61931737e662dd293b40578ccornelius        12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0,
706459d709d503bab6e2b61931737e662dd293b40578ccornelius    };
706559d709d503bab6e2b61931737e662dd293b40578ccornelius    const char* expected[] = {
706659d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00", "0.00",
706759d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.100", "-0.100",
706859d709d503bab6e2b61931737e662dd293b40578ccornelius        "123", "-123",
706959d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345", "-12345",
707059d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
707159d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
707259d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.001234", "-0.001234",
707359d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00000000123", "-0.00000000123",
707459d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000000000000000123", "-0.0000000000000000000123",
707559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.20", "-1.20",
707659d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000012345", "-0.0000000012345",
707759d709d503bab6e2b61931737e662dd293b40578ccornelius        "123450", "-123450",
707859d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345000000000000000000000000000000", "-12345000000000000000000000000000000",
707959d709d503bab6e2b61931737e662dd293b40578ccornelius    };
708059d709d503bab6e2b61931737e662dd293b40578ccornelius
708159d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
708259d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
708359d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
708459d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
708559d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status,"NumberFormat::createInstance")
708659d709d503bab6e2b61931737e662dd293b40578ccornelius
708759d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
708859d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
708959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(5);
709059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setGroupingUsed(false);
709159d709d503bab6e2b61931737e662dd293b40578ccornelius
709259d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
709359d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString expectedResult;
709459d709d503bab6e2b61931737e662dd293b40578ccornelius    for (unsigned int i = 0; i < sizeof(input)/sizeof(double); ++i) {
709559d709d503bab6e2b61931737e662dd293b40578ccornelius        numberFormat->format(input[i], result);
709659d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString expectedResult(expected[i]);
709759d709d503bab6e2b61931737e662dd293b40578ccornelius        if (result != expectedResult) {
709859d709d503bab6e2b61931737e662dd293b40578ccornelius          errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result);
709959d709d503bab6e2b61931737e662dd293b40578ccornelius        }
710059d709d503bab6e2b61931737e662dd293b40578ccornelius        result.remove();
710159d709d503bab6e2b61931737e662dd293b40578ccornelius    }
710259d709d503bab6e2b61931737e662dd293b40578ccornelius}
710359d709d503bab6e2b61931737e662dd293b40578ccornelius
710459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() {
710559d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
710659d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
710759d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
710859d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
710959d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
711059d709d503bab6e2b61931737e662dd293b40578ccornelius
711159d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
711259d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(3);
711359d709d503bab6e2b61931737e662dd293b40578ccornelius
711459d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
711559d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->format(0.0, result);
711659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (result != "0") {
711759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln((UnicodeString)"Expected: 0, got " + result);
711859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
711959d709d503bab6e2b61931737e662dd293b40578ccornelius}
712059d709d503bab6e2b61931737e662dd293b40578ccornelius
712159d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() {
712259d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
712359d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
712459d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
712559d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
712659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
712759d709d503bab6e2b61931737e662dd293b40578ccornelius        dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status));
712859d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
712959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713059d709d503bab6e2b61931737e662dd293b40578ccornelius
713159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
713259d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
713359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713459d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
713559d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
713659d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
713759d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713859d709d503bab6e2b61931737e662dd293b40578ccornelius
713959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
714059d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
714159d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
714259d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714359d709d503bab6e2b61931737e662dd293b40578ccornelius
714459d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
714559d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
714659d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
714759d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714859d709d503bab6e2b61931737e662dd293b40578ccornelius
714959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
715059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(6);
715159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
715259d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
715359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
715459d709d503bab6e2b61931737e662dd293b40578ccornelius
715559d709d503bab6e2b61931737e662dd293b40578ccornelius}
715659d709d503bab6e2b61931737e662dd293b40578ccornelius
715759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() {
715859d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
715959d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status);
716059d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
716159d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
716259d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
716359d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
716459d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u200e-0,5");
716559d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
716659d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
716759d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
716859d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Expected -0,5 to parse for Farsi.");
716959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
717059d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
717159d709d503bab6e2b61931737e662dd293b40578ccornelius}
717259d709d503bab6e2b61931737e662dd293b40578ccornelius
717359d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() {
717459d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
717559d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status);
717659d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
717759d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
717859d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
717959d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
718059d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u208B0.5");
718159d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
718259d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
718359d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
718459d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Expected ") + value + UnicodeString(" to parse."));
718559d709d503bab6e2b61931737e662dd293b40578ccornelius    }
718659d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
718759d709d503bab6e2b61931737e662dd293b40578ccornelius}
718859d709d503bab6e2b61931737e662dd293b40578ccornelius
718959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() {
719059d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
719159d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormatSymbols custom(Locale::getUS(), status);
719259d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormatSymbols constructor");
719359d709d503bab6e2b61931737e662dd293b40578ccornelius
719459d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*");
719559d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^");
719659d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":");
719759d709d503bab6e2b61931737e662dd293b40578ccornelius
719859d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString pat(" #,##0.00");
719959d709d503bab6e2b61931737e662dd293b40578ccornelius    pat.insert(0, (UChar)0x00A4);
720059d709d503bab6e2b61931737e662dd293b40578ccornelius
720159d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat fmt(pat, custom, status);
720259d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormat constructor");
720359d709d503bab6e2b61931737e662dd293b40578ccornelius
720459d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString numstr("* 1^234:56");
720559d709d503bab6e2b61931737e662dd293b40578ccornelius    expect2(fmt, (Formattable)((double)1234.56), numstr);
720659d709d503bab6e2b61931737e662dd293b40578ccornelius}
720759d709d503bab6e2b61931737e662dd293b40578ccornelius
720859d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct {
720959d709d503bab6e2b61931737e662dd293b40578ccornelius    const char *   locale;
721059d709d503bab6e2b61931737e662dd293b40578ccornelius    UBool          lenient;
721159d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString  numString;
721259d709d503bab6e2b61931737e662dd293b40578ccornelius    double         value;
721359d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem;
721459d709d503bab6e2b61931737e662dd293b40578ccornelius
721559d709d503bab6e2b61931737e662dd293b40578ccornelius
721659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() {
721759d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem items[] = {
721859d709d503bab6e2b61931737e662dd293b40578ccornelius        // locale               lenient numString                                                       value
721959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
722059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
722159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
722259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
722359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
722459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
722559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
722659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
722759d709d503bab6e2b61931737e662dd293b40578ccornelius
722859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
722959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
723059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
723159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
723259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
723359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
723459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
723559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
723659d709d503bab6e2b61931737e662dd293b40578ccornelius
723759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
723859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
723959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
724059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
724159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
724259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
724359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
724459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
724559d709d503bab6e2b61931737e662dd293b40578ccornelius
724659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
724759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
724859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
724959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
725059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
725159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
725259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
725359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
725459d709d503bab6e2b61931737e662dd293b40578ccornelius
725559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
725859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
725959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
726059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
726159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
726259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
726359d709d503bab6e2b61931737e662dd293b40578ccornelius
726459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("12"),                                      12 },
726559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("12"),                                      12 },
726659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("-23"),                                    -23 },
726759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("-23"),                                    -23 },
726859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
726959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
727059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
727159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
727259d709d503bab6e2b61931737e662dd293b40578ccornelius
727359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"),                 -67 },
727859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
727959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
728059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"),   -67 },
728159d709d503bab6e2b61931737e662dd293b40578ccornelius
728259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
728359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
728459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
728759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
728859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
728959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
729059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
729159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
729259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"),                -67 },
729359d709d503bab6e2b61931737e662dd293b40578ccornelius        // terminator
729459d709d503bab6e2b61931737e662dd293b40578ccornelius        { NULL,                 0,      UnicodeString(""),                                                0 },
729559d709d503bab6e2b61931737e662dd293b40578ccornelius    };
729659d709d503bab6e2b61931737e662dd293b40578ccornelius
729759d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem * itemPtr;
729859d709d503bab6e2b61931737e662dd293b40578ccornelius    for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
729959d709d503bab6e2b61931737e662dd293b40578ccornelius        UErrorCode status = U_ZERO_ERROR;
730059d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status);
730159d709d503bab6e2b61931737e662dd293b40578ccornelius        if (U_SUCCESS(status)) {
730259d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->setLenient(itemPtr->lenient);
730359d709d503bab6e2b61931737e662dd293b40578ccornelius            Formattable fmtobj;
730459d709d503bab6e2b61931737e662dd293b40578ccornelius            ParsePosition ppos;
730559d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->parse(itemPtr->numString, fmtobj, ppos);
730659d709d503bab6e2b61931737e662dd293b40578ccornelius            if (ppos.getIndex() == itemPtr->numString.length()) {
730759d709d503bab6e2b61931737e662dd293b40578ccornelius                double parsedValue = fmtobj.getDouble(status);
730859d709d503bab6e2b61931737e662dd293b40578ccornelius                if (U_FAILURE(status) || parsedValue != itemPtr->value) {
730959d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue);
731059d709d503bab6e2b61931737e662dd293b40578ccornelius                }
731159d709d503bab6e2b61931737e662dd293b40578ccornelius            } else {
731259d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex());
731359d709d503bab6e2b61931737e662dd293b40578ccornelius            }
731459d709d503bab6e2b61931737e662dd293b40578ccornelius        } else {
731559d709d503bab6e2b61931737e662dd293b40578ccornelius            dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status));
731659d709d503bab6e2b61931737e662dd293b40578ccornelius        }
731759d709d503bab6e2b61931737e662dd293b40578ccornelius        delete numfmt;
731859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
731959d709d503bab6e2b61931737e662dd293b40578ccornelius}
732059d709d503bab6e2b61931737e662dd293b40578ccornelius
7321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct {
7322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  DecimalFormat::ERoundingMode mode;
7323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  double value;
7324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  UnicodeString expected;
7325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data;
7326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
732795bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keepvoid NumberFormatTest::TestFastPathConsistent11524() {
732895bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    UErrorCode status = U_ZERO_ERROR;
732995bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    NumberFormat *fmt = NumberFormat::createInstance("en", status);
733095bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    fmt->setMaximumIntegerDigits(INT32_MIN);
733195bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    UnicodeString appendTo;
733295bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    assertEquals("", "0", fmt->format(123, appendTo));
733395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    appendTo.remove();
733495bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    assertEquals("", "0", fmt->format(12345, appendTo));
733595bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep}
733695bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep
7337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0.
7339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() {
7340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const Test10419Data items[] = {
7341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundCeiling, 1.488,  "2"},
7342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundDown, 1.588,  "1"},
7343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundFloor, 1.888,  "1"},
7344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfDown, 1.5,  "1"},
7345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfEven, 2.5,  "2"},
7346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfUp, 2.5,  "3"},
7347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundUp, 1.5,  "2"},
7348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    };
7349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status));
7351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        dataerrln("Failure creating DecimalFormat %s", u_errorName(status));
7353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < (int32_t) (sizeof(items) / sizeof(items[0])); ++i) {
7356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setRoundingMode(items[i].mode);
7357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setMaximumFractionDigits(0);
7358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UnicodeString actual;
7359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        if (items[i].expected != decfmt->format(items[i].value, actual)) {
7360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            errln("Expected " + items[i].expected + ", got " + actual);
7361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() {
7366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt is now 'a'
7367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("'I''ll'*a###.##", status);
7369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("a")) {
7376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Padding character should be 'a'.");
7377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt ought to be '*' since that is the default and no
7381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // explicit padding char is specified in the new pattern.
7382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.applyPattern("AA#,##0.00ZZ", status);
7383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Oops this still prints 'a' even though we changed the pattern.
7385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("*")) {
7386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("applyPattern did not clear padding character.");
7387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() {
7391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat format("0.00E0", status);
7393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat::ERoundingMode roundingModes[] = {
7399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundCeiling,
7400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundDown,
7401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundFloor,
7402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfDown,
7403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfEven,
7404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfUp,
7405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundUp};
7406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const char *descriptions[] = {
7407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Ceiling",
7408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Down",
7409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Floor",
7410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half down",
7411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half even",
7412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half up",
7413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round up"};
7414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016};
7417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3",
7420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3",
7423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"};
7426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7429fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016};
7437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3",
7440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3",
7441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3",
7442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3",
7443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"};
7446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0
7456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {0.0, -0.0};
7458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0"};
7467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/
7477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15};
7480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25",
7483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25"};
7489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15};
7500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25",
7505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25"};
7509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35};
7520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25",
7523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25"};
7529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35};
7540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25",
7545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25"};
7549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() {
7561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("0.00E0", status);
7563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (!assertSuccess("Formt creation", status)) {
7564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString out;
7567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.format(-0.0, out);
7568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertEquals("format", "-0.00E0", out);
7569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding(
7572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        DecimalFormat& format,
7573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const double *values,
7574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *expected,
7575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const DecimalFormat::ERoundingMode *roundingModes,
7576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *descriptions,
7577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t valueSize,
7578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t roundingModeSize) {
7579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < roundingModeSize; ++i) {
7580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        format.setRoundingMode(roundingModes[i]);
7581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        for (int32_t j = 0; j < valueSize; j++) {
7582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString currentExpected(expected[i * valueSize + j]);
7583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            currentExpected = currentExpected.unescape();
7584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString actual;
7585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            format.format(values[j], actual);
7586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            if (currentExpected != actual) {
7587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                char buffer[256];
7588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                sprintf(
7589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        buffer,
7590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        "For %s value %f, expected ",
7591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        descriptions[i],
7592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        values[j]);
7593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                errln(UnicodeString(buffer) + currentExpected + ", got " + actual);
7594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            }
7595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() {
7600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING;
7602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)1234.5, "$1,234.50", TRUE, status);
7605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1234.5, "($1,234.50)", TRUE, status);
7607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)0, "$0.00", TRUE, status);
7609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-0.2, "($0.20)", TRUE, status);
7611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status);
7613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status);
7615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("de_DE", style, status),
7616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status);
7617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186
7620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() {
7621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status);
7623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormatSymbols for root");
7625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString pattern("#,##0.###");
7628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status);
7629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7630fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormat using root symbols");
7631fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7632fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7634fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone();
7635fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32);
7636fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (*fmtClone == *fmtBase) {
7637fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth");
7638fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7639fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtClone;
7640fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7641fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtBase;
7642fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7643fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid NumberFormatTest::TestCurrencyUsage() {
7645f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    double agent = 123.567;
7646f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7647f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UErrorCode status;
7648f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    DecimalFormat *fmt;
7649f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7650f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // compare the Currency and Currency Cash Digits
7651f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // Note that as of CLDR 26:
7652f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // * TWD switches from 0 decimals to 2; PKR still has 0, so change test to that
7653f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // * CAD and all other currencies that rounded to .05 no longer do
7654f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7655f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    Locale enUS_PKR("en_US@currency=PKR");
7656f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7657f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7658f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7659f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7660f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CURRENCY, status);
7661f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=PKR/CURRENCY", status, TRUE) == FALSE) {
7662f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7663f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7664f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7665f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UnicodeString original;
7666f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->format(agent,original);
7667f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test Currency Usage 1", UnicodeString("PKR124"), original);
7668f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7669f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            // test the getter here
7670f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UCurrencyUsage curUsage = fmt->getCurrencyUsage();
7671f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test usage getter - standard", curUsage, UCURR_USAGE_STANDARD);
7672f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7673f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7674f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7675f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CASH_CURRENCY, status);
7676f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=PKR/CASH", status, TRUE) == FALSE) {
7677f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7678f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7679f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7680f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7681f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        // must be usage = cash
7682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UCurrencyUsage curUsage = fmt->getCurrencyUsage();
7683f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test usage getter - cash", curUsage, UCURR_USAGE_CASH);
7684f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7685f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cash_currency;
7686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent,cash_currency);
7687f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 2", UnicodeString("PKR124"), cash_currency);
7688f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7690f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // compare the Currency and Currency Cash Rounding
7692f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7693f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    Locale enUS_CAD("en_US@currency=CAD");
7694f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7695f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7696f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7697f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status);
7698f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) {
7699f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7700f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7701f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UnicodeString original_rounding;
7703f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->format(agent, original_rounding);
7704f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test Currency Usage 3", UnicodeString("CA$123.57"), original_rounding);
7705f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7706f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7707f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status);
7708f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) {
7709f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7710f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7711f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7712f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7713f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cash_rounding_currency;
7714f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, cash_rounding_currency);
7715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 4", UnicodeString("CA$123.57"), cash_rounding_currency);
7716f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7717f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7718f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // Test the currency change
7720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7721f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    const UChar CUR_PKR[] = {0x50, 0x4B, 0x52, 0};
7722f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7723f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7724f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7725f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status);
7726f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) {
7727f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7730f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7731f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status);
7732f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) {
7733f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7734f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7735f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7736f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7737f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cur_original;
7738f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, cur_original);
7739f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 5", UnicodeString("CA$123.57"), cur_original);
7740f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7741f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->setCurrency(CUR_PKR, status);
7742f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertSuccess("Set currency to PKR", status);
7743f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7744f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString PKR_changed;
7745f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, PKR_changed);
7746f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 6", UnicodeString("PKR124"), PKR_changed);
7747f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7748f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7749f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius}
7750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
7751