numfmtst.cpp revision 1b7d32f919554dda9c193b32188251337bc756f1
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);
1361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert  TESTCASE_AUTO(TestDoubleLimit11439);
13795bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep  TESTCASE_AUTO(TestFastPathConsistent11524);
1388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  TESTCASE_AUTO_END;
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test API (increase code coverage)
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestAPI(void)
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  logln("Test API");
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  NumberFormat *test = NumberFormat::createInstance("root", status);
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
1516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    dataerrln("unable to create format object - %s", u_errorName(status));
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(test != NULL) {
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMinimumIntegerDigits(10);
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMaximumIntegerDigits(2);
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMinimumFractionDigits(10);
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->setMaximumFractionDigits(2);
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result;
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->format(bla, result, pos, status);
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      errln("Yuck... Formatted a duck... As a number!");
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      status = U_ZERO_ERROR;
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result.remove();
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t ll = 12;
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test->format(ll, result);
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != "12.00"){
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("format int64_t error");
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ParsePosition ppos;
178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    LocalPointer<CurrencyAmount> currAmt(test->parseCurrency("",ppos));
179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    // old test for (U_FAILURE(status)) was bogus here, method does not set status!
180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (ppos.getIndex()) {
181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("Parsed empty string as currency");
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete test;
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18859d709d503bab6e2b61931737e662dd293b40578ccorneliusclass StubNumberFormat :public NumberFormat{
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
19059d709d503bab6e2b61931737e662dd293b40578ccornelius    StubNumberFormat(){};
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const {
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo;
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const {
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo.append((UChar)0x0033);
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const {
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return NumberFormat::format(number, appendTo, pos);
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const {
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return appendTo;
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parse(const UnicodeString& ,
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Formattable& ,
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ParsePosition& ) const {}
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parse( const UnicodeString& ,
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        Formattable& ,
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UErrorCode& ) const {}
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UClassID getDynamicClassID(void) const {
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        static char classID = 0;
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        return (UClassID)&classID;
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual Format* clone() const {return NULL;}
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCoverage(void){
21859d709d503bab6e2b61931737e662dd293b40578ccornelius    StubNumberFormat stub;
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString agent("agent");
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t num = 4;
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (stub.format(num, agent, pos) != UnicodeString("agent3")){
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)");
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test various patterns
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestPatterns(void)
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), status);
2336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) { errcheckln(status, "FAIL: Could not construct DecimalFormatSymbols - %s", u_errorName(status)); return; }
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* pat[]    = { "#.#", "#.", ".#", "#" };
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0]));
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* newpat[] = { "#0.#", "#0.", "#.0", "#" };
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* num[]    = { "0",   "0.", ".0", "0" };
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<pat_length; ++i)
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat[i], sym, status);
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; }
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString newp; fmt.toPattern(newp);
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(newp == newpat[i]))
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] +
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; " + newp + " seen instead");
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s);
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!(s == num[i]))
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] +
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  "; " + s + " seen instead");
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits());
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
26050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug
26150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug
26250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
26550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestDigitList(void)
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  // API coverage for DigitList
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  DigitList list1;
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list1.append('1');
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list1.fDecimalAt = 1;
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  DigitList list2;
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  list2.set((int32_t)1);
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (list1 != list2) {
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("digitlist append, operator!= or set failed ");
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if (!(list1 == list2)) {
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    errln("digitlist append, operator== or set failed ");
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test exponential pattern
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestExponential(void)
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), status);
2916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; }
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]"  };
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0]));
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// The following #if statements allow this test to be built and run on
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// platforms that do not have standard IEEE numerics.  For example,
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// S/390 doubles have an exponent range of -78 to +75.  For the
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following #if statements to work, float.h must define
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// DBL_MAX_10_EXP to be a compile-time constant.
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This section may be expanded as needed.
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if DBL_MAX_10_EXP > 300
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 };
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = (int32_t)(sizeof(val) / sizeof(val[0]));
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* valFormat[] =
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271",
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272",
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273",
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]"
316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double valParse[] =
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E300, -3.1416E-271,
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E300, -3.1416E-271,
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123456800, 1.23E300, -3.141593E-271,
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123500000, 1.23E300, -3.142E-271,
323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif DBL_MAX_10_EXP > 70
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 };
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = sizeof(val) / sizeof(val[0]);
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char* valFormat[] =
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71",
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72",
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072",
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]"
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double valParse[] =
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E70, -3.1416E-71,
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123460000, 1.23E70, -3.1416E-71,
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123456800, 1.23E70, -3.141593E-71,
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0.01234, 123500000, 1.23E70, -3.142E-71,
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Don't test double conversion
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double* val = 0;
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t val_length = 0;
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char** valFormat = 0;
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double* valParse = 0;
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln("Warning: Skipping double conversion tests");
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lval[] = { 0, -1, 1, 123456789 };
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lval_length = (int32_t)(sizeof(lval) / sizeof(lval[0]));
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* lvalFormat[] =
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.####E0
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E0", "-1E0", "1E0", "1.2346E8",
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 00.000E00
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07",
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // ##0.######E000
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E000", "-1E000", "1E000", "123.4568E006",
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // 0.###E0;[0.###E0]
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "0E0", "[1E0]", "1E0", "1.235E8"
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t lvalParse[] =
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123460000,
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123460000,
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123456800,
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, -1, 1, 123500000,
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t ival = 0, ilval = 0;
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t p=0; p<pat_length; ++p)
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat[p], sym, status);
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; }
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pattern;
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" +
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          fmt.toPattern(pattern) + "\"");
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t v;
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (v=0; v<val_length; ++v)
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s);
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" " + val[v] + " -format-> " + s);
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (s != valFormat[v+ival])
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]);
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ParsePosition pos(0);
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable af;
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(s, af, pos);
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            double a;
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool useEpsilon = FALSE;
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (af.getType() == Formattable::kLong)
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                a = af.getLong();
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else if (af.getType() == Formattable::kDouble) {
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                a = af.getDouble();
399103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // S/390 will show a failure like this:
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //| -3.141592652999999e-271 -format-> -3.1416E-271
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //|                          -parse-> -3.1416e-271
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                //| FAIL: Expected -3.141599999999999e-271
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // To compensate, we use an epsilon-based equality
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // test on S/390 only.  We don't want to do this in
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // general because it's less exacting.
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                useEpsilon = TRUE;
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Non-numeric Formattable returned");
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                continue;
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (pos.getIndex() == s.length())
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                logln((UnicodeString)"  -parse-> " + a);
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // Use epsilon comparison as necessary
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if ((useEpsilon &&
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) ||
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    (!useEpsilon && a != valParse[v+ival]))
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                {
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]);
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a);
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"  should be (" + s.length() + " chars) -> " + valParse[v+ival]);
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (v=0; v<lval_length; ++v)
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString s;
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            (*(NumberFormat*)&fmt).format(lval[v], s);
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln((UnicodeString)" " + lval[v] + "L -format-> " + s);
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (s != lvalFormat[v+ilval])
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s);
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ParsePosition pos(0);
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable af;
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(s, af, pos);
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (af.getType() == Formattable::kLong ||
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                af.getType() == Formattable::kInt64) {
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UErrorCode status = U_ZERO_ERROR;
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                int32_t a = af.getLong(status);
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (pos.getIndex() == s.length())
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                {
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln((UnicodeString)"  -parse-> " + a);
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (a != lvalParse[v+ilval])
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]);
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                else
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a);
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + " Double: " + af.getDouble()
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + ", Long: " + af.getLong());
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ival += val_length;
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ilval += lval_length;
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientific2() {
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // jb 2552
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status);
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double num = 12.34;
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$12.34");
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->setScientificNotation(TRUE);
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$1.23E1");
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt->setScientificNotation(FALSE);
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(*fmt, num, "$12.34");
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
48050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientificGrouping() {
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // jb 2552
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("##0.00E0",status);
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, .01234, "12.3E-3");
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, .1234, "123E-3");
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 1.234, "1.23E0");
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 12.34, "12.3E0");
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 123.4, "123E0");
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, 1234., "1.23E3");
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void setFromString(DigitList& dl, const char* str) {
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char c;
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool decimalSet = FALSE;
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.clear();
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while ((c = *str++)) {
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c == '-') {
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fIsPositive = FALSE;
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (c == '+') {
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fIsPositive = TRUE;
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (c == '.') {
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.fDecimalAt = dl.fCount;
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            decimalSet = TRUE;
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            dl.append(c);
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!decimalSet) {
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.fDecimalAt = dl.fCount;
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}*/
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestInt64() {
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#.#E0",status);
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setMaximumFractionDigits(20);
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)0, "0E0");
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)-1, "-1E0");
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)1, "1E0");
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9");
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9");
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18");
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18");
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // also test digitlist
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*    int64_t int64max = U_INT64_MAX;
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int64_t int64min = U_INT64_MIN;
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* int64maxstr = "9223372036854775807";
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* int64minstr = "-9223372036854775808";
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString fail("fail: ");
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test max int64 value
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DigitList dl;
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    setFromString(dl, int64maxstr);
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr + " didn't fit");
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64max) {
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr);
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64max) {
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64maxstr);
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test negative of max int64 value (1 shy of min int64 value)
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.fIsPositive = FALSE;
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr + " didn't fit");
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != -int64max) {
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr);
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != -int64max) {
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64maxstr);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test min int64 value
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    setFromString(dl, int64minstr);
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!dl.fitsIntoInt64(FALSE)) {
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-" + int64minstr + " didn't fit");
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t int64Value = dl.getInt64();
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64min) {
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64minstr);
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dl.set(int64Value);
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64Value = dl.getInt64();
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (int64Value != int64min) {
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + int64minstr);
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // test negative of min int 64 value (1 more than max int64 value)
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    dl.fIsPositive = TRUE; // won't fit
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (dl.fitsIntoInt64(FALSE)) {
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(fail + "-(" + int64minstr + ") didn't fit");
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }*/
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the handling of quotes
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestQuotes(void)
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString *pat;
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status);
6056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) {
6066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status));
6076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        delete sym;
6086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        return;
6096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    }
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat = new UnicodeString("a'fo''o'b#");
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status);
61250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString s;
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format((int32_t)123, s);
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + *pat + "\"");
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format 123 -> " + escape(s));
61650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!(s=="afo'ob123"))
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected afo'ob123");
61850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete pat;
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat = new UnicodeString("a''b#");
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new DecimalFormat(*pat, *sym, status);
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format((int32_t)123, s);
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + *pat + "\"");
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format 123 -> " + escape(s));
62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!(s=="a'b123"))
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected a'b123");
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete pat;
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sym;
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns.
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrencySign(void)
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status);
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar currency = 0x00A4;
6456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) {
6466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status));
6476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        delete sym;
6486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        return;
6496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    }
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // "\xA4#,##0.00;-\xA4#,##0.00"
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.append(currency).append("#,##0.00;-").
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(currency).append("#,##0.00");
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *fmt = new DecimalFormat(pat, *sym, status);
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s);
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.truncate(0);
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\"");
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s));
65827f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "$1,234.56") dataerrln((UnicodeString)"FAIL: Expected $1,234.56");
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(- 1234.56, s);
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s));
66227f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "-$1,234.56") dataerrln((UnicodeString)"FAIL: Expected -$1,234.56");
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.truncate(0);
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00"
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.append(currency).append(currency).
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(" #,##0.00;").
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(currency).append(currency).
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        append(" -#,##0.00");
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = new DecimalFormat(pat, *sym, status);
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(1234.56, s);
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\"");
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s));
67527f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "USD 1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD 1,234.56");
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((NumberFormat*)fmt)->format(-1234.56, s);
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s));
67927f654740f2a26ad62a5c155af9199af9e69b889claireho    if (s != "USD -1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD -1,234.56");
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete sym;
6826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + u_errorName(status));
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
68450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString&
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::escape(UnicodeString& s)
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString buf;
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<s.length(); ++i)
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar c = s[(int32_t)i];
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (c <= (UChar)0x7F) buf += c;
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += (UChar)0x5c; buf += (UChar)0x55;
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0xF000) >> 12);
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x0F00) >> 8);
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString((c & 0x00F0) >> 4);
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            buf += toHexString(c & 0x000F);
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (s = buf);
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
70850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* testCases[][2]= {
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     /* locale ID */  /* expected */
71254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {"ca_ES_PREEURO", "\\u20A7\\u00A01.150" },
713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"de_LU_PREEURO", "1,150\\u00A0F" },
714c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" },
715b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"en_BE_PREEURO", "1.150,50\\u00A0BEF" },
716fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_ES_PREEURO", "1.150\\u00A0\\u20A7" },
71754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {"eu_ES_PREEURO", "\\u20A7\\u00A01.150" },
718c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" },
719b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"it_IT_PREEURO", "ITL\\u00A01.150" },
720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    {"pt_PT_PREEURO", "1,150$50\\u00A0\\u200B"}, // per cldrbug 7670
72127f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en_US@currency=JPY", "\\u00A51,150"},
72227f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en_US@currency=jpy", "\\u00A51,150"},
72327f654740f2a26ad62a5c155af9199af9e69b889claireho    {"en-US-u-cu-jpy", "\\u00A51,150"}
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns.
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrency(void)
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status);
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling NumberFormat::createCurrencyInstance()");
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s; currencyFmt->format(1.50, s);
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre ici a..........." + s);
740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (!(s==CharsToUnicodeString("1,50\\u00A0$")))
741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$");
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char loc[256]={0};
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status);
74659d709d503bab6e2b61931737e662dd293b40578ccornelius    (void)len;  // Suppress unused variable warning.
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1.50, s);
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre en Allemagne a.." + s);
750f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    if (!(s==CharsToUnicodeString("1,50\\u00A0DM")))
751f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM");
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.truncate(0);
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status);
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status);
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1.50, s);
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"Un pauvre en France a....." + s);
758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (!(s==CharsToUnicodeString("1,50\\u00A0F")))
759c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F");
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status))
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: Status " + (int32_t)status);
76350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(int i=0; i < (int)(sizeof(testCases)/sizeof(testCases[i])); i++){
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *localeID = testCases[i][0];
767c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        UnicodeString expected(testCases[i][1], -1, US_INV);
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expected = expected.unescape();
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s.truncate(0);
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char loc[256]={0};
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        uloc_canonicalize(localeID, loc, 256, &status);
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status);
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)){
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("Could not create currency formatter for locale %s",localeID);
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            continue;
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        currencyFmt->format(1150.50, s);
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(s!=expected){
77950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            errln(UnicodeString("FAIL: Expected: ")+expected
78050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    + UnicodeString(" Got: ") + s
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)){
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln((UnicodeString)"FAIL: Status " + (int32_t)status);
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete currencyFmt;
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
78950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the Currency object handling, new as of ICU 2.2.
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyObject() {
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
79750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberFormat* fmt =
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat::createCurrencyInstance(Locale::getUS(), ec);
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
8016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: getCurrencyInstance(US) - %s", u_errorName(ec));
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmt;
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale null("", "", "");
80750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, null, 1234.56, "$1,234.56");
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getFrance(),
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getJapan(),
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale("fr", "CH", ""),
8178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                   1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getUS(),
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, "$1,234.56");
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec);
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: getCurrencyInstance(FRANCE)");
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete fmt;
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
83050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC"));
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getJapan(),
834f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                   1234.56, CharsToUnicodeString("1 235 JPY")); // Yen
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale("fr", "CH", ""),
8378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius                   1234.56, "1 234,56 CHF"); // no more 0.05 rounding here, see cldrbug 5548
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getUS(),
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, "1 234,56 $US");
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectCurrency(*fmt, Locale::getFrance(),
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
84750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do rudimentary testing of parsing.
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestParse(void)
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString arg("0");
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat* format = new DecimalFormat("00", status);
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //try {
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        Formattable n; format->parse(arg, n, status);
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"parse(" + arg + ") = " + n.getLong());
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (n.getType() != Formattable::kLong ||
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0");
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete format;
8656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    if (U_FAILURE(status)) errcheckln(status, (UnicodeString)"FAIL: Status " + u_errorName(status));
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //catch(Exception e) {
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //    errln((UnicodeString)"Exception caught: " + e);
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //}
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
87150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
874b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientAffixTestCases[] = {
875103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "(1)",
876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "( 1)",
877103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "(1 )",
878103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "( 1 )"
879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientMinusTestCases[] = {
882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "-5",
883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "\\u22125",
884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    "\\u20105"
885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientCurrencyTestCases[] = {
888103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1,000",
889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1,000",
890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1000",
891103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1000",
892103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$1 000.00",
893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1 000.00",
894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "$ 1\\u00A0000.00",
895103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "1000.00"
896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
897b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
89859d709d503bab6e2b61931737e662dd293b40578ccornelius// changed from () to - per cldrbug 5674
899b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativeCurrencyTestCases[] = {
90059d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1,000",
90159d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1,000",
90259d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1000",
90359d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1000",
90459d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$1 000.00",
90559d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1 000.00",
90659d709d503bab6e2b61931737e662dd293b40578ccornelius        "- $ 1,000.00 ",
90759d709d503bab6e2b61931737e662dd293b40578ccornelius        "-$ 1\\u00A0000.00",
90859d709d503bab6e2b61931737e662dd293b40578ccornelius        "-1000.00"
909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
910b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
911b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientPercentTestCases[] = {
912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "25%",
913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        " 25%",
914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        " 25 %",
915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    	"25 %",
916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"25\\u00A0%",
917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"25"
918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativePercentTestCases[] = {
921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25%",
922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" -25%",
923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" - 25%",
924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"- 25 %",
925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" - 25 %",
926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25 %",
927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25\\u00A0%",
928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"-25",
929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"- 25"
930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *strictFailureTestCases[] = {
933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		" 1000",
934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"10,00",
935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		"1,000,.0"
936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define ARRAY_SIZE(array) ((int32_t) (sizeof (array) / sizeof(array[0])))
939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/**
941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Test lenient parsing.
942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */
943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid
944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormatTest::TestLenientParse(void)
945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{
946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UErrorCode status = U_ZERO_ERROR;
947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    DecimalFormat *format = new DecimalFormat("(#,##0)", status);
948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Formattable n;
949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (format == NULL || U_FAILURE(status)) {
951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create DecimalFormat (#,##0) - %s", u_errorName(status));
952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        format->setLenient(TRUE);
954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientAffixTestCases); t += 1) {
955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientAffixTestCases[t]);
956b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
957b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            format->parse(testCase, n, status);
958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong ||
961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != 1) {
962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\"");
963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       delete format;
967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale en_US("en_US");
970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale sv_SE("sv_SE");
971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *mFormat = NumberFormat::createInstance(sv_SE, UNUM_DECIMAL, status);
973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (mFormat == NULL || U_FAILURE(status)) {
975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (sv_SE, UNUM_DECIMAL) - %s", u_errorName(status));
976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        mFormat->setLenient(TRUE);
978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) {
979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString testCase = ctou(lenientMinusTestCases[t]);
980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            mFormat->parse(testCase, n, status);
982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                status = U_ZERO_ERROR;
987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete mFormat;
990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    mFormat = NumberFormat::createInstance(en_US, UNUM_DECIMAL, status);
993b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
994b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (mFormat == NULL || U_FAILURE(status)) {
995b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (en_US, UNUM_DECIMAL) - %s", u_errorName(status));
996b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        mFormat->setLenient(TRUE);
998b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) {
999b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            UnicodeString testCase = ctou(lenientMinusTestCases[t]);
1000b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            mFormat->parse(testCase, n, status);
1002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1003b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1004b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
1005b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
1006b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                status = U_ZERO_ERROR;
1007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete mFormat;
1010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *cFormat = NumberFormat::createInstance(en_US, UNUM_CURRENCY, status);
1013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (cFormat == NULL || U_FAILURE(status)) {
1015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat (en_US, UNUM_CURRENCY) - %s", u_errorName(status));
1016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
1017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        cFormat->setLenient(TRUE);
1018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientCurrencyTestCases); t += 1) {
1019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientCurrencyTestCases[t]);
1020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            cFormat->parse(testCase, n, status);
1022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != 1000) {
1026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\"");
1027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativeCurrencyTestCases); t += 1) {
1032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientNegativeCurrencyTestCases[t]);
1033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            cFormat->parse(testCase, n, status);
1035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getLong() != -1000) {
1039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\"");
1040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete cFormat;
1045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat *pFormat = NumberFormat::createPercentInstance(en_US, status);
1048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if (pFormat == NULL || U_FAILURE(status)) {
1050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        dataerrln("Unable to create NumberFormat::createPercentInstance (en_US) - %s", u_errorName(status));
1051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    } else {
1052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        pFormat->setLenient(TRUE);
1053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientPercentTestCases); t += 1) {
1054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientPercentTestCases[t]);
1055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	pFormat->parse(testCase, n, status);
1057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble());
1058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
1060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getDouble() != 0.25) {
1061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\"");
1062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativePercentTestCases); t += 1) {
1067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	UnicodeString testCase = ctou(lenientNegativePercentTestCases[t]);
1068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        	pFormat->parse(testCase, n, status);
1070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble());
1071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
1073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	n.getDouble() != -0.25) {
1074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\"");
1075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            	status = U_ZERO_ERROR;
1076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
1078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete pFormat;
1080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
1081b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   // Test cases that should fail with a strict parse and pass with a
1083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   // lenient parse.
1084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   NumberFormat *nFormat = NumberFormat::createInstance(en_US, status);
1085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   if (nFormat == NULL || U_FAILURE(status)) {
1087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       dataerrln("Unable to create NumberFormat (en_US) - %s", u_errorName(status));
1088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   } else {
1089b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       // first, make sure that they fail with a strict parse
1090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) {
1091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       UnicodeString testCase = ctou(strictFailureTestCases[t]);
1092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       nFormat->parse(testCase, n, status);
1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       if (! U_FAILURE(status)) {
1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       }
1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       status = U_ZERO_ERROR;
1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       // then, make sure that they pass with a lenient parse
1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       nFormat->setLenient(TRUE);
1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) {
1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       UnicodeString testCase = ctou(strictFailureTestCases[t]);
1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       nFormat->parse(testCase, n, status);
1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	            	n.getLong() != 1000) {
1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho		       status = U_ZERO_ERROR;
1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho	       }
1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       }
1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       delete nFormat;
1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho   }
1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// -------------------------------------
1123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method.
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestRounding487(void)
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *nf = NumberFormat::createInstance(status);
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dataerrln("Error calling NumberFormat::createInstance()");
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 0.00159999, 4, "0.0016");
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 0.00995, 4, "0.01");
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 12.3995, 3, "12.4");
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, 12.4999, 0, "12");
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    roundingTest(*nf, - 19.5, 0, "-20");
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete nf;
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status);
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value.
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSecondaryGrouping(void) {
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols ct");
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat f("#,##,###", US, status);
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat ct");
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(f, (int32_t)123456789L, "12,34,56,789");
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(f, "#,##,###");
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.applyPattern("#,###", status);
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "applyPattern");
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    f.setSecondaryGroupingSize(4);
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(f, (int32_t)123456789L, "12,3456,789");
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(f, "#,####,###");
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status);
116827f654740f2a26ad62a5c155af9199af9e69b889claireho    CHECK_DATA(status, "createInstance(hi_IN)");
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out;
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t l = (int32_t)1876543210L;
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    g->format(l, out);
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete g;
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // expect "1,87,65,43,210", but with Hindi digits
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //         01234567890123
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool ok = TRUE;
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (out.length() != 14) {
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ok = FALSE;
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int32_t i=0; i<out.length(); ++i) {
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool expectGroup = FALSE;
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            switch (i) {
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 1:
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 4:
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 7:
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            case 10:
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                expectGroup = TRUE;
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Later -- fix this to get the actual grouping
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // character from the resource bundle.
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool isGroup = (out.charAt(i) == 0x002C);
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (isGroup != expectGroup) {
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ok = FALSE;
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ok) {
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL  Expected " + l +
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" +
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(out) + "\"");
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Ok    " + l +
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " x hi_IN -> \"" +
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(out) + "\"");
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestWhiteSpaceParsing(void) {
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), ec);
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("a  b#0c  ", US, ec);
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
12156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "FAIL: Constructor - %s", u_errorName(ec));
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t n = 1234;
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, "a b1234c ", n);
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, "a   b1234c   ", n);
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currencies whose display name is a ChoiceFormat.
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestComplexCurrency() {
122750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    UErrorCode ec = U_ZERO_ERROR;
1229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    Locale loc("kn", "IN", "");
1230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec);
1231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    if (U_SUCCESS(ec)) {
1232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00"));
1233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        Use .00392625 because that's 2^-8.  Any value less than 0.005 is fine.
1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky
1235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00"));
1236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50"));
1237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00"));
1238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00"));
1239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    } else {
1240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//        errln("FAIL: getCurrencyInstance(kn_IN)");
1241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    }
1242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//    delete fmt;
1243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
124550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// -------------------------------------
124750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected)
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    nf.setMaximumFractionDigits(maxFractionDigits);
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString out; nf.format(x, out);
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out);
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected);
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestExponent(void) {
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt1(UnicodeString("0.###E0"), US, status);
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0.###E0)");
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status);
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0.###E+0)");
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t n = 1234;
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(fmt1, n, "1.234E3");
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(fmt2, n, "1.234E+3");
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt1, "1.234E+3", n); // Either format should parse "E+3"
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestScientific(void) {
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test pattern round-trip
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000",
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "0.###E0;[0.###E0]" };
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t PAT_length = (int32_t)(sizeof(PAT) / sizeof(PAT[0]));
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t DIGITS[] = {
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // min int, max int, min frac, max frac
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0, 1, 0, 0, // "#E0"
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 1, 0, 4, // "0.####E0"
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        2, 2, 3, 3, // "00.000E00"
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 3, 0, 4, // "##0.####E000"
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        1, 1, 0, 3, // "0.###E0;[0.###E0]"
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; i<PAT_length; ++i) {
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pat(PAT[i]);
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat df(pat, US, status);
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CHECK(status, "DecimalFormat constructor");
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString pat2;
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        df.toPattern(pat2);
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pat == pat2) {
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln(UnicodeString("Ok   Pattern rt \"") +
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat + "\" -> \"" +
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat2 + "\"");
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL Pattern rt \"") +
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat + "\" -> \"" +
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat2 + "\"");
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Make sure digit counts match what we expect
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (df.getMinimumIntegerDigits() != DIGITS[4*i] ||
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMaximumIntegerDigits() != DIGITS[4*i+1] ||
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMinimumFractionDigits() != DIGITS[4*i+2] ||
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df.getMaximumFractionDigits() != DIGITS[4*i+3]) {
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln(UnicodeString("FAIL \"" + pat +
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                "\" min/max int; min/max frac = ") +
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMinimumIntegerDigits() + "/" +
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMaximumIntegerDigits() + ";" +
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMinimumFractionDigits() + "/" +
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  df.getMaximumFractionDigits() + ", expect " +
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i] + "/" +
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+1] + ";" +
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+2] + "/" +
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  DIGITS[4*i+3]);
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test the constructor for default locale. We have to
132950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // manually set the default locale, as there is no
133050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // guarantee that the default locale has the same
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // scientific format.
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale def = Locale::getDefault();
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault(Locale::getUS(), status);
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(status),
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345678901E4", status);
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault(def, status);
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("#E0", US, status),
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345E4", status);
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0E0", US, status),
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1E4", status);
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(Locale::getUS(), status),
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1.2345678901E4", status);
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.###E0", US, status),
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.0,
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.34E3", status);
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.###E0", US, status),
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.00001,
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.35E3", status);
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.####E0", US, status),
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 12345,
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "12.345E3", status);
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status),
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12345.678901,
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "1,2345678901E4", status);
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.####E0", US, status),
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           789.12345e-9,
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "789.12E-9", status);
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.####E0", US, status),
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           780.e-9,
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           "780E-9", status);
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat(".###E0", US, status),
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           45678.0,
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           ".457E5", status);
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(".###E0", US, status),
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 0,
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           ".0E0", status);
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat[] { new DecimalFormat("#E0", US),
1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 new DecimalFormat("##E0", US),
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 new DecimalFormat("####E0", US),
137650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("0E0", US),
137750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("00E0", US),
137850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                 new DecimalFormat("000E0", US),
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               },
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Long(45678000),
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new String[] { "4.5678E7",
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "45.678E6",
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "4567.8E4",
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "5E7",
138550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                          "46E6",
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "457E5",
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           );
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("#E0", US, status),
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "4.5678E7", status);
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##E0", US, status),
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "45.678E6", status);
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("####E0", US, status),
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "4567.8E4", status);
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0E0", US, status),
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "5E7", status);
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("00E0", US, status),
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "46E6", status);
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("000E0", US, status),
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 45678000, "457E5", status);
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("###E0", US, status),
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Object[] { new Double(0.0000123), "12.3E-6",
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.000123), "123E-6",
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.00123), "1.23E-3",
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.0123), "12.3E-3",
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(0.123), "123E-3",
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(1.23), "1.23E0",
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(12.3), "12.3E0",
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(123), "123E0",
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Double(1230), "1.23E3",
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         });
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.0000123, "12.3E-6", status);
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.000123, "123E-6", status);
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.00123, "1.23E-3", status);
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.0123, "12.3E-3", status);
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.123, "123E-3", status);
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.23, "1.23E0", status);
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           12.3, "12.3E0", status);
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           123.0, "123E0", status);
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("###E0", US, status),
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1230.0, "1.23E3", status);
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("0.#E+00", US, status),
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           new Object[] { new Double(0.00012), "1.2E-04",
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          new Long(12000),     "1.2E+04",
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         });
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ! Unroll this test into individual tests below...
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    !
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("0.#E+00", US, status),
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           0.00012, "1.2E-04", status);
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("0.#E+00", US, status),
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           (int32_t) 12000, "1.2E+04", status);
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPad(void) {
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", US, status),
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "^^^^0", status);
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", US, status),
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1.3, "^-1.3", status);
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status),
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0.0E0______ g-m/s^2", status);
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status),
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "333.333E-3_ g-m/s^2", status);
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status),
1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0.0______ g-m/s^2", status);
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status),
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "0.33333__ g-m/s^2", status);
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test padding before a sign
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)";
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-10),  "xxxxxxxxxx(10.0)", status);
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000),"xxxxxxx(1,000.0)", status);
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000000),"xxx(1,000,000.0)", status);
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -100.37,       "xxxxxxxx(100.37)", status);
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -10456.37,     "xxxxx(10,456.37)", status);
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1120456.37,   "xx(1,120,456.37)", status);
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -112045600.37, "(112,045,600.37)", status);
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1252045600.37,"(1,252,045,600.37)", status);
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(10),  "xxxxxxxxxxxx10.0", status);
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000),"xxxxxxxxx1,000.0", status);
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000000),"xxxxx1,000,000.0", status);
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           100.37,       "xxxxxxxxxx100.37", status);
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10456.37,     "xxxxxxx10,456.37", status);
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1120456.37,   "xxxx1,120,456.37", status);
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           112045600.37, "xx112,045,600.37", status);
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr, US, status),
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10252045600.37,"10,252,045,600.37", status);
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test padding between a sign and a number
1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)";
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-10),  "(10.0xxxxxxxxxx)", status);
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000),"(1,000.0xxxxxxx)", status);
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-1000000),"(1,000,000.0xxx)", status);
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -100.37,       "(100.37xxxxxxxx)", status);
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -10456.37,     "(10,456.37xxxxx)", status);
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1120456.37,   "(1,120,456.37xx)", status);
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -112045600.37, "(112,045,600.37)", status);
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1252045600.37,"(1,252,045,600.37)", status);
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(10),  "10.0xxxxxxxxxxxx", status);
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000),"1,000.0xxxxxxxxx", status);
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(1000000),"1,000,000.0xxxxx", status);
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           100.37,       "100.37xxxxxxxxxx", status);
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10456.37,     "10,456.37xxxxxxx", status);
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1120456.37,   "1,120,456.37xxxx", status);
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           112045600.37, "112,045,600.37xx", status);
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(formatStr2, US, status),
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           10252045600.37,"10,252,045,600.37", status);
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //testing the setPadCharacter(UnicodeString) and getPadCharacterString()
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#", US, status);
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat constructor");
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString padString("P");
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(padString);
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString);
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter((UnicodeString)"^");
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^");
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //commented untill implementation is complete
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /*  fmt.setPadCharacter((UnicodeString)"^^^");
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^");
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.remove();
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.append((UChar)0x0061);
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    padString.append((UChar)0x0302);
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(padString);
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000};
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pattern(patternChars);
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString);
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPatterns2(void) {
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt("#", US, status);
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormat constructor");
158050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar hat = 0x005E; /*^*/
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat);
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat);
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat);
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat);
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "$*^$#", ILLEGAL);
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "#$*^$", ILLEGAL);
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix,
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              12, (UChar)0x0078 /*x*/);
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix,
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              3, (UChar)0x0078 /*x*/);
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix,
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              10, (UChar)0x0061 /*a*/);
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.applyPattern("AA#,##0.00ZZ", status);
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "applyPattern");
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadCharacter(hat);
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(10);
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadBeforePrefix);
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "*^AA#,##0.00ZZ");
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix);
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA#,##0.00*^ZZ");
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadAfterSuffix);
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA#,##0.00ZZ*^");
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //            12  3456789012
1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString exp("AA*^#,##0.00ZZ", "");
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(12);
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setPadPosition(DecimalFormat::kPadAfterPrefix);
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, exp);
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(13);
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  34567890123
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^##,##0.00ZZ");
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(14);
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  345678901234
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^###,##0.00ZZ");
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(15);
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  3456789012345
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.setFormatWidth(16);
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //              12  34567890123456
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPat(fmt, "AA*^#,###,##0.00ZZ");
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSurrogateSupport(void) {
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols custom(Locale::getUS(), status);
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal");
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus");
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus ");
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent");
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString patternStr("*\\U00010000##.##", "");
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", "");
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = expStr.unescape();
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), expStr, status);
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("*^##.##", custom, status),
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "^^^^0", status);
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##.##", custom, status),
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           -1.3, " minus 1decimal3", status);
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status),
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0decimal0exponent0 g-m/s^2", status);
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status),
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "333decimal333exponent minus 3 g-m/s^2", status);
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status),
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(0), "0decimal0 g-m/s^2", status);
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status),
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.0/3, "0decimal33333 g-m/s^2", status);
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString zero((UChar32)0x10000);
167127f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString one((UChar32)0x10001);
167227f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString two((UChar32)0x10002);
167327f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString five((UChar32)0x10005);
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero);
167527f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, one);
167627f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kTwoDigitSymbol, two);
167727f654740f2a26ad62a5c155af9199af9e69b889claireho    custom.setSymbol(DecimalFormatSymbols::kFiveDigitSymbol, five);
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", "");
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = expStr.unescape();
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat("##0.000", custom, status),
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           1.25, expStr, status);
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30);
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money");
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator");
1687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'");
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", "");
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-20), expStr, status);
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent");
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = "'You''ve lost ' -0.00 %' of your money today'";
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    patternStr = patternStr.unescape();
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expStr = UnicodeString(" minus You've lost   minus 2000decimal00 percent of your money today", "");
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect2(new DecimalFormat(patternStr, custom, status),
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           int32_t(-20), expStr, status);
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyPatterns(void) {
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, locCount;
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const Locale* locs = NumberFormat::getAvailableLocales(locCount);
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<locCount; ++i) {
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec = U_ZERO_ERROR;
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec);
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(ec)) {
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec));
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Make sure currency formats do not have a variable number
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // of fraction digits
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t min = nf->getMinimumFractionDigits();
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t max = nf->getMaximumFractionDigits();
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (min != max) {
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString a, b;
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                nf->format(1.0, a);
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                nf->format(1.125, b);
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL: " + locs[i].getName() +
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      " min fraction digits != max fraction digits; "
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      "x 1.0 => " + escape(a) +
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      "; x 1.125 => " + escape(b));
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // Make sure EURO currency formats have exactly 2 fraction digits
172727f654740f2a26ad62a5c155af9199af9e69b889claireho            DecimalFormat* df = dynamic_cast<DecimalFormat*>(nf);
172827f654740f2a26ad62a5c155af9199af9e69b889claireho            if (df != NULL) {
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (u_strcmp(EUR, df->getCurrency()) == 0) {
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (min != 2 || max != 2) {
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UnicodeString a;
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        nf->format(1.0, a);
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        errln((UnicodeString)"FAIL: " + locs[i].getName() +
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              " is a EURO format but it does not have 2 fraction digits; "
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              "x 1.0 => " +
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              escape(a));
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete nf;
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRegCurrency(void) {
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar USD[4];
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US", USD, 4, &status);
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar YEN[4];
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("ja_JP", YEN, 4, &status);
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar TMP[4];
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar QQQ[] = {0x51, 0x51, 0x51, 0};
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
17556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(status, "Unable to get currency for locale, error %s", u_errorName(status));
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
175850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status);
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status);
176150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US", TMP, 4, &status);
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(YEN, TMP) != 0) {
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return YEN registered for en_US");
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(QQQ, TMP) != 0) {
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return QQQ for en_US_EURO");
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
177150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status);
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (fallbackLen) {
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: tried to fallback en_XX_BAR");
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
177750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ucurr_unregister(enkey, &status)) {
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: couldn't unregister enkey");
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
178250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    ucurr_forLocale("en_US", TMP, 4, &status);
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(USD, TMP) != 0) {
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return USD for en_US after unregister of en_US");
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
178750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(QQQ, TMP) != 0) {
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US");
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
179250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_BLAH", TMP, 4, &status);
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(USD, TMP) != 0) {
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: could not find USD for en_US_BLAH after unregister of en");
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
179850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!ucurr_unregister(enUSEUROkey, &status)) {
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: couldn't unregister enUSEUROkey");
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
180250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_forLocale("en_US_EURO", TMP, 4, &status);
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (u_strcmp(EUR, TMP) != 0) {
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO");
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR; // reset
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyNames(void) {
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Do a basic check of getName()
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // USD { "US$", "US Dollar"            } // 04/04/1792-
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool isChoiceFormat;
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len;
18216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    const UBool possibleDataError = TRUE;
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Warning: HARD-CODED LOCALE DATA in this test.  If it fails, CHECK
182350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // THE LOCALE DATA before diving into the code.
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USD.getName(SYMBOL_NAME)",
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("$"),
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en",
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USD.getName(LONG_NAME)",
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("US Dollar"),
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en",
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_LONG_NAME,
18346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1837c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                 UnicodeString("CA$"),
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en",
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("$"),
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en_CA",
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    assertEquals("USD.getName(SYMBOL_NAME) in en_AU",
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("US$"),
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USD, "en_AU",
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("CAD.getName(SYMBOL_NAME)",
1855c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru                 UnicodeString("CA$"),
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(CAD, "en_AU",
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_SYMBOL_NAME,
18586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("USX.getName(LONG_NAME)",
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString("USX"),
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 UnicodeString(ucurr_getName(USX, "en_US",
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                             UCURR_LONG_NAME,
18646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             &isChoiceFormat, &len, &ec)),
18656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                                             possibleDataError);
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("ucurr_getName", ec);
186750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ec = U_ZERO_ERROR;
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test that a default or fallback warning is being returned. JB 4239.
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat,
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
187350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (es_ES fallback)",
18746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                    U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError);
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat,
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
187850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (zh_TW fallback)",
18796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru                    U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError);
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat,
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
188350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (en_US default)",
188450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    U_USING_DEFAULT_WARNING == ec || U_USING_FALLBACK_WARNING == ec, TRUE);
188550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    ucurr_getName(CAD, "ti", UCURR_LONG_NAME, &isChoiceFormat,
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
1888b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    assertTrue("ucurr_getName (ti default)",
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    U_USING_DEFAULT_WARNING == ec, TRUE);
189050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test that a default warning is being returned when falling back to root. JB 4536.
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat,
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            &len, &ec);
189450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("ucurr_getName (cy default to root)",
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    U_USING_DEFAULT_WARNING == ec, TRUE);
189650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // TODO add more tests later
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyUnit(void){
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {85, 83, 68, 0}; /*USD*/
1903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar BAD[] = {63, 63, 63, 0}; /*???*/
1904fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar BAD2[] = {63, 63, 65, 0}; /*???*/
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit cu(USD, ec);
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("CurrencyUnit", ec);
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar * r = cu.getISOCurrency(); // who is the buffer owner ?
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("getISOCurrency()", USD, r);
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit cu2(cu);
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(cu2 == cu)){
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyUnit copy constructed object should be same");
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone();
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*cu3 == cu)){
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyUnit cloned object should be same");
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1920fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    CurrencyUnit bad(BAD, ec);
1921fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertSuccess("CurrencyUnit", ec);
1922fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (cu.getIndex() == bad.getIndex()) {
1923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Indexes of different currencies should differ.");
1924fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1925fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    CurrencyUnit bad2(BAD2, ec);
1926fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertSuccess("CurrencyUnit", ec);
1927fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad2.getIndex() != bad.getIndex()) {
1928fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Indexes of unrecognized currencies should be the same.");
1929fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1930fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad == bad2) {
1931fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Different unrecognized currencies should not be equal.");
1932fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1933fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    bad = bad2;
1934fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (bad != bad2) {
1935fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Currency unit assignment should be the same.");
1936fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cu3;
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyAmount(void){
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar USD[] = {85, 83, 68, 0}; /*USD*/
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount ca(9, USD, ec);
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertSuccess("CurrencyAmount", ec);
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount ca2(ca);
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(ca2 == ca)){
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount copy constructed object should be same");
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ca2=ca;
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(ca2 == ca)){
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount assigned object should be same");
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
195550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone();
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!(*ca3 == ca)){
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("CurrencyAmount cloned object should be same");
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ca3;
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSymbolsWithBadLocale(void) {
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale locDefault;
1965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    static const char *badLocales[] = {
1966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // length < ULOC_FULLNAME_CAPACITY
1967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME",
1968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
1969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        // length > ULOC_FULLNAME_CAPACITY
1970103e9ffba2cba345d0078eb8b8db33249f81840aCraig 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"
1971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }; // expect U_USING_DEFAULT_WARNING for both
1972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
1973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unsigned int i;
1974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (i = 0; i < sizeof(badLocales) / sizeof(char*); i++) {
1975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const char *localeName = badLocales[i];
1976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale locBad(localeName);
1977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UErrorCode status = U_ZERO_ERROR;
1978103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString intlCurrencySymbol((UChar)0xa4);
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1980103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        intlCurrencySymbol.append((UChar)0xa4);
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
1983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale::setDefault(locBad, status);
1984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
1985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        DecimalFormatSymbols mySymbols(status);
1986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (status != U_USING_DEFAULT_WARNING) {
1987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("DecimalFormatSymbols should return U_USING_DEFAULT_WARNING.");
1988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
1989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) {
1990103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("DecimalFormatSymbols does not have the right locale.", locBad.getName());
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol;
1993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) {
1994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum);
1995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString));
1996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            if (symbolString.length() == 0
1997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol
1998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol)
1999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            {
2000103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum);
2001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            }
2002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        status = U_ZERO_ERROR;
2005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale::setDefault(locDefault, status);
2006103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        logln("Current locale is %s", Locale::getDefault().getName());
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behave the same, except for memory ownership semantics. (No
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * version of this test on Java, since Java has only one method.)
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestAdoptDecimalFormatSymbols(void) {
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
20196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "Fail: DecimalFormatSymbols constructor - %s", u_errorName(ec));
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat(" #,##0.00");
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    pat.insert(0, (UChar)0x00A4);
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt(pat, sym, ec);
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormat constructor");
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(2350.75, str);
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "$ 2,350.75") {
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
203627f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: " + str + ", expected $ 2,350.75");
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q");
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.adoptDecimalFormatSymbols(sym);
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(2350.75, str);
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "Q 2,350.75") {
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
205327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75");
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym = new DecimalFormatSymbols(Locale::getUS(), ec);
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        delete sym;
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2(pat, sym, ec);
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormat constructor");
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
206750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym2(Locale::getUS(), ec);
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Fail: DecimalFormatSymbols constructor");
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q");
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.setDecimalFormatSymbols(sym2);
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.format(2350.75, str);
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (str == "Q 2,350.75") {
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(str);
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
208127f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75");
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPerMill() {
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt(ctou("###.###\\u2030"), ec);
2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("DecimalFormat ct", ec)) return;
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("0.4857 x ###.###\\u2030",
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 ctou("485.7\\u2030"), fmt.format(0.4857, str));
209250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormatSymbols sym(Locale::getUS(), ec);
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m"));
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat fmt2("", sym, ec);
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt2.applyLocalizedPattern("###.###m", ec);
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!assertSuccess("setup", ec)) return;
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assertEquals("0.4857 x ###.###m",
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                 "485.7m", fmt2.format(0.4857, str));
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generic test for patterns that should be legal/illegal.
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestIllegalPatterns() {
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Test cases:
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Prefix with "-:" for illegal patterns
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Prefix with "+:" for legal patterns
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* DATA[] = {
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Unquoted special characters in the suffix are illegal
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "-:000.000|###",
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "+:000.000'|###'",
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; DATA[i]; ++i) {
2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* pat=DATA[i];
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool valid = (*pat) == '+';
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        pat += 2;
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode ec = U_ZERO_ERROR;
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        DecimalFormat fmt(pat, ec); // locale doesn't matter here
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(ec) == valid) {
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            logln("Ok: pattern \"%s\": %s",
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat, u_errorName(ec));
2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
21266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            errcheckln(ec, "FAIL: pattern \"%s\" should have %s; got %s",
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  pat, (valid?"succeeded":"failed"),
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                  u_errorName(ec));
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* KEYWORDS[] = {
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*0*/ "ref=", // <reference pattern to parse numbers>
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*1*/ "loc=", // <locale for formats>
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*2*/ "f:",   // <pattern or '-'> <number> <exp. string>
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*3*/ "fp:",  // <pattern or '-'> <number> <exp. string> <exp. number>
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*4*/ "rt:",  // <pattern or '-'> <(exp.) number> <(exp.) string>
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*5*/ "p:",   // <pattern or '-'> <string> <exp. number>
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*6*/ "perr:", // <pattern or '-'> <invalid string>
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'>
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt>
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    0
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return an integer representing the next token from this
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iterator.  The integer will be an index into the given list, or
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -1 if there are no more tokens, or -2 if the token is not on
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the list.
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t keywordIndex(const UnicodeString& tok) {
2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int32_t i=0; KEYWORDS[i]!=0; ++i) {
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (tok==KEYWORDS[i]) {
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return i;
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return -1;
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a CurrencyAmount using the given NumberFormat, with
2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the 'delim' character separating the number and the currency.
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void parseCurrencyAmount(const UnicodeString& str,
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                const NumberFormat& fmt,
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                UChar delim,
2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                Formattable& result,
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                UErrorCode& ec) {
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString num, cur;
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = str.indexOf(delim);
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.extractBetween(0, i, num);
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.extractBetween(i+1, INT32_MAX, cur);
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable n;
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.parse(num, n, ec);
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec));
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCases() {
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TextFile reader("NumberFormatTestCases.txt", "UTF8", ec);
2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
21856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Couldn't open NumberFormatTestCases.txt");
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TokenIterator tokens(&reader);
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en", "US", "");
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *ref = 0, *fmt = 0;
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *mfmt = 0;
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat, tok, mloc, str, out, where, currAmt;
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable n;
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (;;) {
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ec = U_ZERO_ERROR;
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (!tokens.next(tok, ec)) {
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        where = UnicodeString("(") + tokens.getLineNumber() + ") ";
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t cmd = keywordIndex(tok);
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        switch (cmd) {
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 0:
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // ref= <reference pattern>
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            delete ref;
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ref = new DecimalFormat(tok,
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      new DecimalFormatSymbols(Locale::getUS(), ec), ec);
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(ec)) {
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                dataerrln("Error constructing DecimalFormat");
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                goto error;
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 1:
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // loc= <locale>
2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
221827f654740f2a26ad62a5c155af9199af9e69b889claireho            loc = Locale::createFromName(CharString().appendInvariantChars(tok, ec).data());
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 2: // f:
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 3: // fp:
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 4: // rt:
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 5: // p:
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (tok != "-") {
2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                pat = tok;
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete fmt;
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec);
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (U_FAILURE(ec)) {
2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec));
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ec = U_ZERO_ERROR;
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (cmd == 3) {
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if (!tokens.next(tok, ec)) goto error;
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (cmd == 2 || cmd == 3 || cmd == 4) {
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // f: <pattern or '-'> <number> <exp. string>
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // fp: <pattern or '-'> <number> <exp. string> <exp. number>
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                // rt: <pattern or '-'> <number> <string>
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString num;
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(num, ec)) goto error;
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(str, ec)) goto error;
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ref->parse(num, n, ec);
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "\"" + pat + "\".format(" + num + ")",
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             str, fmt->format(n, out.remove(), ec));
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("format", ec);
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (cmd == 3) { // fp:
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(num, ec)) goto error;
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ref->parse(num, n, ec);
2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertSuccess("parse", ec);
2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (cmd != 2) { // != f:
2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    Formattable m;
2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    fmt->parse(str, m, ec);
2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertSuccess("parse", ec);
2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")",
2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 n, m);
226350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // p: <pattern or '-'> <string to parse> <exp. number>
2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UnicodeString expstr;
2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(str, ec)) goto error;
2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (!tokens.next(expstr, ec)) goto error;
2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                Formattable exp, n;
2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ref->parse(expstr, exp, ec);
2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                fmt->parse(str, n, ec);
2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("parse", ec);
2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")",
2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             exp, n);
2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 8: // fpc:
2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(tok, ec)) goto error;
2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (tok != "-") {
2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mloc = tok;
2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                delete mfmt;
2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mfmt = MeasureFormat::createCurrencyFormat(
228527f654740f2a26ad62a5c155af9199af9e69b889claireho                    Locale::createFromName(
228627f654740f2a26ad62a5c155af9199af9e69b889claireho                        CharString().appendInvariantChars(mloc, ec).data()), ec);
2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (U_FAILURE(ec)) {
2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec));
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ec = U_ZERO_ERROR;
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (!tokens.next(tok, ec)) goto error;
2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2295f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            } else if (mfmt == NULL) {
2296f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                errln("FAIL: " + where + "Loc \"" + mloc + "\": skip case using previous locale, no valid MeasureFormat");
2297f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2298f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2299f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                if (!tokens.next(tok, ec)) goto error;
2300f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt>
2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(str, ec)) goto error;
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")",
2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             str, mfmt->format(n, out.remove(), ec));
2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                assertSuccess("format", ec);
2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(currAmt, ec)) goto error;
2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec);
2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (assertSuccess("parseCurrencyAmount", ec)) {
2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                Formattable m;
2315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                mfmt->parseObject(str, m, ec);
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (assertSuccess("parseCurrency", ec)) {
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")",
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 n, m);
2320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
2321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln("FAIL: source " + str);
2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            break;
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 6:
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // perr: <pattern or '-'> <invalid string>
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: Under construction");
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case 7: {
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            // pat: <pattern> <exp. toPattern, or '-' or 'err'>
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString testpat;
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString exppat;
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(testpat, ec)) goto error;
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!tokens.next(exppat, ec)) goto error;
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool err = exppat == "err";
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UBool existingPat = FALSE;
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (testpat == "-") {
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid command \"pat: - err\"");
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    continue;
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                existingPat = TRUE;
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                testpat = pat;
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (exppat == "-") exppat = testpat;
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            DecimalFormat* f = 0;
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode ec2 = U_ZERO_ERROR;
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (existingPat) {
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = fmt;
2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                f = new DecimalFormat(testpat, ec2);
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_SUCCESS(ec2)) {
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Invalid pattern \"" + testpat +
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" was accepted");
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UnicodeString pat2;
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    assertEquals(where + "\"" + testpat + "\".toPattern()",
2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 exppat, f->toPattern(pat2));
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (err) {
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    logln("Ok: " + where + "Invalid pattern \"" + testpat +
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    errln("FAIL: " + where + "Valid pattern \"" + testpat +
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          "\" failed: " + u_errorName(ec2));
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (!existingPat) delete f;
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } break;
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        case -1:
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            errln("FAIL: " + where + "Unknown command \"" + tok + "\"");
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            goto done;
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    goto done;
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error:
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(ec)) {
2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Unexpected EOF");
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
23846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec));
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done:
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete mfmt;
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete ref;
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//----------------------------------------------------------------------
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) {
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == b.getType()) {
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return a == b;
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (a.getType() == Formattable::kLong) {
2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kInt64) {
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getLong() == b.getLong();
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
240750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kDouble) {
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double) b.getLong();
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kInt64) {
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getDouble() == (double)b.getInt64();
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if (a.getType() == Formattable::kInt64) {
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (b.getType() == Formattable::kLong) {
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return a.getInt64() == (int64_t)b.getLong();
2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if (b.getType() == Formattable::kDouble) {
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return a.getInt64() == (int64_t)b.getDouble();
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return FALSE;
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, n, str, FALSE);
2428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    expect_rbnf(fmt, str, n);
2429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) {
2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Don't round-trip format test, since we explicitly do it
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, n, str, FALSE);
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expect(fmt, str, n);
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n,
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               const UnicodeString& exp,
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                               UErrorCode status) {
244027f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
244127f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect2(*fmt, n, exp);
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable num;
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.parse(str, num, status);
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
245327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status));
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (equalValue(num, n)) {
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + "\" x " +
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num));
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
246327f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL \"") + str + "\" x " +
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              pat + " = " +
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) {
2470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Formattable num;
2472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.parse(str, num, status);
2473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
2474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL: Parse failed for \"") + str + "\"");
2475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
2476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (equalValue(num, n)) {
2478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        logln(UnicodeString("Ok   \"") + str + " = " +
2479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num));
2480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
2481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln(UnicodeString("FAIL \"") + str + " = " +
2482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              toString(num) + ", expected " + toString(n));
2483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n,
2487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString saw;
2489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    FieldPosition pos;
2490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    fmt.format(n, saw, pos, status);
2492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (saw == exp) {
249450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        logln(UnicodeString("Ok   ") + toString(n) +
2495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\"");
2497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // number => string (but not the other way around: number
2499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // => string => number2, might have number2 != number):
2500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (rt) {
2501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable n2;
2502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.parse(exp, n2, status);
2503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
2504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\"");
2505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                return;
2506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString saw2;
2508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (saw2 != exp) {
2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      " => \"" + saw2 + "\"");
2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    } else {
251650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL ") + toString(n) +
2517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              " = \"" +
2518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
2521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n,
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              const UnicodeString& exp, UBool rt) {
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString saw;
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    FieldPosition pos;
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(n, saw, pos, status);
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CHECK(status, "NumberFormat::format");
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ((DecimalFormat*) &fmt)->toPattern(pat);
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (saw == exp) {
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   ") + toString(n) + " x " +
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\"");
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // We should be able to round-trip the formatted string =>
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // number => string (but not the other way around: number
2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // => string => number2, might have number2 != number):
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (rt) {
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            Formattable n2;
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.parse(exp, n2, status);
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_FAILURE(status)) {
254227f654740f2a26ad62a5c155af9199af9e69b889claireho                errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status));
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return;
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UnicodeString saw2;
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            fmt.format(n2, saw2, pos, status);
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CHECK(status, "NumberFormat::format");
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (saw2 != exp) {
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) +
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                      " => \"" + saw2 + "\"");
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
255427f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln(UnicodeString("FAIL ") + toString(n) + " x " +
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(pat) + " = \"" +
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              escape(saw) + "\", expected \"" + exp + "\"");
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n,
2561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                              const UnicodeString& exp, UBool rt,
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                              UErrorCode status) {
256327f654740f2a26ad62a5c155af9199af9e69b889claireho    if (fmt == NULL || U_FAILURE(status)) {
256427f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("FAIL: NumberFormat constructor");
2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(*fmt, n, exp, rt);
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fmt;
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale,
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                      double value, const UnicodeString& string) {
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat& fmt = * (DecimalFormat*) &nf;
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar DEFAULT_CURR[] = {45/*-*/,0};
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar curr[4];
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_strcpy(curr, DEFAULT_CURR);
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*locale.getLanguage() != 0) {
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ucurr_forLocale(locale.getName(), curr, 4, &ec);
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("ucurr_forLocale", ec);
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr, ec);
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        assertSuccess("DecimalFormat::setCurrency", ec);
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        fmt.setCurrency(curr); //Deprecated variant, for coverage only
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.format(value, s);
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020);
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // Default display of the number yields "1234.5599999999999"
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // instead of "1234.56".  Use a formatter to fix this.
259150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberFormat* f =
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NumberFormat::createInstance(Locale::getUS(), ec);
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString v;
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(ec)) {
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        // Oops; bad formatter.  Use default op+= display.
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        v = (UnicodeString)"" + value;
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setMaximumFractionDigits(4);
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->setGroupingUsed(FALSE);
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        f->format(value, v);
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete f;
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (s == string) {
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s));
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) +
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + prettify(string));
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) {
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString pat;
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.toPattern(pat);
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (pat == exp) {
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\"");
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\"");
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos) {
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, 0, (UnicodeString)"");
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, UChar pad) {
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    expectPad(fmt, pat, pos, width, UnicodeString(pad));
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat,
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                 int32_t pos, int32_t width, const UnicodeString& pad) {
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t apos = 0, awidth = 0;
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString apadStr;
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fmt.applyPattern(pat, status);
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_SUCCESS(status)) {
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = fmt.getPadPosition();
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = fmt.getFormatWidth();
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr=fmt.getPadCharacterString();
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apos = -1;
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        awidth = width;
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        apadStr = pad;
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (apos == pos && awidth == width && apadStr == pad) {
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UnicodeString infoStr;
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (pos == ILLEGAL) {
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr;
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        logln(UnicodeString("Ok   \"") + pat + "\" pos=" + apos + infoStr);
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos +
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              " width=" + awidth + " pad=" + apadStr +
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru              ", expected " + pos + " " + width + " " + pad);
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
265759d709d503bab6e2b61931737e662dd293b40578ccornelius
265859d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale  - FIXME
265959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() {
266059d709d503bab6e2b61931737e662dd293b40578ccornelius/*
2661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar JPY[] = {0x4A, 0x50, 0x59, 0};
2662fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    static const UChar CNY[] = {0x43, 0x4E, 0x59, 0};
266359d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
266459d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmt(
266559d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getUS(), status));
266659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
266759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Could not create number format instance.");
266859d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
266959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
267059d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
267159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\u00A51,235");
267259d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__);
267359d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, JPY, 1235,  "\\uFFE51,235");
267459d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__);
267559d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmt, CNY, 1235,  "CN\\u00A51,235");
267659d709d503bab6e2b61931737e662dd293b40578ccornelius
267759d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtTW(
267859d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status));
267959d709d503bab6e2b61931737e662dd293b40578ccornelius
268059d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__);
268159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\u00A51,235");
268259d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__);
268359d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtTW, CNY, 1235,  "\\uFFE51,235");
268459d709d503bab6e2b61931737e662dd293b40578ccornelius
268559d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<NumberFormat> fmtJP(
268659d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat::createCurrencyInstance(Locale::getJapan(), status));
268759d709d503bab6e2b61931737e662dd293b40578ccornelius
268859d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__);
268959d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\u00A51,235");
269059d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__);
269159d709d503bab6e2b61931737e662dd293b40578ccornelius    expectParseCurrency(*fmtJP, JPY, 1235,  "\\uFFE51,235");
269259d709d503bab6e2b61931737e662dd293b40578ccornelius
269359d709d503bab6e2b61931737e662dd293b40578ccornelius    // more..
269459d709d503bab6e2b61931737e662dd293b40578ccornelius*/
269559d709d503bab6e2b61931737e662dd293b40578ccornelius}
269659d709d503bab6e2b61931737e662dd293b40578ccornelius
269759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) {
269859d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
269959d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString utext = ctou(text);
270059d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos));
270159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (!ppos.getIndex()) {
270259d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Parse of ") + utext + " should have succeeded.");
270359d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
270459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
270559d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
270659d709d503bab6e2b61931737e662dd293b40578ccornelius
270759d709d503bab6e2b61931737e662dd293b40578ccornelius    char theInfo[100];
270859d709d503bab6e2b61931737e662dd293b40578ccornelius    sprintf(theInfo, "For locale %s, string \"%s\", currency ",
270959d709d503bab6e2b61931737e662dd293b40578ccornelius            fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(),
271059d709d503bab6e2b61931737e662dd293b40578ccornelius            text);
271159d709d503bab6e2b61931737e662dd293b40578ccornelius    u_austrcpy(theInfo+uprv_strlen(theInfo), currency);
271259d709d503bab6e2b61931737e662dd293b40578ccornelius
271359d709d503bab6e2b61931737e662dd293b40578ccornelius    char theOperation[100];
271459d709d503bab6e2b61931737e662dd293b40578ccornelius
271559d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
271659d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check amount:");
271759d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue(theOperation, amount ==  currencyAmount->getNumber().getDouble(status));
271859d709d503bab6e2b61931737e662dd293b40578ccornelius
271959d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcpy(theOperation, theInfo);
272059d709d503bab6e2b61931737e662dd293b40578ccornelius    uprv_strcat(theOperation, ", check currency:");
272159d709d503bab6e2b61931737e662dd293b40578ccornelius    assertEquals(theOperation, currency, currencyAmount->getISOCurrency());
272259d709d503bab6e2b61931737e662dd293b40578ccornelius}
272359d709d503bab6e2b61931737e662dd293b40578ccornelius
272459d709d503bab6e2b61931737e662dd293b40578ccornelius
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* localeID = "pt_PT@currency=PTE";
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc(localeID);
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0\\u200B")); // per cldrbug 7670
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString s;
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status);
2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
27336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status));
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    currencyFmt->format(1150.50, s);
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(s!=expected){
273850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln(UnicodeString("FAIL: Expected: ")+expected
273950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                + UnicodeString(" Got: ") + s
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete currencyFmt;
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost()
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2750103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Win32NumberTest::testLocales(this);
2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale loc("en_US@compat=host");
2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for (UNumberFormatStyle k = UNUM_DECIMAL;
2755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho         k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) {
2756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status));
2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (!NumberFormat::isStyleSupported(k)) {
2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            if (status != U_UNSUPPORTED_ERROR) {
2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                errln("FAIL: expected style %d to be unsupported - %s",
2761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            }
2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (full.isNull() || U_FAILURE(status)) {
2766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("FAIL: Can't create number instance of style %d for host - %s",
2767b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                      k, u_errorName(status));
2768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString result1;
2771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable number(10.00);
2772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->format(number, result1, status);
2773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't format for host");
2775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable formattable;
2778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        full->parse(result1, formattable, status);
2779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
2780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Can't parse for host");
2781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            return;
2782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
2783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone()
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*
2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Verify that a cloned formatter gives the same results
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    and is useable after the original has been deleted.
2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    */
2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This is mainly important on Windows.
2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale loc("en_US@compat=host");
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UDate now = Calendar::getNow();
2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    NumberFormat *full = NumberFormat::createInstance(loc, status);
2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (full == NULL || U_FAILURE(status)) {
27986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status));
2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result1;
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full->format(now, result1, status);
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format *fullClone = full->clone();
2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete full;
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    full = NULL;
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString result2;
2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fullClone->format(now, result2, status);
2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: format failure.");
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result1 != result2) {
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Clone returned different result from non-clone.");
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete fullClone;
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat()
2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // This test is here to increase code coverage.
2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *cloneObj;
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString str;
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable toFormat, result;
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0};
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale  saveDefaultLocale = Locale::getDefault();
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( Locale::getUK(), status );
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("couldn't set default Locale!");
2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status);
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale::setDefault( saveDefaultLocale, status );
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
28376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("FAIL: Status %s", u_errorName(status));
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj = (MeasureFormat *)measureObj->clone();
2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (cloneObj == NULL) {
2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone doesn't work");
2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status));
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->format(toFormat, str, status);
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    measureObj->parseObject(str, result, status);
2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    str.truncate(0);
2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->format(toFormat, str, status);
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    cloneObj->parseObject(str, result, status);
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)){
2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("FAIL: Status %s", u_errorName(status));
2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (result != toFormat) {
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat));
2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (*measureObj != *cloneObj) {
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Cloned object is not equal to the original object");
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete measureObj;
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    delete cloneObj;
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_USELESS_COLLATOR_ERROR;
2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (MeasureFormat::createCurrencyFormat(status) != NULL) {
2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("createCurrencyFormat should have returned NULL.");
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() {
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
28826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int roundingIncrements[]={1, 2, 5, 20, 50, 100};
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int testValues[]={0, 300};
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int j=0; j<2; j++) {
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) {
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            df->setRoundingMode((DecimalFormat::ERoundingMode)mode);
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (int increment=0; increment<6; increment++) {
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double base=testValues[j];
2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                double rInc=roundingIncrements[increment];
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                rInc=1.000000000/rInc;
2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                checkRounding(df, base, 20, rInc);
2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2901c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    delete df;
2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() {
2905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
2906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    struct {
2907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString  pattern;
2908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        double        testCase;
2909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        UnicodeString expected;
2910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    } tests[] = {
2911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" },
2912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            { (UnicodeString)"#50",    1230,  (UnicodeString)"1250" }
2913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
2914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t numOfTests = (sizeof(tests)/sizeof(tests[0]));
2915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UnicodeString result;
2916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status);
2918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if (U_FAILURE(status)) {
2919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("Unable to create decimal formatter. - %s", u_errorName(status));
2920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
2921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2922103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2923103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (int32_t i = 0; i < numOfTests; i++) {
2924103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        result.remove();
2925103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2926103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->applyPattern(tests[i].pattern, status);
2927103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(status)) {
2928103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status));
2929103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        df->format(tests[i].testCase, result);
2932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (result != tests[i].expected) {
2934103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected);
2935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
2936103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
2937103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2938103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete df;
2939103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
2940103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) {
2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->setRoundingIncrement(increment);
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double lastParsed=INT32_MIN; //Intger.MIN_VALUE
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (int i=-iterations; i<=iterations;i++) {
2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double iValue=base+(increment*(i*0.1));
2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        double smallIncrement=0.00000001;
2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (iValue!=0) {
2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            smallIncrement*=iValue;
2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        //we not only test the value, but some values in a small range around it
2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue-smallIncrement, lastParsed);
2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue, lastParsed);
2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        lastParsed=checkRound(df, iValue+smallIncrement, lastParsed);
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) {
2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString formattedDecimal;
2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double parsed;
2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Formattable result;
2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->format(iValue, formattedDecimal, status);
2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error formatting number.");
2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    df->parse(formattedDecimal, result, status);
2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Error parsing number.");
2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    parsed=result.getDouble();
2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (lastParsed>parsed) {
2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        errln("Rounding wrong direction! %d > %d", lastParsed, parsed);
2978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return lastParsed;
2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() {
2984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormatSymbols US(Locale::getUS(), status);
2986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormatSymbols constructor");
2987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    DecimalFormat df(UnicodeString("0"), US, status);
2988c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    CHECK(status, "DecimalFormat(0)");
298950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test zero multiplier
2991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
2992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    int32_t mult = df.getMultiplier();
2993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(0);
2994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != mult) {
2995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(0) did not ignore its zero input");
2996c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
299750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2998c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // test negative multiplier
299950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-1);
3001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    if (df.getMultiplier() != -1) {
3002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        errln("DecimalFormat.setMultiplier(-1) ignored its negative input");
3003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        return;
3004c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    }
300550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1122.123", -1122.123);
3007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1122.123", 1122.123);
3008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "1.2", -1.2);
3009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, "-1.2", 1.2);
3010c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
301150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // Note:  the tests with the final parameter of FALSE will not round trip.
301250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The initial numeric value will format correctly, after the multiplier.
301350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        Parsing the formatted text will be out-of-range for an int64, however.
301450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        The expect() function could be modified to detect this and fall back
301550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    //        to looking at the decimal parsed value, but it doesn't.
301650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN,    "9223372036854775808", FALSE);
301750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MIN+1,  "9223372036854775807");
301850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)-123,                  "123");
301950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, (int64_t)123,                  "-123");
3020c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, U_INT64_MAX-1, "-9223372036854775806");
302150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, U_INT64_MAX,   "-9223372036854775807");
3022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-2);
3024c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806");
302550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2),   "-9223372036854775808");
302650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE);
3027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3028c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    df.setMultiplier(-7);
302950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE);
303050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expect(df, -(U_INT64_MAX/7),   "9223372036854775807");
3031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800");
3032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported
3034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // (right now the big numbers get turned into doubles and lose tons of accuracy)
3035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX));
3036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1));
3037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2)));
3038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2)));
3039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it
3041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString());
3044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString());
3045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru}
3046c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
3047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct {
3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const char * stringToParse;
3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          parsedPos;
3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    int          errorIndex;
3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UBool        lenient;
3052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem;
3053c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
305450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() {
3056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the data are:
3057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // the string to be parsed, parsed position, parsed error index
3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const TestSpaceParsingItem DATA[] = {
3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // TOTO: Update the following TODOs, some may be handled now
3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, FALSE},
3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, FALSE},
3062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, FALSE},
3063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$ 124 ",       5, -1, FALSE}, // TODO: need to handle space correctly
3064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly
3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   0,  1, FALSE}, // errorIndex used to be 0, now 1 (better)
3067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        0,  0, FALSE}, // TODO: need to handle space correctly
3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           0,  3, FALSE}, // TODO: need to handle space correctly
3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        // {"124 $",       5, -1, FALSE}, // TODO: OK or not, need currency spacing rule
3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          0,  3, FALSE},
3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124",           4, -1, TRUE},
3072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 $124",      4, -1, TRUE},
3073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$124 ",          4, -1, TRUE},
3074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$ 124 ",         5, -1, TRUE},
3075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"$\\u00A0124 ",   5, -1, TRUE},
3076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {" $ 124 ",        6, -1, TRUE},
3077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124$",         4, -1, TRUE}, // TODO: need to handle trailing currency correctly
3078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124$",           3, -1, TRUE},
3079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        //{"124 $",        5, -1, TRUE}, // TODO: OK or not, need currency spacing rule
3080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"124 $",          4, -1, TRUE},
3081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    Locale locale("en_US");
3084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status);
3085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
3086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete foo;
3088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        ParsePosition parsePosition(0);
3092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse);
3093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int parsedPosition = DATA[i].parsedPos;
3094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int errorIndex = DATA[i].errorIndex;
3095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        foo->setLenient(DATA[i].lenient);
3096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        foo->parse(stringToBeParsed, result, parsePosition);
3098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getIndex() != parsedPosition ||
3099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            parsePosition.getErrorIndex() != errorIndex) {
3100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")");
3101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (parsePosition.getErrorIndex() == -1 &&
310350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            result.getType() == Formattable::kLong &&
3104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != 124) {
3105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong());
3106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete foo;
3109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/**
3112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword.
3113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */
3114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct {
3115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *localeName;
3116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double      value;
3117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UBool        isRBNF;
3118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const char *expectedResult;
3119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem;
3120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() {
3122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem DATA[] = {
3124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" },
3125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" },
3126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" },
312759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" },
3128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35
3129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ar_MA", 1234.567, FALSE, "1.234,567" },
3130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" },
3132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" },
3133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35
3134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" },
3135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" },
313654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" },
3137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        { NULL, 0, FALSE, NULL }
3138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    };
3139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode ec;
314127f654740f2a26ad62a5c155af9199af9e69b889claireho
3142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    const TestNumberingSystemItem *item;
3143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for (item = DATA; item->localeName != NULL; item++) {
3144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        ec = U_ZERO_ERROR;
3145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        Locale loc = Locale::createFromName(item->localeName);
314650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3147fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *origFmt = NumberFormat::createInstance(loc,ec);
3148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (U_FAILURE(ec)) {
3149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec));
3150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            continue;
3151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3152fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // Clone to test ticket #10682
3153fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        NumberFormat *fmt = (NumberFormat *) origFmt->clone();
3154fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        delete origFmt;
3155fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
3156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if (item->isRBNF) {
3158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        } else {
3160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult));
3161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
3162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt;
3163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Test bogus keyword value
3167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    ec = U_ZERO_ERROR;
3168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    Locale loc4 = Locale::createFromName("en_US@numbers=foobar");
3169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec);
3170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if ( ec != U_UNSUPPORTED_ERROR ) {
3171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR");
3172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete fmt4;
3173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
317527f654740f2a26ad62a5c155af9199af9e69b889claireho    ec = U_ZERO_ERROR;
317650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns = NumberingSystem::createInstance(ec);
317750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (U_FAILURE(ec)) {
317850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec));
317950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
318050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318127f654740f2a26ad62a5c155af9199af9e69b889claireho    if ( ns != NULL ) {
318227f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getDynamicClassID();
318327f654740f2a26ad62a5c155af9199af9e69b889claireho        ns->getStaticClassID();
318427f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
318527f654740f2a26ad62a5c155af9199af9e69b889claireho        errln("FAIL: getInstance() returned NULL.");
318627f654740f2a26ad62a5c155af9199af9e69b889claireho    }
318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
318850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    NumberingSystem *ns1 = new NumberingSystem(*ns);
318950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (ns1 == NULL) {
319050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        errln("FAIL: NumberSystem copy constructor returned NULL.");
319150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
319250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
319350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns1;
319450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    delete ns;
3195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
3196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
319950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() {
3201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][6] = {
3202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the fields in the following test are:
320350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
320450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // currency pattern (with negative pattern),
3205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency number to be formatted,
3206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency symbol name, such as "$" for USD,
3207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using currency ISO name, such as "USD",
3208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency format using plural name, such as "US dollars".
3209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for US locale
321050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"},
321150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"},
321259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"},
3213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // for CHINA locale
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)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"},
3216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"}
3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0};
3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString doubleCurrencyStr(doubleCurrencySign);
3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0};
3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString tripleCurrencyStr(tripleCurrencySign);
3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* locale = DATA[i][0];
3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString pat = ctou(DATA[i][1]);
3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][2]);
3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status);
3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete sym;
3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j=1; j<=3; ++j) {
3235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // j represents the number of currency sign in the pattern.
3236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (j == 2) {
3237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr);
3238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            } else if (j == 3) {
3239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr);
3240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status);
3243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status)) {
3244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAILED init DecimalFormat ");
3245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                delete fmt;
3246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                continue;
3247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString s;
3249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            ((NumberFormat*) fmt)->format(numberToBeFormat, s);
3250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][3] is the currency format result using a
3251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // single currency sign.
3252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // double currency sign.
3254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // triple currency sign.
3256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][j+2] is the currency format result using
3257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // 'j' number of currency sign.
3258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString currencyFormatResult = ctou(DATA[i][2+j]);
3259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (s.compare(currencyFormatResult)) {
3260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s);
3261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // mix style parsing
3263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            for (int k=3; k<=5; ++k) {
3264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][3] is the currency format result using a
3265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // single currency sign.
3266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][4] is the currency format result using
3267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // double currency sign.
3268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // DATA[i][5] is the currency format result using
3269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              // triple currency sign.
3270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UnicodeString oneCurrencyFormat = ctou(DATA[i][k]);
3271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              UErrorCode status = U_ZERO_ERROR;
3272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              Formattable parseRes;
3273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              fmt->parse(oneCurrencyFormat, parseRes, status);
3274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              if (U_FAILURE(status) ||
3275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kDouble &&
327650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                   parseRes.getDouble() != numberToBeFormat) ||
3277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  (parseRes.getType() == Formattable::kLong &&
3278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                   parseRes.getLong() != numberToBeFormat)) {
3279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                  errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " +
3280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                        i + ", " + j + ", " + k);
3281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru              }
3282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete fmt;
3284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
329050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() {
3292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status);
3294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete curFmt;
3296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* formats[] = {
3299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1,234.56",  // string to be parsed
3300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1,234.56",
3301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1,234.56",
3302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1,234.56 US dollars"
3303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
330427f654740f2a26ad62a5c155af9199af9e69b889claireho    const CurrencyAmount* curramt = NULL;
3305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) {
3306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(formats[i]);
330727f654740f2a26ad62a5c155af9199af9e69b889claireho        logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed);
3308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        curFmt->parseObject(stringToBeParsed, result, status);
3311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
331250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status));
331350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else if (result.getType() != Formattable::kObject ||
331427f654740f2a26ad62a5c155af9199af9e69b889claireho            (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL ||
331527f654740f2a26ad62a5c155af9199af9e69b889claireho            curramt->getNumber().getDouble() != 1234.56 ||
331627f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD)
331727f654740f2a26ad62a5c155af9199af9e69b889claireho        ) {
3318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number ");
331927f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getNumber().getDouble() != 1234.56) {
332027f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble());
3321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
332227f654740f2a26ad62a5c155af9199af9e69b889claireho            if (curramt->getISOCurrency() != ISO_CURRENCY_USD) {
332327f654740f2a26ad62a5c155af9199af9e69b889claireho                errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency());
3324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete curFmt;
3328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
333150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() {
3333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // Locale.US
3334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
3335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status);
3336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete sym;
3338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UnicodeString pat;
3341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UChar currency = 0x00A4;
3342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    // "\xA4#,##0.00;-\xA4#,##0.00"
3343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00");
3344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    DecimalFormat* fmt = new DecimalFormat(pat, sym, status);
3345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if (U_FAILURE(status)) {
3346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete fmt;
3347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse");
3348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[][2] = {
3351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
3352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // string to be parsed, the parsed result (number)
335350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1.00", "1"},
335450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1.00", "1"},
335550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1.00 US dollar", "1"},
335650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"$1,234.56", "1234.56"},
335750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"USD1,234.56", "1234.56"},
335850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"1,234.56 US dollar", "1234.56"},
3359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) {
3361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString stringToBeParsed = ctou(DATA[i][0]);
3362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double parsedResult = atof(DATA[i][1]);
3363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Formattable result;
3365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        fmt->parse(stringToBeParsed, result, status);
3366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status) ||
3367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kDouble &&
3368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getDouble() != parsedResult) ||
3369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            (result.getType() == Formattable::kLong &&
3370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            result.getLong() != parsedResult)) {
3371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"FAIL parse: Expected " + parsedResult);
3372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    delete fmt;
337550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
337850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid
3379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() {
3380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
338250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
338850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
338959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"},
3390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"},
339159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"},
339259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"},
339359d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"},
3394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"},
3395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"},
339659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
339759d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"},
339859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
339959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
340059d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
3401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test locale without currency information
340250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"},
3403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test choice format
340459d709d503bab6e2b61931737e662dd293b40578ccornelius        {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"},
3405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
3406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3409b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
341150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for (int32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) {
3413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius      for (int32_t kIndex = 0; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) {
3414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNumberFormatStyle k = currencyStyles[kIndex];
3415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
3421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
34236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
342727f654740f2a26ad62a5c155af9199af9e69b889claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
343450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
3437b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
344650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
3455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
346150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                errln((UnicodeString)"FAIL: getCurrencyFormat of locale " +
3462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                      localeString + " failed roundtripping the number");
3463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
3464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble());
3465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
3466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong());
3467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
3468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
347150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() {
3477b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* DATA[][6] = {
3478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // the data are:
347950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // locale,
3480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency amount to be formatted,
3481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // currency ISO code to be formatted,
3482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using CURRENCYSTYLE,
3483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using ISOCURRENCYSTYLE,
3484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // format result using PLURALCURRENCYSTYLE,
3485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"},
348659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"},
3487b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"es_AR", "1", "USD", "US$1,00", "USD1,00", "1,00 d\\u00f3lar estadounidense"},
3488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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"},
348959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"},
3490f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        {"he_IL", "1", "USD", "1.00\\u00a0$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"},
349159d709d503bab6e2b61931737e662dd293b40578ccornelius        {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"},
3492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"},
349359d709d503bab6e2b61931737e662dd293b40578ccornelius        {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"},
34941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00\\ubbf8\\uad6d \\ub2ec\\ub7ec"},
34951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00\\u7c73\\u30c9\\u30eb"},
349659d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_CN", "1", "CNY", "\\uFFE5\\u00a01.00", "CNY\\u00a01.00", "1.00\\u4EBA\\u6C11\\u5E01"},
349759d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349859d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"},
349959d709d503bab6e2b61931737e662dd293b40578ccornelius        {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"},
35001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"},
35011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"},
350259d709d503bab6e2b61931737e662dd293b40578ccornelius        {"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"}
3503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
3504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const UNumberFormatStyle currencyStyles[] = {
3505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY,
3506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_ISO,
3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UNUM_CURRENCY_PLURAL
3508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
350959d709d503bab6e2b61931737e662dd293b40578ccornelius    static const char* currencyStyleNames[] = {
351059d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY",
351159d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_ISO",
351259d709d503bab6e2b61931737e662dd293b40578ccornelius      "UNUM_CURRENCY_PLURAL"
351359d709d503bab6e2b61931737e662dd293b40578ccornelius    };
351450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0;
3517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) {
3518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    printf("loop: %d\n", deadloop++);
3519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
352059d709d503bab6e2b61931737e662dd293b40578ccornelius    for (uint32_t i=0; i< sizeof(DATA)/sizeof(DATA[0]); ++i) {  /* i = test case #  - should be i=0*/
3521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius      for (int32_t kIndex = 2; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) {
352259d709d503bab6e2b61931737e662dd293b40578ccornelius        UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */
3523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* localeString = DATA[i][0];
3524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        double numberToBeFormat = atof(DATA[i][1]);
3525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        const char* currencyISOCode = DATA[i][2];
3526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        Locale locale(localeString);
3527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
3528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status);
352959d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("#%d NumberFormat(%s, %s) Currency=%s\n",
353059d709d503bab6e2b61931737e662dd293b40578ccornelius              i, localeString, currencyStyleNames[kIndex],
353159d709d503bab6e2b61931737e662dd293b40578ccornelius              currencyISOCode);
353259d709d503bab6e2b61931737e662dd293b40578ccornelius
3533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
35356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status));
3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UChar currencyCode[4];
3539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        u_charsToUChars(currencyISOCode, currencyCode, 4);
3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->setCurrency(currencyCode, status);
3541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (U_FAILURE(status)) {
3542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            delete numFmt;
3543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln((UnicodeString)"can not set currency:" + currencyISOCode);
3544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            continue;
3545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
354650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString strBuf;
3548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        numFmt->format(numberToBeFormat, strBuf);
354959d709d503bab6e2b61931737e662dd293b40578ccornelius        /*
3550b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        int resultDataIndex = 3 + kIndex;
3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // DATA[i][resultDataIndex] is the currency format result
3552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // using 'k' currency style.
3553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        UnicodeString formatResult = ctou(DATA[i][resultDataIndex]);
3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        if (strBuf.compare(formatResult)) {
3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            errln("FAIL: Expected " + formatResult + " actual: " + strBuf);
3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        */
3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // test parsing, and test parsing for all currency formats.
3559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        for (int j = 3; j < 6; ++j) {
356050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            // DATA[i][3] is the currency format result using
3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // CURRENCYSTYLE formatter.
3562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][4] is the currency format result using
3563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // ISOCURRENCYSTYLE formatter.
3564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // DATA[i][5] is the currency format result using
3565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            // PLURALCURRENCYSTYLE formatter.
3566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]);
3567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            UErrorCode status = U_ZERO_ERROR;
3568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            Formattable parseResult;
356959d709d503bab6e2b61931737e662dd293b40578ccornelius            logln("parse(%s)", DATA[i][j]);
3570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            numFmt->parse(oneCurrencyFormatResult, parseResult, status);
3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            if (U_FAILURE(status) ||
3572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kDouble &&
3573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getDouble() != numberToBeFormat) ||
3574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                (parseResult.getType() == Formattable::kLong &&
3575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                 parseResult.getLong() != numberToBeFormat)) {
357659d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] +
357759d709d503bab6e2b61931737e662dd293b40578ccornelius                      "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+".  Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]");
3578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                if (parseResult.getType() == Formattable::kDouble) {
357959d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble());
3580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                } else {
358159d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong());
3582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                }
358359d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)" round-trip would be: " + strBuf);
3584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru            }
3585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        }
3586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        delete numFmt;
358750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG
3590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif
3592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid
3596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() {
3597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* DATA[] = {
3598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US DOLLAR",  // case in-sensitive
3599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
3600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
3601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
3602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
3603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00",
360454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        "A$1.00",
3605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ADP1.00",
3607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AED1.00",
3609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFA1.00",
3611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AFN1.00",
3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ALL1.00",
3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AMD1.00",
3614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ANG1.00",
3615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOA1.00",
3616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOK1.00",
3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AON1.00",
3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AOR1.00",
3622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "ARS1.00",
3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARA1.00",
3625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARP1.00",
3627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ARS1.00",
3628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ATS1.00",
3630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AUD1.00",
3631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AWG1.00",
3632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZM1.00",
3634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZN1.00",
363559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u20132002)1.00",
363659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan afghani (1927\\u20132002)1.00",
3637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghani1.00",
3638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghanis1.00",
3639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Lek1.00",
3640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek1.00",
3641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian lek\\u00eb1.00",
3642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dinar1.00",
3643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinar1.00",
3644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian dinars1.00",
3645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peseta1.00",
3646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran peseta1.00",
3647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran pesetas1.00",
364859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u20131991)1.00",
364959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u20131999)1.00",
3650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanza1.00",
365159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u20132000)1.00",
365259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanza (1977\\u20131991)1.00",
365359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanza (1995\\u20131999)1.00",
3654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanza1.00",
365559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan kwanzas (1977\\u20131991)1.00",
365659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan readjusted kwanzas (1995\\u20131999)1.00",
3657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan kwanzas1.00",
365859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanza (1990\\u20132000)1.00",
365959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan new kwanzas (1990\\u20132000)1.00",
3660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austral1.00",
366159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u20131985)1.00",
3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Peso1.00",
3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine austral1.00",
3664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine australs1.00",
366559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine peso (1983\\u20131985)1.00",
3666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine peso1.00",
366759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine pesos (1983\\u20131985)1.00",
3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine pesos1.00",
3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dram1.00",
3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian dram1.00",
3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian drams1.00",
3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Florin1.00",
3673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban florin1.00",
3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dollar1.00",
3675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollar1.00",
3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian dollars1.00",
3677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schilling1.00",
3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schilling1.00",
3679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian schillings1.00",
368059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u20132006)1.00",
3681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Manat1.00",
368259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manat (1993\\u20132006)1.00",
3683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manat1.00",
368459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani manats (1993\\u20132006)1.00",
3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani manats1.00",
3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAD1.00",
3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BAM1.00",
3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BBD1.00",
3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BDT1.00",
3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEC1.00",
3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEF1.00",
3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BEL1.00",
3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGL1.00",
3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BGN1.00",
3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BHD1.00",
3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BIF1.00",
3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BMD1.00",
3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BND1.00",
3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOB1.00",
3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOP1.00",
3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BOV1.00",
3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRB1.00",
3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRC1.00",
3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRE1.00",
3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRL1.00",
3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRN1.00",
3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BRR1.00",
3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BSD1.00",
3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BTN1.00",
3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BUK1.00",
3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BWP1.00",
3725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYB1.00",
3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BYR1.00",
3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZD1.00",
3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dollar1.00",
3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollar1.00",
3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian dollars1.00",
3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dinar1.00",
3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinar1.00",
3734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini dinars1.00",
3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Taka1.00",
3736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi taka1.00",
3737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi takas1.00",
3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dollar1.00",
3739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollar1.00",
3740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian dollars1.00",
374159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u20131999)1.00",
3742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Ruble1.00",
374359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new ruble (1994\\u20131999)1.00",
374459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian new rubles (1994\\u20131999)1.00",
3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian ruble1.00",
3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian rubles1.00",
3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible)1.00",
3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial)1.00",
3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc1.00",
3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (convertible)1.00",
3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc (financial)1.00",
3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian franc1.00",
3753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (convertible)1.00",
3754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs (financial)1.00",
3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian francs1.00",
3756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dollar1.00",
3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollar1.00",
3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize dollars1.00",
3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dollar1.00",
3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollar1.00",
3761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan dollars1.00",
3762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultrum1.00",
3763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrum1.00",
3764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese ngultrums1.00",
3765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdol1.00",
3766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Peso1.00",
3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdol1.00",
3768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian mvdols1.00",
3769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian peso1.00",
3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian pesos1.00",
3771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Boliviano1.00",
3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivianos1.00",
3774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mark1.00",
377559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00",
3776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible mark1.00",
3777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina convertible marks1.00",
377859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinar (1992\\u20131994)1.00",
377959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Bosnia-Herzegovina dinars (1992\\u20131994)1.00",
3780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pula1.00",
3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pula1.00",
3782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan pulas1.00",
378359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzado (1989\\u20131990)1.00",
378459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzado (1986\\u20131989)1.00",
378559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u20131993)1.00",
378659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u20131986)1.00",
378759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1993\\u20131994)1.00",
3788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Real1.00",
378959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzado (1989\\u20131990)1.00",
379059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzados (1989\\u20131990)1.00",
379159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzado (1986\\u20131989)1.00",
379259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzados (1986\\u20131989)1.00",
379359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1990\\u20131993)1.00",
379459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiro (1967\\u20131986)1.00",
379559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiro (1993\\u20131994)1.00",
379659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1990\\u20131993)1.00",
379759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian new cruzeiros (1967\\u20131986)1.00",
379859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian cruzeiros (1993\\u20131994)1.00",
3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian real1.00",
3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian reals1.00",
38011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "British Pound1.00",
38021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "British pound1.00",
38031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "British pounds1.00",
3804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dollar1.00",
3805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollar1.00",
3806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei dollars1.00",
3807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Lev1.00",
3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Lev1.00",
3809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Leva1.00",
3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard lev1.00",
3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian hard leva1.00",
3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian lev1.00",
3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kyat1.00",
3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyat1.00",
3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese kyats1.00",
3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Franc1.00",
3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian franc1.00",
3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian francs1.00",
3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA$1.00",
3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CAD1.00",
3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CDF1.00",
38231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "West African CFA Franc1.00",
38241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Central African CFA Franc1.00",
38251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "West African CFA franc1.00",
38261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Central African CFA franc1.00",
38271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "West African CFA francs1.00",
38281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Central African CFA francs1.00",
3829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Franc1.00",
3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP franc1.00",
3831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP francs1.00",
3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFPF1.00",
3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHE1.00",
3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHF1.00",
3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CHW1.00",
3838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLF1.00",
3840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CLP1.00",
3841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CNY1.00",
3842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COP1.00",
3843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "COU1.00",
3845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CRC1.00",
3846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSD1.00",
3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CSK1.00",
3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CUP1.00",
3852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CVE1.00",
3853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CYP1.00",
3854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZK1.00",
3855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Riel1.00",
3856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riel1.00",
3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian riels1.00",
3858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dollar1.00",
3859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollar1.00",
3860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian dollars1.00",
3861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escudo1.00",
3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudo1.00",
3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean escudos1.00",
3864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dollar1.00",
3865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollar1.00",
3866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands dollars1.00",
3867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Peso1.00",
386827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Account (UF)1.00",
3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean peso1.00",
3870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean pesos1.00",
387127f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean unit of account (UF)1.00",
387227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean units of account (UF)1.00",
387327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yuan1.00",
3874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chinese yuan1.00",
3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Peso1.00",
3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian peso1.00",
3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian pesos1.00",
3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian Franc1.00",
3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian franc1.00",
3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comorian francs1.00",
3881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Franc1.00",
3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese franc1.00",
3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese francs1.00",
3884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f3n1.00",
3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3n1.00",
3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican col\\u00f3ns1.00",
3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dinar1.00",
3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kuna1.00",
3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinar1.00",
3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian dinars1.00",
3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kuna1.00",
3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian kunas1.00",
3893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Peso1.00",
3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban peso1.00",
3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban pesos1.00",
3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Pound1.00",
3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pound1.00",
3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot pounds1.00",
3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Koruna1.00",
3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic koruna1.00",
3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic korunas1.00",
3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Koruna1.00",
3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard koruna1.00",
3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak hard korunas1.00",
3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DDM1.00",
3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DEM1.00",
3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJF1.00",
3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DKK1.00",
3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DOP1.00",
3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZD1.00",
3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Krone1.00",
3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish krone1.00",
3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish kroner1.00",
3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mark1.00",
3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German mark1.00",
3918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German marks1.00",
3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Franc1.00",
3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian franc1.00",
3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian francs1.00",
3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Peso1.00",
3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican peso1.00",
3924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican pesos1.00",
3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC$1.00",
3926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECS1.00",
3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ECV1.00",
3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EEK1.00",
3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EGP1.00",
3934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ERN1.00",
3936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESA1.00",
3938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESB1.00",
3940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ESP1.00",
3941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ETB1.00",
3942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EUR1.00",
3943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dollar1.00",
3944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollar1.00",
3945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean dollars1.00",
3946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Mark1.00",
3947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German mark1.00",
3948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German marks1.00",
3949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucre1.00",
395027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Value1.00",
3951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucre1.00",
3952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian sucres1.00",
395327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian unit of constant value1.00",
395427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian units of constant value1.00",
3955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Pound1.00",
3956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pound1.00",
3957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian pounds1.00",
3958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f3n1.00",
3959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran col\\u00f3n1.00",
3960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran colones1.00",
3961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwele1.00",
3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean ekwele1.00",
3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakfa1.00",
3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfa1.00",
3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean nakfas1.00",
3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroon1.00",
3967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroon1.00",
3968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian kroons1.00",
3969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Birr1.00",
3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birr1.00",
3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian birrs1.00",
3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Euro1.00",
3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Unit1.00",
3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Unit1.00",
3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Unit1.00",
3976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC)1.00",
3977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD)1.00",
3978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite unit1.00",
3979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European composite units1.00",
3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency unit1.00",
3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European currency units1.00",
3982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary unit1.00",
3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European monetary units1.00",
3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBC)1.00",
3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European unit of account (XBD)1.00",
3986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBC)1.00",
3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European units of account (XBD)1.00",
3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FIM1.00",
3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJD1.00",
3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FKP1.00",
3993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FRF1.00",
3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Pound1.00",
3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pound1.00",
3997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands pounds1.00",
3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dollar1.00",
3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollar1.00",
4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian dollars1.00",
4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markka1.00",
4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markka1.00",
4003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish markkas1.00",
400450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "CHF1.00",
4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Franc1.00",
4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Franc1.00",
4007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Franc1.00",
4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-franc1.00",
4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-francs1.00",
4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French franc1.00",
4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French francs1.00",
4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold franc1.00",
4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French gold francs1.00",
4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GBP1.00",
4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEK1.00",
4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GEL1.00",
4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHC1.00",
4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GHS1.00",
4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GIP1.00",
4023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GMD1.00",
4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNF1.00",
4026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GNS1.00",
4028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQE1.00",
4030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GRD1.00",
4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWE1.00",
4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GWP1.00",
4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GYD1.00",
4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalasi1.00",
4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasi1.00",
4040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian dalasis1.00",
4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Larit1.00",
4042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lari1.00",
4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larit1.00",
4044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian kupon larits1.00",
4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian lari1.00",
4046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian laris1.00",
404759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u20132007)1.00",
4048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Cedi1.00",
404959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedi (1979\\u20132007)1.00",
4050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedi1.00",
405159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian cedis (1979\\u20132007)1.00",
4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian cedis1.00",
4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Pound1.00",
4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pound1.00",
4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar pounds1.00",
4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gold1.00",
4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachma1.00",
4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachma1.00",
4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek drachmas1.00",
4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetzal1.00",
4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzal1.00",
4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan quetzals1.00",
4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Franc1.00",
4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syli1.00",
4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean franc1.00",
4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean francs1.00",
4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean syli1.00",
4069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean sylis1.00",
4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Peso1.00",
4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau peso1.00",
4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau pesos1.00",
4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dollar1.00",
4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollar1.00",
4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese dollars1.00",
4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK$1.00",
4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HKD1.00",
4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRD1.00",
4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HRK1.00",
4083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HTG1.00",
4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HUF1.00",
4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourde1.00",
4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourde1.00",
4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian gourdes1.00",
4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempira1.00",
4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempira1.00",
4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran lempiras1.00",
4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dollar1.00",
4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollar1.00",
4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong dollars1.00",
4095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forint1.00",
4096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forint1.00",
4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian forints1.00",
4098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IDR1.00",
4099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IEP1.00",
4100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILP1.00",
4102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ILS1.00",
4103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "INR1.00",
4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQD1.00",
4105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IRR1.00",
4106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ISK1.00",
4108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ITL1.00",
4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kr\\u00f3na1.00",
4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3na1.00",
4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic kr\\u00f3nur1.00",
4112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupee1.00",
4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupee1.00",
4114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian rupees1.00",
4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupiah1.00",
4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiah1.00",
4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian rupiahs1.00",
4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Rial1.00",
4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rial1.00",
4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian rials1.00",
4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dinar1.00",
4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinar1.00",
4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi dinars1.00",
4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Pound1.00",
4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pound1.00",
4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish pounds1.00",
4127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Pound1.00",
4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli new sheqel1.00",
4129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pound1.00",
4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli pounds1.00",
4131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lira1.00",
4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian lira1.00",
4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian liras1.00",
4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JMD1.00",
4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JOD1.00",
4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JPY1.00",
4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dollar1.00",
4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollar1.00",
4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican dollars1.00",
4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Yen1.00",
4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese yen1.00",
4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dinar1.00",
4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinar1.00",
4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian dinars1.00",
4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KES1.00",
4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KGS1.00",
4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KHR1.00",
4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KMF1.00",
4149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KPW1.00",
4151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KRW1.00",
4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KWD1.00",
4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KYD1.00",
4155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZT1.00",
415627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Tenge1.00",
415727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenge1.00",
415827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani tenges1.00",
4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shilling1.00",
4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shilling1.00",
4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan shillings1.00",
4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dinar1.00",
4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinar1.00",
4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti dinars1.00",
4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani Som1.00",
4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani som1.00",
4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani soms1.00",
4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HNL1.00",
4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LAK1.00",
4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LBP1.00",
4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LKR1.00",
4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LRD1.00",
4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LSL1.00",
4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTL1.00",
4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LTT1.00",
4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUC1.00",
4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUF1.00",
4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LUL1.00",
4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVL1.00",
4188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LVR1.00",
4190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LYD1.00",
4191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Kip1.00",
4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kip1.00",
4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian kips1.00",
4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lats1.00",
4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Ruble1.00",
4196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian lats1.00",
4197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        "Latvian lati1.00",
4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian ruble1.00",
4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian rubles1.00",
4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Pound1.00",
4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pound1.00",
4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese pounds1.00",
4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Loti1.00",
4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho loti1.00",
4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho lotis1.00",
4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dollar1.00",
4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollar1.00",
4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian dollars1.00",
4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dinar1.00",
4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinar1.00",
4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan dinars1.00",
4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Litas1.00",
4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talonas1.00",
4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litas1.00",
4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian litai1.00",
4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonas1.00",
4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian talonases1.00",
4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Franc1.00",
4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Franc1.00",
4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Franc1.00",
4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible franc1.00",
4222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian convertible francs1.00",
4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial franc1.00",
4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg financial francs1.00",
4225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian franc1.00",
4226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian francs1.00",
4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAD1.00",
4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MAF1.00",
4231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDL1.00",
4233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX$1.00",
4234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGA1.00",
4236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MGF1.00",
4238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MKD1.00",
4239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MLF1.00",
4241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MMK1.00",
4243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MNT1.00",
4244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MOP1.00",
4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MRO1.00",
4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTL1.00",
4248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MTP1.00",
4250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MUR1.00",
4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MVR1.00",
4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MWK1.00",
4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXN1.00",
4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXP1.00",
4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MXV1.00",
4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MYR1.00",
4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZE1.00",
4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZM1.00",
4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZN1.00",
4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Pataca1.00",
4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese pataca1.00",
4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese patacas1.00",
4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Denar1.00",
4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denar1.00",
4270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian denari1.00",
4271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariaries1.00",
4272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariary1.00",
4274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Franc1.00",
4275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy franc1.00",
4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy francs1.00",
4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwacha1.00",
4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwachas1.00",
4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgit1.00",
4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgit1.00",
4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian ringgits1.00",
4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiyaa1.00",
4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaa1.00",
4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian rufiyaas1.00",
4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Franc1.00",
4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian franc1.00",
4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian francs1.00",
4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lira1.00",
4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Pound1.00",
4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese lira1.00",
4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pound1.00",
4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese pounds1.00",
4295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiya1.00",
4296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiya1.00",
4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian ouguiyas1.00",
4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupee1.00",
4299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupee1.00",
4300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian rupees1.00",
4301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Peso1.00",
430259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u20131992)1.00",
430327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Unit1.00",
4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican peso1.00",
4305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican pesos1.00",
430659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver peso (1861\\u20131992)1.00",
430759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican silver pesos (1861\\u20131992)1.00",
430827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment unit1.00",
430927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican investment units1.00",
4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Leu1.00",
4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan leu1.00",
4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan lei1.00",
4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugrik1.00",
4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugrik1.00",
4315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian tugriks1.00",
4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirham1.00",
4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Franc1.00",
4318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirham1.00",
4319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan dirhams1.00",
4320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan franc1.00",
4321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan francs1.00",
4322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escudo1.00",
4323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metical1.00",
4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudo1.00",
4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican escudos1.00",
4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican metical1.00",
4327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican meticals1.00",
432859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kyat1.00",
432959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyat1.00",
433059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar kyats1.00",
4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAD1.00",
4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NGN1.00",
4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIC1.00",
4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NIO1.00",
4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NLG1.00",
4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NOK1.00",
4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NPR1.00",
4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT$1.00",
4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZ$1.00",
4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NZD1.00",
4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dollar1.00",
4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollar1.00",
4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian dollars1.00",
4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupee1.00",
4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupee1.00",
4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese rupees1.00",
4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilder1.00",
4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilder1.00",
4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean guilders1.00",
4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilder1.00",
4353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilder1.00",
4354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch guilders1.00",
4355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqel1.00",
4356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqels1.00",
4357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dollar1.00",
4358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollar1.00",
4359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand dollars1.00",
436027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdoba1.00",
436159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00",
436227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdoba1.00",
436327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan c\\u00f3rdobas1.00",
436459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00",
436559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00",
4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Naira1.00",
4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian naira1.00",
4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian nairas1.00",
4369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Won1.00",
4370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean won1.00",
4372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Krone1.00",
4373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian krone1.00",
4374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian kroner1.00",
4375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OMR1.00",
437659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican Metical (1980\\u20132006)1.00",
437759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican metical (1980\\u20132006)1.00",
437859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mozambican meticals (1980\\u20132006)1.00",
437959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Lei (1952\\u20132006)1.00",
438059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u20132006)1.00",
438159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian leu (1952\\u20132006)1.00",
438259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u20132006)1.00",
438359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinar (2002\\u20132006)1.00",
438459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian dinars (2002\\u20132006)1.00",
438559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u20132007)1.00",
438659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u20131998)1.00",
438759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinar (1992\\u20132007)1.00",
438859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese dinars (1992\\u20132007)1.00",
438959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pound (1957\\u20131998)1.00",
439059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese pounds (1957\\u20131998)1.00",
439159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
439259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u20132005)1.00",
4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Rial1.00",
4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rial1.00",
4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani rials1.00",
4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PAB1.00",
4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEI1.00",
4400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PEN1.00",
4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PES1.00",
4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PGK1.00",
4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PHP1.00",
4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PKR1.00",
4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLN1.00",
4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PLZ1.00",
4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PTE1.00",
4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PYG1.00",
4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupee1.00",
4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupee1.00",
4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani rupees1.00",
4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladium1.00",
4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balboa1.00",
4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboa1.00",
4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian balboas1.00",
4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kina1.00",
4423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean kina1.00",
4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guarani1.00",
4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guarani1.00",
4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan guaranis1.00",
4428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Inti1.00",
4429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Nuevo Sol1.00",
443059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u20131965)1.00",
4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian inti1.00",
4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian intis1.00",
4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevo sol1.00",
4434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian nuevos soles1.00",
443559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian sol (1863\\u20131965)1.00",
443659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian soles (1863\\u20131965)1.00",
4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Peso1.00",
4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine peso1.00",
4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine pesos1.00",
4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
4441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinum1.00",
444259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u20131995)1.00",
4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zloty1.00",
4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys1.00",
4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty (PLZ)1.00",
4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zloty1.00",
4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish zlotys (PLZ)1.00",
4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escudo1.00",
4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escudo1.00",
4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudo1.00",
4451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea escudos1.00",
4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudo1.00",
4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese escudos1.00",
4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GTQ1.00",
4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QAR1.00",
4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Rial1.00",
4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rial1.00",
4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari rials1.00",
4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RHD1.00",
4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Funds1.00",
4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN\\u00a51.00",
4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ROL1.00",
4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RON1.00",
4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RSD1.00",
4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUB1.00",
4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RUR1.00",
4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RWF1.00",
4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dollar1.00",
4477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollar1.00",
4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian dollars1.00",
4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Leu1.00",
4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian lei1.00",
4481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian leu1.00",
448259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u20131998)1.00",
4483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Ruble1.00",
448459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian ruble (1991\\u20131998)1.00",
4485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian ruble1.00",
448659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian rubles (1991\\u20131998)1.00",
4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian rubles1.00",
4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Franc1.00",
4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan franc1.00",
4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan francs1.00",
4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SAR1.00",
4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SBD1.00",
4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SCR1.00",
4494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDD1.00",
4496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDG1.00",
4498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SDP1.00",
4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SEK1.00",
4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SGD1.00",
4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SHP1.00",
4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SIT1.00",
4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SKK1.00",
4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SLL1.00",
4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SOS1.00",
4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRD1.00",
4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SRG1.00",
4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "STD1.00",
4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SUR1.00",
4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SVC1.00",
4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SYP1.00",
4519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZL1.00",
4520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena Pound1.00",
4521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena pound1.00",
4522f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena pounds1.00",
4523f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra1.00",
4524f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra1.00",
4525f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras1.00",
4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riyal1.00",
4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyal1.00",
4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi riyals1.00",
4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dinar1.00",
4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinar1.00",
4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian dinars1.00",
4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupee1.00",
4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupee1.00",
4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois rupees1.00",
4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leone1.00",
4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leone1.00",
4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean leones1.00",
4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silver1.00",
4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dollar1.00",
4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollar1.00",
4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore dollars1.00",
4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Koruna1.00",
4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak koruna1.00",
4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak korunas1.00",
4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tolar1.00",
4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolar1.00",
4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian tolars1.00",
4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dollar1.00",
4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollar1.00",
4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands dollars1.00",
4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shilling1.00",
4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shilling1.00",
4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali shillings1.00",
4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial)1.00",
4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand1.00",
4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand (financial)1.00",
4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rands (financial)1.00",
4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African rand1.00",
4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Won1.00",
4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean won1.00",
4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Rouble1.00",
4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet rouble1.00",
4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet roubles1.00",
4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account)1.00",
4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account)1.00",
4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta1.00",
4570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (A account)1.00",
4571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta (convertible account)1.00",
4572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish peseta1.00",
4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (A account)1.00",
4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas (convertible account)1.00",
4575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish pesetas1.00",
4576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Rights1.00",
457727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupee1.00",
457827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupee1.00",
457927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan rupees1.00",
4580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Pound1.00",
4581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pound1.00",
4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese pounds1.00",
4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dollar1.00",
4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollar1.00",
4585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese dollars1.00",
458627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilder1.00",
458727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilder1.00",
458827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese guilders1.00",
4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangeni1.00",
4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi lilangeni1.00",
4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi emalangeni1.00",
4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Krona1.00",
4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish krona1.00",
4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish kronor1.00",
4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Franc1.00",
4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss franc1.00",
4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss francs1.00",
4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Pound1.00",
4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pound1.00",
4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian pounds1.00",
4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "THB1.00",
4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJR1.00",
4604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJS1.00",
4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TMM1.00",
4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TND1.00",
4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TOP1.00",
4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TPE1.00",
4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRL1.00",
4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TRY1.00",
4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TTD1.00",
4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TWD1.00",
4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZS1.00",
4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dollar1.00",
4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollar1.00",
4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan dollars1.00",
4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Ruble1.00",
4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somoni1.00",
4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani ruble1.00",
4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani rubles1.00",
4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somoni1.00",
4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani somonis1.00",
4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shilling1.00",
4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shilling1.00",
4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian shillings1.00",
4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Code1.00",
4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Baht1.00",
4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai baht1.00",
4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escudo1.00",
4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudo1.00",
4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese escudos1.00",
4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u02bbanga1.00",
4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan pa\\u02bbanga1.00",
4642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago Dollar1.00",
4643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago dollar1.00",
4644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago dollars1.00",
4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dinar1.00",
4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinar1.00",
4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian dinars1.00",
4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lira1.00",
4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish lira1.00",
4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Manat1.00",
4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani manat1.00",
4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirham1.00",
4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAE dirhams1.00",
4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAH1.00",
4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UAK1.00",
4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGS1.00",
4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UGX1.00",
4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day)1.00",
4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day)1.00",
4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar1.00",
4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (next day)1.00",
4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar (same day)1.00",
4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollar1.00",
4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (next day)1.00",
4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars (same day)1.00",
4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US dollars1.00",
4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00",
4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USN1.00",
4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USS1.00",
4676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYI1.00",
4678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYP1.00",
4680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UYU1.00",
4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
4682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZS1.00",
468359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u20131987)1.00",
4684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shilling1.00",
468559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shilling (1966\\u20131987)1.00",
4686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shilling1.00",
468759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan shillings (1966\\u20131987)1.00",
4688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan shillings1.00",
4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvnia1.00",
4690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanets1.00",
4691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnia1.00",
4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian hryvnias1.00",
4693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovanets1.00",
4694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian karbovantsiv1.00",
469527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Unit1.00",
4696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirham1.00",
469727f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currency1.00",
469859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan Peso (1975\\u20131993)1.00",
4699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan Peso1.00",
470027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan Peso (Indexed Units)1.00",
470159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan peso (1975\\u20131993)1.00",
470227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan peso (indexed units)1.00",
4703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan peso1.00",
470459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguayan pesos (1975\\u20131993)1.00",
470527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguayan pesos (indexed units)1.00",
4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguayan pesos1.00",
47071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Uzbekistani Som1.00",
47081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Uzbekistani som1.00",
47091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Uzbekistani som1.00",
4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEB1.00",
4711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VEF1.00",
4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VND1.00",
4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VUV1.00",
4714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vatu1.00",
4715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatu1.00",
4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu vatus1.00",
4717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar1.00",
471859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00",
4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvar1.00",
4720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan bol\\u00edvars1.00",
472159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvar (1871\\u20132008)1.00",
472259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Venezuelan bol\\u00edvars (1871\\u20132008)1.00",
4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Dong1.00",
4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese dong1.00",
4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Euro1.00",
4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Franc1.00",
4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euro1.00",
4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR euros1.00",
4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR franc1.00",
4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR francs1.00",
4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WST1.00",
4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan Tala1.00",
4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoan tala1.00",
4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAF1.00",
4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAG1.00",
4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XAU1.00",
4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBA1.00",
4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBB1.00",
4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBC1.00",
4749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XBD1.00",
4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XCD1.00",
4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XDR1.00",
4754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XEU1.00",
4756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFO1.00",
4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XFU1.00",
4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XOF1.00",
4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPD1.00",
4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPF1.00",
4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XPT1.00",
4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XRE1.00",
4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XTS1.00",
4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XXX1.00",
4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YDD1.00",
4775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YER1.00",
4776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUD1.00",
4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUM1.00",
4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YUN1.00",
4782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dinar1.00",
4783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Rial1.00",
4784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinar1.00",
4785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni dinars1.00",
4786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rial1.00",
4787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni rials1.00",
478859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Convertible Dinar (1990\\u20131992)1.00",
478959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u20131990)1.00",
479059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian New Dinar (1994\\u20132002)1.00",
479159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinar (1990\\u20131992)1.00",
479259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian convertible dinars (1990\\u20131992)1.00",
479359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinar (1966\\u20131990)1.00",
479459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian hard dinars (1966\\u20131990)1.00",
479559d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinar (1994\\u20132002)1.00",
479659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian new dinars (1994\\u20132002)1.00",
4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAL1.00",
4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZAR1.00",
4800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZMK1.00",
4802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRN1.00",
4804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZRZ1.00",
4806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZWD1.00",
480759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u20131998)1.00",
480859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean Zaire (1971\\u20131993)1.00",
480959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaire (1993\\u20131998)1.00",
481059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean new zaires (1993\\u20131998)1.00",
481159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaire (1971\\u20131993)1.00",
481259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean zaires (1971\\u20131993)1.00",
4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwacha1.00",
4814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwacha1.00",
4815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian kwachas1.00",
481659d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u20132008)1.00",
481759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollar (1980\\u20132008)1.00",
481859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean dollars (1980\\u20132008)1.00",
4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euro1.00",
4820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "euros1.00",
482159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish lira (1922\\u20132005)1.00",
4822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "special drawing rights1.00",
482327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value unit1.00",
482427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian real value units1.00",
4825b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "unknown currency1.00",
4826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a31.00",
4827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u00a51.00",
4828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ab1.00",
4829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20aa1.00",
4830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "\\u20ac1.00",
4831786288bd87363f3f86c1211ef7e1fb94aa9a40f7Fredrik Roubert        "\\u20b91.00",
4832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        //
4833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following has extra text, should be parsed correctly too
4834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "$1.00 random",
4835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "USD1.00 random",
4836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
4837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
4838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
4839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghani random",
484059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Afghan Afghanis (1927\\u20131992) random",
4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Afghan Afghanis random",
4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian Lek random",
4843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Albanian lek random",
484450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        "1.00 Albanian lek\\u00eb random",
4845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian Dinar random",
4846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinar random",
4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Algerian dinars random",
4848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran Peseta random",
4849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran peseta random",
4850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Andorran pesetas random",
485159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Kwanza (1977\\u20131990) random",
485259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random",
4853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan Kwanza random",
485459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan New Kwanza (1990\\u20132000) random",
485559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanza (1977\\u20131991) random",
485659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanza (1995\\u20131999) random",
4857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanza random",
485859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan kwanzas (1977\\u20131991) random",
485959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan readjusted kwanzas (1995\\u20131999) random",
4860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Angolan kwanzas random",
486159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanza (1990\\u20132000) random",
486259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Angolan new kwanzas (1990\\u20132000) random",
4863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Austral random",
486459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine Peso (1983\\u20131985) random",
4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine Peso random",
4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine austral random",
4867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine australs random",
486859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine peso (1983\\u20131985) random",
4869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine peso random",
487059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Argentine pesos (1983\\u20131985) random",
4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Argentine pesos random",
4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian Dram random",
4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian dram random",
4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Armenian drams random",
4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban Florin random",
4876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Aruban florin random",
4877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian Dollar random",
4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollar random",
4879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Australian dollars random",
4880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian Schilling random",
4881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schilling random",
4882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Austrian schillings random",
488359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani Manat (1993\\u20132006) random",
4884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani Manat random",
488559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manat (1993\\u20132006) random",
4886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manat random",
488759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Azerbaijani manats (1993\\u20132006) random",
4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Azerbaijani manats random",
4889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian Dollar random",
4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollar random",
4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahamian dollars random",
4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini Dinar random",
4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinar random",
4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bahraini dinars random",
4895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi Taka random",
4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi taka random",
4897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bangladeshi takas random",
4898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian Dollar random",
4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollar random",
4900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Barbadian dollars random",
490159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian New Ruble (1994\\u20131999) random",
4902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian Ruble random",
490359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new ruble (1994\\u20131999) random",
490459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Belarusian new rubles (1994\\u20131999) random",
4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian ruble random",
4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belarusian rubles random",
4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (convertible) random",
4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc (financial) random",
4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian Franc random",
4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (convertible) random",
4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc (financial) random",
4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian franc random",
4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (convertible) random",
4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs (financial) random",
4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belgian francs random",
4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize Dollar random",
4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollar random",
4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Belize dollars random",
4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan Dollar random",
4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollar random",
4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bermudan dollars random",
4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese Ngultrum random",
4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrum random",
4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bhutanese ngultrums random",
4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Mvdol random",
4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Peso random",
4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdol random",
4928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian mvdols random",
4929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian peso random",
4930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian pesos random",
4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Boliviano random",
4933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bolivian Bolivianos random",
4934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina Convertible Mark random",
493559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random",
4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible mark random",
4937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bosnia-Herzegovina convertible marks random",
493859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random",
493959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random",
4940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan Pula random",
4941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pula random",
4942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Botswanan pulas random",
494359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzado (1989\\u20131990) random",
494459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzado (1986\\u20131989) random",
494559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1990\\u20131993) random",
494659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian New Cruzeiro (1967\\u20131986) random",
494759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian Cruzeiro (1993\\u20131994) random",
4948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian Real random",
494959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzado (1989\\u20131990) random",
495059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzados (1989\\u20131990) random",
495159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzado (1986\\u20131989) random",
495259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzados (1986\\u20131989) random",
495359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1990\\u20131993) random",
495459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiro (1967\\u20131986) random",
495559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiro (1993\\u20131994) random",
495659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1990\\u20131993) random",
495759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian new cruzeiros (1967\\u20131986) random",
495859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Brazilian cruzeiros (1993\\u20131994) random",
4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian real random",
4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brazilian reals random",
49611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 British Pound random",
49621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 British pound random",
49631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 British pounds random",
4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei Dollar random",
4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollar random",
4966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Brunei dollars random",
4967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Hard Lev random",
4968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Lev random",
4969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian Leva random",
4970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard lev random",
4971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian hard leva random",
4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Bulgarian lev random",
4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese Kyat random",
4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyat random",
4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burmese kyats random",
4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian Franc random",
4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian franc random",
4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Burundian francs random",
4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian Riel random",
4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riel random",
4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cambodian riels random",
4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian Dollar random",
4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollar random",
4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Canadian dollars random",
4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean Escudo random",
4986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudo random",
4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cape Verdean escudos random",
4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands Dollar random",
4989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollar random",
4990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cayman Islands dollars random",
4991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean Peso random",
499227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean Unit of Account (UF) random",
4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean peso random",
4994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chilean pesos random",
499527f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean unit of account (UF) random",
499627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chilean units of account (UF) random",
499727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Chinese Yuan random",
4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Chinese yuan random",
4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian Peso random",
5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian peso random",
5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Colombian pesos random",
5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian Franc random",
5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian franc random",
5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Comorian francs random",
5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese Franc Congolais random",
5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese franc Congolais random",
5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Congolese francs Congolais random",
5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican Col\\u00f3n random",
5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3n random",
5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Costa Rican col\\u00f3ns random",
5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Dinar random",
5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian Kuna random",
5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinar random",
5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian dinars random",
5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kuna random",
5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Croatian kunas random",
5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban Peso random",
5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban peso random",
5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cuban pesos random",
5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot Pound random",
5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pound random",
5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Cypriot pounds random",
5023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic Koruna random",
5024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic koruna random",
5025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czech Republic korunas random",
5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak Hard Koruna random",
5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard koruna random",
5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Czechoslovak hard korunas random",
5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish Krone random",
5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish krone random",
5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Danish kroner random",
5032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German Mark random",
5033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German mark random",
5034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 German marks random",
5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian Franc random",
5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian franc random",
5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Djiboutian francs random",
5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican Peso random",
5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican peso random",
5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dominican pesos random",
5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean Dollar random",
5042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollar random",
5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East Caribbean dollars random",
5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German Mark random",
5045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German mark random",
5046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 East German marks random",
5047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian Sucre random",
504827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian Unit of Constant Value random",
5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucre random",
5050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ecuadorian sucres random",
505127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian unit of constant value random",
505227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Ecuadorian units of constant value random",
5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian Pound random",
5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pound random",
5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Egyptian pounds random",
5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran Col\\u00f3n random",
5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran col\\u00f3n random",
5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Salvadoran colones random",
5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean Ekwele random",
5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Equatorial Guinean ekwele random",
5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean Nakfa random",
5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfa random",
5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Eritrean nakfas random",
5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian Kroon random",
5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroon random",
5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Estonian kroons random",
5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian Birr random",
5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birr random",
5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ethiopian birrs random",
5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Composite Unit random",
5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Currency Unit random",
5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Monetary Unit random",
5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBC) random",
5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European Unit of Account (XBD) random",
5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite unit random",
5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European composite units random",
5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency unit random",
5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European currency units random",
5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary unit random",
5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European monetary units random",
5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBC) random",
5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European unit of account (XBD) random",
5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBC) random",
5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 European units of account (XBD) random",
5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands Pound random",
5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pound random",
5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Falkland Islands pounds random",
5088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian Dollar random",
5089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollar random",
5090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Fijian dollars random",
5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish Markka random",
5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markka random",
5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Finnish markkas random",
5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Franc random",
5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French Gold Franc random",
5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-Franc random",
5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-franc random",
5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French UIC-francs random",
5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French franc random",
5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French francs random",
5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold franc random",
5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 French gold francs random",
5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian Dalasi random",
5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasi random",
5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gambian dalasis random",
5106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Kupon Larit random",
5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian Lari random",
5108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larit random",
5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian kupon larits random",
5110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian lari random",
5111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Georgian laris random",
511259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian Cedi (1979\\u20132007) random",
5113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian Cedi random",
511459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedi (1979\\u20132007) random",
5115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedi random",
511659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ghanaian cedis (1979\\u20132007) random",
5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ghanaian cedis random",
5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar Pound random",
5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pound random",
5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gibraltar pounds random",
5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Gold random",
5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek Drachma random",
5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachma random",
5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Greek drachmas random",
5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan Quetzal random",
5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzal random",
5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guatemalan quetzals random",
5129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Franc random",
5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean Syli random",
5131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean franc random",
5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean francs random",
5133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean syli random",
5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinean sylis random",
5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau Peso random",
5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau peso random",
5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guinea-Bissau pesos random",
5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese Dollar random",
5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollar random",
5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Guyanaese dollars random",
5141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian Gourde random",
5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourde random",
5143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Haitian gourdes random",
5144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran Lempira random",
5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempira random",
5146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Honduran lempiras random",
5147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong Dollar random",
5148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollar random",
5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hong Kong dollars random",
5150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian Forint random",
5151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forint random",
5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Hungarian forints random",
5153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic Kr\\u00f3na random",
5154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3na random",
5155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Icelandic kr\\u00f3nur random",
5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian Rupee random",
5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupee random",
5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indian rupees random",
5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian Rupiah random",
5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiah random",
5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Indonesian rupiahs random",
5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian Rial random",
5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rial random",
5164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iranian rials random",
5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi Dinar random",
5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinar random",
5167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Iraqi dinars random",
5168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish Pound random",
5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pound random",
5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Irish pounds random",
5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli Pound random",
5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqel random",
5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pound random",
5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli pounds random",
5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian Lira random",
5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian lira random",
5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Italian liras random",
5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican Dollar random",
5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollar random",
5180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jamaican dollars random",
5181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese Yen random",
5182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Japanese yen random",
5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian Dinar random",
5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinar random",
5185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Jordanian dinars random",
518627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani Tenge random",
518727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenge random",
518827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Kazakhstani tenges random",
5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan Shilling random",
5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shilling random",
5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kenyan shillings random",
5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti Dinar random",
5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinar random",
5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kuwaiti dinars random",
5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani Som random",
5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani som random",
5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Kyrgystani soms random",
5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian Kip random",
5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kip random",
5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Laotian kips random",
5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Lats random",
5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian Ruble random",
5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lats random",
5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian lati random",
5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian ruble random",
5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Latvian rubles random",
5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese Pound random",
5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pound random",
5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lebanese pounds random",
5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho Loti random",
5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho loti random",
5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lesotho lotis random",
5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian Dollar random",
5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollar random",
5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Liberian dollars random",
5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan Dinar random",
5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinar random",
5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Libyan dinars random",
5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Litas random",
5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian Talonas random",
5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litas random",
5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian litai random",
5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonas random",
5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Lithuanian talonases random",
5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Convertible Franc random",
5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg Financial Franc random",
5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian Franc random",
5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible franc random",
5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian convertible francs random",
5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial franc random",
5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourg financial francs random",
5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian franc random",
5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Luxembourgian francs random",
5234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese Pataca random",
5235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese pataca random",
5236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macanese patacas random",
5237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian Denar random",
5238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denar random",
5239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Macedonian denari random",
5240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariaries random",
5241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Ariary random",
5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy Franc random",
5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy franc random",
5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malagasy francs random",
5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwacha random",
5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malawian Kwachas random",
5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian Ringgit random",
5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgit random",
5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malaysian ringgits random",
5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian Rufiyaa random",
5253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaa random",
5254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maldivian rufiyaas random",
5255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian Franc random",
5256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian franc random",
5257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Malian francs random",
5258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Lira random",
5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese Pound random",
5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese lira random",
5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese liras random",
5262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pound random",
5263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Maltese pounds random",
5264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian Ouguiya random",
5265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiya random",
5266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritanian ouguiyas random",
5267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian Rupee random",
5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupee random",
5269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mauritian rupees random",
5270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican Peso random",
527159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican Silver Peso (1861\\u20131992) random",
527227f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican Investment Unit random",
5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican peso random",
5274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mexican pesos random",
527559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver peso (1861\\u20131992) random",
527659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mexican silver pesos (1861\\u20131992) random",
527727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment unit random",
527827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Mexican investment units random",
5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan Leu random",
5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan leu random",
5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moldovan lei random",
5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian Tugrik random",
5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugrik random",
5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mongolian tugriks random",
5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Dirham random",
5286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan Franc random",
5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirham random",
5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan dirhams random",
5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan franc random",
5290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Moroccan francs random",
5291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Escudo random",
5292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican Metical random",
5293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudo random",
5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican escudos random",
5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican metical random",
5296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Mozambican meticals random",
529759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar Kyat random",
529859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyat random",
529959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Myanmar kyats random",
5300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dollar random",
5301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollar random",
5302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dollars random",
5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupee random",
5304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupee random",
5305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupees random",
5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilder random",
5307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilder random",
5308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilders random",
5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilder random",
5310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilder random",
5311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilders random",
5312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqel random",
5313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli new sheqels random",
5314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dollar random",
5315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollar random",
5316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dollars random",
531727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan C\\u00f3rdoba random",
531859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random",
531927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
532027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Nicaraguan c\\u00f3rdoba random",
532159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random",
532259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random",
5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Naira random",
5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian naira random",
5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nairas random",
5326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Won random",
5327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean won random",
5329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Krone random",
5330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian krone random",
5331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kroner random",
533259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican Metical (1980\\u20132006) random",
533359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican metical (1980\\u20132006) random",
533459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Mozambican meticals (1980\\u20132006) random",
533559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Lei (1952\\u20132006) random",
533659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian Leu (1952\\u20132006) random",
533759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Romanian leu (1952\\u20132006) random",
533859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian Dinar (2002\\u20132006) random",
533959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinar (2002\\u20132006) random",
534059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Serbian dinars (2002\\u20132006) random",
534159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Dinar (1992\\u20132007) random",
534259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese Pound (1957\\u20131998) random",
534359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinar (1992\\u20132007) random",
534459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese dinars (1992\\u20132007) random",
534559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pound (1957\\u20131998) random",
534659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Sudanese pounds (1957\\u20131998) random",
534759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
534859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish Lira (1922\\u20132005) random",
5349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani Rial random",
5350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rial random",
5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Omani rials random",
5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani Rupee random",
5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupee random",
5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Pakistani rupees random",
5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Palladium random",
5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian Balboa random",
5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboa random",
5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Panamanian balboas 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 Papua New Guinean kina random",
5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan Guarani random",
5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guarani random",
5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Paraguayan guaranis random",
5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Inti random",
5367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian Nuevo Sol random",
536859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian Sol (1863\\u20131965) random",
5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian inti random",
5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian intis random",
5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevo sol random",
5372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Peruvian nuevos soles random",
537359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian sol (1863\\u20131965) random",
537459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Peruvian soles (1863\\u20131965) random",
5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine Peso random",
5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine peso random",
5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Philippine pesos random",
5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
5379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Platinum random",
538059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Polish Zloty (1950\\u20131995) random",
5381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish Zloty random",
5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys random",
5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty (PLZ) random",
5384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zloty random",
5385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Polish zlotys (PLZ) random",
5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Escudo random",
5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea Escudo random",
5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudo random",
5389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese Guinea escudos random",
5390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudo random",
5391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Portuguese escudos random",
5392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari Rial random",
5393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rial random",
5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Qatari rials random",
5395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 RINET Funds random",
5397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian Dollar random",
5398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollar random",
5399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rhodesian dollars random",
5400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian Leu random",
5401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian lei random",
5402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Romanian leu random",
540359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian Ruble (1991\\u20131998) random",
5404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian Ruble random",
540559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian ruble (1991\\u20131998) random",
5406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian ruble random",
540759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Russian rubles (1991\\u20131998) random",
5408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Russian rubles random",
5409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan Franc random",
5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan franc random",
5411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Rwandan francs random",
5412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena Pound random",
5413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena pound random",
5414f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 St. Helena pounds random",
5415f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra random",
5416f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra random",
5417f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras random",
5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi Riyal random",
5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyal random",
5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Saudi riyals random",
5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian Dinar random",
5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinar random",
5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Serbian dinars random",
5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois Rupee random",
5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupee random",
5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Seychellois rupees random",
5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean Leone random",
5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leone random",
5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sierra Leonean leones random",
5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore Dollar random",
5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollar random",
5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Singapore dollars random",
5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak Koruna random",
5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak koruna random",
5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovak korunas random",
5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian Tolar random",
5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolar random",
5438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Slovenian tolars random",
5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands Dollar random",
5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollar random",
5441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Solomon Islands dollars random",
5442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali Shilling random",
5443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shilling random",
5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Somali shillings random",
5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand (financial) random",
5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African Rand random",
5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand (financial) random",
5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rands (financial) random",
5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South African rand random",
5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean Won random",
5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 South Korean won random",
5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet Rouble random",
5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet rouble random",
5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Soviet roubles random",
5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (A account) random",
5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta (convertible account) random",
5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish Peseta random",
5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (A account) random",
5461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta (convertible account) random",
5462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish peseta random",
5463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (A account) random",
5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas (convertible account) random",
5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Spanish pesetas random",
5466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Special Drawing Rights random",
546727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan Rupee random",
546827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupee random",
546927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Sri Lankan rupees random",
5470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese Pound random",
5471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pound random",
5472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Sudanese pounds random",
5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese Dollar random",
5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollar random",
5475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Surinamese dollars random",
547627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese Guilder random",
547727f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilder random",
547827f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Surinamese guilders random",
5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi Lilangeni random",
5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi lilangeni random",
5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swazi emalangeni random",
5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish Krona random",
5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish krona random",
5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swedish kronor random",
5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss Franc random",
5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss franc random",
5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Swiss francs random",
5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian Pound random",
5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pound random",
5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Syrian pounds random",
5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan Dollar random",
5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollar random",
5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Taiwan dollars random",
5494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Ruble random",
5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani Somoni random",
5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani ruble random",
5497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani rubles random",
5498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somoni random",
5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tajikistani somonis random",
5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian Shilling random",
5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shilling random",
5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tanzanian shillings random",
5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Testing Currency Code random",
5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai Baht random",
5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Thai baht random",
5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese Escudo random",
5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudo random",
5510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Timorese escudos random",
5511f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago Dollar random",
5512f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago dollar random",
5513f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "1.00 Trinidad & Tobago dollars random",
5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian Dinar random",
5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinar random",
5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Tunisian dinars random",
5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish Lira random",
5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkish lira random",
5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani Manat random",
5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Turkmenistani manat random",
5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Next day) random",
5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar (Same day) random",
5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US Dollar random",
5526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (next day) random",
5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar (same day) random",
5528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollar random",
5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (next day) random",
5530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars (same day) random",
5531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dollars random",
553259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan Shilling (1966\\u20131987) random",
5533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan Shilling random",
553459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shilling (1966\\u20131987) random",
5535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shilling random",
553659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Ugandan shillings (1966\\u20131987) random",
5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ugandan shillings random",
5538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Hryvnia random",
5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian Karbovanets random",
5540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnia random",
5541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian hryvnias random",
5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovanets random",
5543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Ukrainian karbovantsiv random",
554427f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian Real Value Unit random",
5545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 United Arab Emirates Dirham random",
554627f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Unknown Currency random",
554759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan Peso (1975\\u20131993) random",
5548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan Peso random",
554927f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan Peso (Indexed Units) random",
555059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan peso (1975\\u20131993) random",
555127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan peso (indexed units) random",
5552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Uruguayan peso random",
555359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Uruguayan pesos (1975\\u20131993) random",
555427f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Uruguayan pesos (indexed units) random",
55551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 Uzbekistani Som random",
55561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 Uzbekistani som random",
55571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "1.00 Uzbekistani som random",
5558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu Vatu random",
5559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatu random",
5560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vanuatu vatus random",
5561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan Bol\\u00edvar random",
556259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random",
5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvar random",
5564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Venezuelan bol\\u00edvars random",
556559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random",
556659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random",
5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese Dong random",
5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Vietnamese dong random",
5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Euro random",
5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR Franc random",
5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euro random",
5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR euros random",
5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR franc random",
5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 WIR francs random",
5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan Tala random",
5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Samoan tala random",
5579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Dinar random",
5580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni Rial random",
5581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinar random",
5582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni dinars random",
5583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rial random",
5584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Yemeni rials random",
558559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random",
558659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random",
558759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian New Dinar (1994\\u20132002) random",
558859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinar (1990\\u20131992) random",
558959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian convertible dinars (1990\\u20131992) random",
559059d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinar (1966\\u20131990) random",
559159d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian hard dinars (1966\\u20131990) random",
559259d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinar (1994\\u20132002) random",
559359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Yugoslavian new dinars (1994\\u20132002) random",
559459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean New Zaire (1993\\u20131998) random",
559559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean Zaire (1971\\u20131993) random",
559659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaire (1993\\u20131998) random",
559759d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean new zaires (1993\\u20131998) random",
559859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaire (1971\\u20131993) random",
559959d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zairean zaires (1971\\u20131993) random",
5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian Kwacha random",
5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwacha random",
5602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Zambian kwachas random",
560359d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean Dollar (1980\\u20132008) random",
560459d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollar (1980\\u20132008) random",
560559d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Zimbabwean dollars (1980\\u20132008) random",
5606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euro random",
5607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 euros random",
560859d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.00 Turkish lira (1922\\u20132005) random",
5609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 special drawing rights random",
561027f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value unit random",
561127f654740f2a26ad62a5c155af9199af9e69b889claireho        "1.00 Colombian real value units random",
5612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        "1.00 unknown currency random",
5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char* WRONG_DATA[] = {
5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        // Following are missing one last char in the currency name
5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "usd1.00", // case sensitive
5618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan Cordob",
5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian Dolla",
5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Namibian dolla",
5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese Rupe",
5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nepalese rupe",
5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean Guilde",
5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Netherlands Antillean guilde",
5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch Guilde",
5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Dutch guilde",
5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Israeli New Sheqe",
5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand Dolla",
5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 New Zealand dolla",
5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nicaraguan cordob",
5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian Nair",
5632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Nigerian nair",
5633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean Wo",
5634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 North Korean wo",
5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian Kron",
5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 Norwegian kron",
5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00 US dolla",
5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "1.00",
5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "A1.00",
5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AD1.00",
5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AE1.00",
5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AF1.00",
5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AL1.00",
5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AM1.00",
5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AN1.00",
5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AO1.00",
5647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AR1.00",
5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AT1.00",
5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AU1.00",
5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AW1.00",
5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "AZ1.00",
5652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afghan Afghan1.00",
565359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Afghan Afghani (1927\\u201320021.00",
5654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Afl1.00",
5655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Albanian Le1.00",
5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Algerian Dina1.00",
5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Andorran Peset1.00",
5658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Angolan Kwanz1.00",
565959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Kwanza (1977\\u201319901.00",
566059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan Readjusted Kwanza (1995\\u201319991.00",
566159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Angolan New Kwanza (1990\\u201320001.00",
5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Austra1.00",
5663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Argentine Pes1.00",
566459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Argentine Peso (1983\\u201319851.00",
5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Armenian Dra1.00",
5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Aruban Flori1.00",
5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Australian Dolla1.00",
5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Austrian Schillin1.00",
5669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Azerbaijani Mana1.00",
567059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Azerbaijani Manat (1993\\u201320061.00",
5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "B1.00",
5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BA1.00",
5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BB1.00",
5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BE1.00",
5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BG1.00",
5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BH1.00",
5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BI1.00",
5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BM1.00",
5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BN1.00",
5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BO1.00",
5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BR1.00",
5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BS1.00",
5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BT1.00",
5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BU1.00",
5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BW1.00",
5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BY1.00",
5687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "BZ1.00",
5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahamian Dolla1.00",
5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bahraini Dina1.00",
5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bangladeshi Tak1.00",
5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Barbadian Dolla1.00",
5692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bds1.00",
569359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Belarusian New Ruble (1994\\u201319991.00",
5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belarusian Rubl1.00",
5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Fran1.00",
5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (convertible1.00",
5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belgian Franc (financial1.00",
5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Belize Dolla1.00",
5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bermudan Dolla1.00",
5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bhutanese Ngultru1.00",
5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Mvdo1.00",
5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Pes1.00",
5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bolivian Bolivian1.00",
5704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Convertible Mar1.00",
5705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bosnia-Herzegovina Dina1.00",
5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Botswanan Pul1.00",
5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzad1.00",
5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzado Nov1.00",
5709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Cruzeir1.00",
571059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian Cruzeiro (1990\\u201319931.00",
571159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Brazilian New Cruzeiro (1967\\u201319861.00",
5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brazilian Rea1.00",
5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "British Pound Sterlin1.00",
5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Brunei Dolla1.00",
5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Hard Le1.00",
5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Bulgarian Le1.00",
5717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burmese Kya1.00",
5718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Burundian Fran1.00",
5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "C1.00",
5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CA1.00",
5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CD1.00",
5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP Fran1.00",
5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CFP1.00",
5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CH1.00",
5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CL1.00",
5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CN1.00",
5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CO1.00",
5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CS1.00",
5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CU1.00",
5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CV1.00",
5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CY1.00",
5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "CZ1.00",
5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cambodian Rie1.00",
5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Canadian Dolla1.00",
5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cape Verdean Escud1.00",
5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cayman Islands Dolla1.00",
5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Chilean Pes1.00",
573827f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chilean Unit of Accoun1.00",
573927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Chinese Yua1.00",
5740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Colombian Pes1.00",
5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Comoro Fran1.00",
5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Congolese Fran1.00",
5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Costa Rican Col\\u00f31.00",
5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Dina1.00",
5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Croatian Kun1.00",
5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cuban Pes1.00",
5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Cypriot Poun1.00",
5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czech Republic Korun1.00",
5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Czechoslovak Hard Korun1.00",
5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "D1.00",
5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DD1.00",
5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DE1.00",
5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DJ1.00",
5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DK1.00",
5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DO1.00",
5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "DZ1.00",
5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Danish Kron1.00",
5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "German Mar1.00",
5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Djiboutian Fran1.00",
5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dk1.00",
5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dominican Pes1.00",
5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EC1.00",
5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EE1.00",
5764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EG1.00",
5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EQ1.00",
5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ER1.00",
5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ES1.00",
5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ET1.00",
5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "EU1.00",
5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East Caribbean Dolla1.00",
5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "East German Ostmar1.00",
5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ecuadorian Sucr1.00",
577327f654740f2a26ad62a5c155af9199af9e69b889claireho        "Ecuadorian Unit of Constant Valu1.00",
5774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Egyptian Poun1.00",
5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ekwel1.00",
5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Salvadoran Col\\u00f31.00",
5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Equatorial Guinean Ekwel1.00",
5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eritrean Nakf1.00",
5779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Es1.00",
5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Estonian Kroo1.00",
5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ethiopian Bir1.00",
5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Eur1.00",
5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Composite Uni1.00",
5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Currency Uni1.00",
5785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Monetary Uni1.00",
5786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBC1.00",
5787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "European Unit of Account (XBD1.00",
5788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "F1.00",
5789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FB1.00",
5790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FI1.00",
5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FJ1.00",
5792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FK1.00",
5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "FR1.00",
5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Falkland Islands Poun1.00",
5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fd1.00",
5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fijian Dolla1.00",
5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Finnish Markk1.00",
5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Fr1.00",
5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Fran1.00",
5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French Gold Fran1.00",
5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "French UIC-Fran1.00",
5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "G1.00",
5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GB1.00",
5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GE1.00",
5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GH1.00",
5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GI1.00",
5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GM1.00",
5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GN1.00",
5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GQ1.00",
5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GR1.00",
5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GT1.00",
5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GW1.00",
5813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "GY1.00",
5814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gambian Dalas1.00",
5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Kupon Lari1.00",
5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Georgian Lar1.00",
5817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ghanaian Ced1.00",
581859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ghanaian Cedi (1979\\u201320071.00",
5819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gibraltar Poun1.00",
5820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Gol1.00",
5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Greek Drachm1.00",
5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guatemalan Quetza1.00",
5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Fran1.00",
5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinean Syl1.00",
5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guinea-Bissau Pes1.00",
5826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Guyanaese Dolla1.00",
5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HK1.00",
5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HN1.00",
5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HR1.00",
5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HT1.00",
5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "HU1.00",
5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Haitian Gourd1.00",
5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Honduran Lempir1.00",
5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hong Kong Dolla1.00",
5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Hungarian Forin1.00",
5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "I1.00",
5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IE1.00",
5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IL1.00",
5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IN1.00",
5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IQ1.00",
5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IR1.00",
5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IS1.00",
5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "IT1.00",
5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Icelandic Kron1.00",
5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indian Rupe1.00",
5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Indonesian Rupia1.00",
5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iranian Ria1.00",
5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Iraqi Dina1.00",
5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Irish Poun1.00",
5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli Poun1.00",
5851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Italian Lir1.00",
5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "J1.00",
5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JM1.00",
5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JO1.00",
5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "JP1.00",
5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jamaican Dolla1.00",
5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Japanese Ye1.00",
5858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Jordanian Dina1.00",
5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K S1.00",
5860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "K1.00",
5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KE1.00",
5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KG1.00",
5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KH1.00",
5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KP1.00",
5865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KR1.00",
5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KW1.00",
5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KY1.00",
5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "KZ1.00",
586927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Kazakhstani Teng1.00",
5870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kenyan Shillin1.00",
5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kuwaiti Dina1.00",
5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Kyrgystani So1.00",
5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LA1.00",
5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LB1.00",
5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LK1.00",
5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LR1.00",
5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LT1.00",
5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LU1.00",
5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LV1.00",
5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "LY1.00",
5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Laotian Ki1.00",
5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Lat1.00",
5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Latvian Rubl1.00",
5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lebanese Poun1.00",
5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lesotho Lot1.00",
5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Liberian Dolla1.00",
5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Libyan Dina1.00",
5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Lit1.00",
5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Lithuanian Talona1.00",
5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Convertible Fran1.00",
5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourg Financial Fran1.00",
5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Luxembourgian Fran1.00",
5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MA1.00",
5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MD1.00",
5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MDe1.00",
5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MEX1.00",
5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MG1.00",
5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ML1.00",
5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MM1.00",
5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MN1.00",
5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MO1.00",
5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MR1.00",
5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MT1.00",
5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MU1.00",
5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MV1.00",
5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MW1.00",
5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MX1.00",
5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MY1.00",
5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "MZ1.00",
5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macanese Patac1.00",
5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Macedonian Dena1.00",
5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Ariar1.00",
5913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malagasy Fran1.00",
5914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malawian Kwach1.00",
5915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malaysian Ringgi1.00",
5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maldivian Rufiya1.00",
5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malian Fran1.00",
5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Malot1.00",
5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Lir1.00",
5920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Maltese Poun1.00",
5921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritanian Ouguiy1.00",
5922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mauritian Rupe1.00",
5923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mexican Pes1.00",
592459d709d503bab6e2b61931737e662dd293b40578ccornelius        "Mexican Silver Peso (1861\\u201319921.00",
592527f654740f2a26ad62a5c155af9199af9e69b889claireho        "Mexican Investment Uni1.00",
5926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moldovan Le1.00",
5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mongolian Tugri1.00",
5928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Dirha1.00",
5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Moroccan Fran1.00",
5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Escud1.00",
5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Mozambican Metica1.00",
593259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Myanmar Kya1.00",
5933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "N1.00",
5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NA1.00",
5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NAf1.00",
5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NG1.00",
5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NI1.00",
5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NK1.00",
5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NL1.00",
5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NO1.00",
5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NP1.00",
5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "NT1.00",
5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Namibian Dolla1.00",
5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nepalese Rupe1.00",
5945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Netherlands Antillean Guilde1.00",
5946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Dutch Guilde1.00",
5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Israeli New Sheqe1.00",
5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Zealand Dolla1.00",
594959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00",
595027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Nicaraguan C\\u00f3rdob1.00",
5951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nigerian Nair1.00",
5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "North Korean Wo1.00",
5953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Norwegian Kron1.00",
5954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Nr1.00",
5955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "OM1.00",
5956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Old Mozambican Metica1.00",
595759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Romanian Leu (1952\\u201320061.00",
595859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Serbian Dinar (2002\\u201320061.00",
595959d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Dinar (1992\\u201320071.00",
596059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Sudanese Pound (1957\\u201319981.00",
596159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Turkish Lira (1922\\u201320051.00",
5962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Omani Ria1.00",
5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PA1.00",
5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PE1.00",
5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PG1.00",
5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PH1.00",
5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PK1.00",
5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PL1.00",
5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PT1.00",
5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "PY1.00",
5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pakistani Rupe1.00",
5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Palladiu1.00",
5973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Panamanian Balbo1.00",
5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Papua New Guinean Kin1.00",
5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Paraguayan Guaran1.00",
5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Int1.00",
597759d709d503bab6e2b61931737e662dd293b40578ccornelius        "Peruvian Sol (1863\\u201319651.00",
5978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Peruvian Sol Nuev1.00",
5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Philippine Pes1.00",
5980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Platinu1.00",
5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Polish Zlot1.00",
598259d709d503bab6e2b61931737e662dd293b40578ccornelius        "Polish Zloty (1950\\u201319951.00",
5983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Escud1.00",
5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Portuguese Guinea Escud1.00",
5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Pr1.00",
5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "QA1.00",
5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Qatari Ria1.00",
5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RD1.00",
5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RH1.00",
5990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RINET Fund1.00",
5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RS1.00",
5992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RU1.00",
5993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "RW1.00",
5994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rb1.00",
5995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rhodesian Dolla1.00",
5996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Romanian Le1.00",
5997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Russian Rubl1.00",
599859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Russian Ruble (1991\\u201319981.00",
5999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Rwandan Fran1.00",
6000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "S1.00",
6001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SA1.00",
6002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SB1.00",
6003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SC1.00",
6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SD1.00",
6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SE1.00",
6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SG1.00",
6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SH1.00",
6008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SI1.00",
6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SK1.00",
6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL R1.00",
6011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SL1.00",
6012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SO1.00",
6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ST1.00",
6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SU1.00",
6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SV1.00",
6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SY1.00",
6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "SZ1.00",
6018f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "St. Helena Poun1.00",
6019f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobr1.00",
6020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Saudi Riya1.00",
6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Serbian Dina1.00",
6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Seychellois Rupe1.00",
6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sh1.00",
6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sierra Leonean Leon1.00",
6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Silve1.00",
6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Singapore Dolla1.00",
6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovak Korun1.00",
6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Slovenian Tola1.00",
6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Solomon Islands Dolla1.00",
6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Somali Shillin1.00",
6031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Ran1.00",
6032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South African Rand (financial1.00",
6033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "South Korean Wo1.00",
6034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Soviet Roubl1.00",
6035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peset1.00",
6036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (A account1.00",
6037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Spanish Peseta (convertible account1.00",
6038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Special Drawing Right1.00",
603927f654740f2a26ad62a5c155af9199af9e69b889claireho        "Sri Lankan Rupe1.00",
6040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Sudanese Poun1.00",
6041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Surinamese Dolla1.00",
604227f654740f2a26ad62a5c155af9199af9e69b889claireho        "Surinamese Guilde1.00",
6043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swazi Lilangen1.00",
6044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swedish Kron1.00",
6045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Swiss Fran1.00",
6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Syrian Poun1.00",
6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "T S1.00",
6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TH1.00",
6049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TJ1.00",
6050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TM1.00",
6051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TN1.00",
6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TO1.00",
6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TP1.00",
6054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TR1.00",
6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TT1.00",
6056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TW1.00",
6057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "TZ1.00",
6058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "New Taiwan Dolla1.00",
6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Rubl1.00",
6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tajikistani Somon1.00",
6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tanzanian Shillin1.00",
6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Testing Currency Cod1.00",
6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Thai Bah1.00",
6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Timorese Escud1.00",
6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tongan Pa\\u20bbang1.00",
6066f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        "Trinidad & Tobago Dolla1.00",
6067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Tunisian Dina1.00",
6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkish Lir1.00",
6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Turkmenistani Mana1.00",
6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U S1.00",
6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "U1.00",
6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UA1.00",
6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UG1.00",
6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dolla1.00",
6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Next day1.00",
6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US Dollar (Same day1.00",
6077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "US1.00",
6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UY1.00",
6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "UZ1.00",
6080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ugandan Shillin1.00",
608159d709d503bab6e2b61931737e662dd293b40578ccornelius        "Ugandan Shilling (1966\\u201319871.00",
6082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Hryvni1.00",
6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ukrainian Karbovanet1.00",
608427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Colombian Real Value Uni1.00",
6085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "United Arab Emirates Dirha1.00",
608627f654740f2a26ad62a5c155af9199af9e69b889claireho        "Unknown Currenc1.00",
6087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Ur1.00",
608859d709d503bab6e2b61931737e662dd293b40578ccornelius        "Uruguay Peso (1975\\u201319931.00",
6089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Uruguay Peso Uruguay1.00",
609027f654740f2a26ad62a5c155af9199af9e69b889claireho        "Uruguay Peso (Indexed Units1.00",
60911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Uzbekistani So1.00",
6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "V1.00",
6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VE1.00",
6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VN1.00",
6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "VU1.00",
6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vanuatu Vat1.00",
6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edva1.00",
6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Venezuelan Bol\\u00edvar Fuert1.00",
6099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Vietnamese Don1.00",
61001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "West African CFA Fran1.00",
61011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        "Central African CFA Fran1.00",
6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Eur1.00",
6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WIR Fran1.00",
6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "WS1.00",
6105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Samoa Tal1.00",
6106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XA1.00",
6107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XB1.00",
6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XC1.00",
6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XD1.00",
6110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XE1.00",
6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XF1.00",
6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XO1.00",
6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XP1.00",
6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XR1.00",
6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XT1.00",
6116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "XX1.00",
6117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YD1.00",
6118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YE1.00",
6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "YU1.00",
6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Dina1.00",
6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yemeni Ria1.00",
6122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Yugoslavian Convertible Dina1.00",
612359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Yugoslavian Hard Dinar (1966\\u201319901.00",
612427f654740f2a26ad62a5c155af9199af9e69b889claireho        "Yugoslavian New Dina1.00",
6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Z1.00",
6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZA1.00",
6127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZM1.00",
6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZR1.00",
6129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "ZW1.00",
613059d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zairean New Zaire (1993\\u201319981.00",
6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zairean Zair1.00",
6132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "Zambian Kwach1.00",
613359d709d503bab6e2b61931737e662dd293b40578ccornelius        "Zimbabwean Dollar (1980\\u201320081.00",
6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "dra1.00",
6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "lar1.00",
6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "le1.00",
6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "man1.00",
6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        "so1.00",
6139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    };
6140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    Locale locale("en_US");
6142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) {
6143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(DATA[i]);
6144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              if ( doubleVal != 1.0 ) {
6152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius                  errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal);
6153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              }
6154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          } else {
6155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Failed to parse as currency: " + formatted);
61566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
6165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) {
6166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UnicodeString formatted = ctou(WRONG_DATA[i]);
6167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      UErrorCode status = U_ZERO_ERROR;
6168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
61696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      if (numFmt != NULL && U_SUCCESS(status)) {
6170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho          ParsePosition parsePos;
6171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos));
6172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius          if (parsePos.getIndex() > 0) {
6173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              double doubleVal = currAmt->getNumber().getDouble(status);
6174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius              errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal);
61756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          }
61766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru      } else {
61776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          dataerrln("Unable to create NumberFormat. - %s", u_errorName(status));
61786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          delete numFmt;
61796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru          break;
6180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      }
6181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru      delete numFmt;
6182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
6183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
6184c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
618550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t);
618650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
618750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s;
618850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::string ss;
618950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//  std::cout << s.toUTF8String(ss)
619050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
619150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
619250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool found[10];
619350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition fp;
619450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
619550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (tupleCount > 10) {
619650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue("internal error, tupleCount too large", FALSE);
619750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  } else {
619850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
619950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      found[i] = FALSE;
620050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
620150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
620250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
620350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
620450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  while (iter.next(fp)) {
620550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UBool ok = FALSE;
620650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t id = fp.getField();
620750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t start = fp.getBeginIndex();
620850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t limit = fp.getEndIndex();
620950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
621050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // is there a logln using printf?
621150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    char buf[128];
621250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit);
621350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    logln(buf);
621450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
621550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int i = 0; i < tupleCount; ++i) {
621650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (found[i]) {
621750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        continue;
621850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
621950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      if (values[i*3] == id &&
622050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+1] == start &&
622150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          values[i*3+2] == limit) {
622250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        found[i] = ok = TRUE;
622350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        break;
622450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      }
622550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
622650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
622750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok);
622850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
622950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
623050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // check that all were found
623150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UBool ok = TRUE;
623250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  for (int i = 0; i < tupleCount; ++i) {
623350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (!found[i]) {
623450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      ok = FALSE;
623550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]);
623650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
623750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
623850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue("no expected values were missing", ok);
623950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
624050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
624250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                       const UnicodeString& str)  {
624350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  logln(str);
624450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField());
624550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex());
624650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex());
624750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
624850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
624950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() {
625050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // bug 7372
625150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
625250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter1;
625350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator iter2;
625450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition pos;
625550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status);
625750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if (failure(status, "NumberFormat::createInstance", TRUE)) return;
625850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
625950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double num = 1234.56;
626050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str1;
626150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UnicodeString str2;
626250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"self==", iter1 == iter1);
626450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2);
626550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
626650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str1, &iter1, status);
626750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2);
626850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, &iter2, status);
626950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2);
627050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter1.next(pos);
627150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2);
627250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  iter2.next(pos);
627350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2);
627450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
627550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // should format ok with no iterator
627650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  str2.remove();
627750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  decFmt->format(num, str2, NULL, status);
627850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  assertEquals("null fpiter", str1, str2);
627950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
628050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
628150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
628250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
628350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() {
628450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  Locale locale("en_US");
628550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status = U_ZERO_ERROR;
6286b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status);
628750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (failure(status, "NumberFormat::createInstance", TRUE)) return;
628850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  double val = 12345.67;
628950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
629050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
629150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_CURRENCY_FIELD, 0, 1,
6293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_GROUPING_SEPARATOR_FIELD, 3, 4,
6294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 7,
6295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8,
6296103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 8, 10,
629750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
629850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
629950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
630050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
630150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
630350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
630450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
630550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
630750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
630850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result);
631050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
631150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
631350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
631450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result);
631650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
631750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
631850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho  decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status);
632050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  val = -0.0000123;
632150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
632250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t expected[] = {
6323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_SIGN_FIELD, 0, 1,
6324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_INTEGER_FIELD, 1, 2,
6325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3,
6326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_FRACTION_FIELD, 3, 5,
6327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SYMBOL_FIELD, 5, 6,
6328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_SIGN_FIELD, 6, 7,
6329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      UNUM_EXPONENT_FIELD, 7, 8
633050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    };
633150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
633250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
633350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    FieldPositionIterator posIter;
633450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
633550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, &posIter, status);
633650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    expectPositions(posIter, expected, tupleCount, result);
633750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
633850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_INTEGER_FIELD);
634050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
634150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6342103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result);
634350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
634450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  {
6345103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    FieldPosition fp(UNUM_FRACTION_FIELD);
634650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
634750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    decFmt->format(val, result, fp);
6348103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result);
634950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
635050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  delete decFmt;
635150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
635250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  fflush(stderr);
635350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
635450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
635550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) {
635650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  switch (attrId) {
6357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_INTEGER_FIELD: return "integer";
6358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_FRACTION_FIELD: return "fraction";
6359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator";
6360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol";
6361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign";
6362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_EXPONENT_FIELD: return "exponent";
6363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator";
6364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_CURRENCY_FIELD: return "currency";
6365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERCENT_FIELD: return "percent";
6366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_PERMILL_FIELD: return "permille";
6367103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    case UNUM_SIGN_FIELD: return "sign";
636850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    default: return "";
636950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
637050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
637150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
637250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
637350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//   Test formatting & parsing of big decimals.
637450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      API test, not a comprehensive test.
637550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//      See DecimalFormatTest/DataDrivenTests
637650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho//
637750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \
637850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                                __FILE__, __LINE__, u_errorName(status));}
637950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \
638050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);}
638150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
638250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) {
638350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    // This function lets ASSERT_EQUALS("literal", UnicodeString) work.
638450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString us1(s1);
638550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return us1 != s2;
638650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
638750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
638850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() {
638950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
639050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode  status = U_ZERO_ERROR;
639150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f("12.345678999987654321E666", status);
639250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
639350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        StringPiece s = f.getDecimalNumber(status);
639450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
639550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1.2345678999987654321E+667", s);
639650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        //printf("%s\n", s.data());
639750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
639850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
639950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
640050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
640150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f1("this is not a number", status);
640250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status);
640350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
640450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
640550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
640650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
640750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        Formattable f;
640850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("123.45", status);
640950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kDouble, f.getType());
641150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble());
641250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(123.45, f.getDouble(status));
641350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("123.45", f.getDecimalNumber(status));
641550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
641650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
641750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("4.5678E7", status);
641850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        int32_t n;
641950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        n = f.getLong();
642050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(45678000, n);
642150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
642250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
642350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("-123", status);
642450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kLong, f.getType());
642650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong());
642750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(-123, f.getLong(status));
642850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
642950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("-123", f.getDecimalNumber(status));
643050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
643250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        status = U_ZERO_ERROR;
643350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        f.setDecimalNumber("1234567890123", status);  // Number too big for 32 bits
643450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS( Formattable::kInt64, f.getType());
643650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64());
643750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS(1234567890123LL, f.getInt64(status));
643850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
643950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status));
644050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ASSERT_SUCCESS(status);
644150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
644250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
644350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
644450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
644627f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
644727f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
644827f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
644927f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
645027f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("244444444444444444444444444444444444446.4");
645127f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(num, formattedResult, NULL, status);
645227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
645327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult);
645427f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::string ss; std::cout << formattedResult.toUTF8String(ss);
645527f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
645627f654740f2a26ad62a5c155af9199af9e69b889claireho        }
645750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
645850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
645950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
646050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check formatting a DigitList.  DigitList is internal, but this is
646150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // a critical interface that must work.
646250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6463b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
646427f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
646527f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
646627f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
646727f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString formattedResult;
646827f654740f2a26ad62a5c155af9199af9e69b889claireho            DigitList dl;
646927f654740f2a26ad62a5c155af9199af9e69b889claireho            StringPiece num("123.4566666666666666666666666666666666621E+40");
647027f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
647127f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647227f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, NULL, status);
647327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
647427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult);
647527f654740f2a26ad62a5c155af9199af9e69b889claireho
647627f654740f2a26ad62a5c155af9199af9e69b889claireho            status = U_ZERO_ERROR;
647727f654740f2a26ad62a5c155af9199af9e69b889claireho            num.set("666.666");
647827f654740f2a26ad62a5c155af9199af9e69b889claireho            dl.set(num, status);
647927f654740f2a26ad62a5c155af9199af9e69b889claireho            FieldPosition pos(NumberFormat::FRACTION_FIELD);
648027f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
648127f654740f2a26ad62a5c155af9199af9e69b889claireho            formattedResult.remove();
648227f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->format(dl, formattedResult, pos, status);
648327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
648427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS("666.666", formattedResult);
648527f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(4, pos.getBeginIndex());
648627f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(7, pos.getEndIndex());
648727f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
648827f654740f2a26ad62a5c155af9199af9e69b889claireho        }
648950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
649050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
649150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
649250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check a parse with a formatter with a multiplier.
649350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6494b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status);
649527f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
649627f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
649727f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
649827f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.84%";
649927f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
650027f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
650127f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
650227f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data()));
650327f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
650427f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
650527f654740f2a26ad62a5c155af9199af9e69b889claireho        }
650650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
650750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
650854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC)
650954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    /*
651054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod().
651154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     * See #9463
651254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius     */
651350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    {
651450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        // Check that a parse returns a decimal number with full accuracy
651550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UErrorCode status = U_ZERO_ERROR;
6516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status);
651727f654740f2a26ad62a5c155af9199af9e69b889claireho        if (U_FAILURE(status) || fmtr == NULL) {
651827f654740f2a26ad62a5c155af9199af9e69b889claireho            dataerrln("Unable to create NumberFormat");
651927f654740f2a26ad62a5c155af9199af9e69b889claireho        } else {
652027f654740f2a26ad62a5c155af9199af9e69b889claireho            UnicodeString input = "1.002200044400088880000070000";
652127f654740f2a26ad62a5c155af9199af9e69b889claireho            Formattable result;
652227f654740f2a26ad62a5c155af9199af9e69b889claireho            fmtr->parse(input, result, status);
652327f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_SUCCESS(status);
652427f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data()));
652527f654740f2a26ad62a5c155af9199af9e69b889claireho            ASSERT_EQUALS(1.00220004440008888,   result.getDouble());
652627f654740f2a26ad62a5c155af9199af9e69b889claireho            //std::cout << result.getDecimalNumber(status).data();
652727f654740f2a26ad62a5c155af9199af9e69b889claireho            delete fmtr;
652827f654740f2a26ad62a5c155af9199af9e69b889claireho        }
652950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
653054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif
653150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
653250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
653350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
653427f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() {
653527f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
653627f654740f2a26ad62a5c155af9199af9e69b889claireho    UnicodeString text1, text2;
653727f654740f2a26ad62a5c155af9199af9e69b889claireho    double value = 99.12345;
653827f654740f2a26ad62a5c155af9199af9e69b889claireho
653927f654740f2a26ad62a5c155af9199af9e69b889claireho    // Create currenct instance
654027f654740f2a26ad62a5c155af9199af9e69b889claireho    NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status);
654127f654740f2a26ad62a5c155af9199af9e69b889claireho    if (U_FAILURE(status) || fmt == NULL) {
654227f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln("Unable to create NumberFormat");
654327f654740f2a26ad62a5c155af9199af9e69b889claireho    } else {
654427f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text1);
654527f654740f2a26ad62a5c155af9199af9e69b889claireho
654627f654740f2a26ad62a5c155af9199af9e69b889claireho        // Reset the same currency and format the test value again
654727f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->setCurrency(fmt->getCurrency(), status);
654827f654740f2a26ad62a5c155af9199af9e69b889claireho        ASSERT_SUCCESS(status);
654927f654740f2a26ad62a5c155af9199af9e69b889claireho        fmt->format(value, text2);
655027f654740f2a26ad62a5c155af9199af9e69b889claireho
655127f654740f2a26ad62a5c155af9199af9e69b889claireho        if (text1 != text2) {
655227f654740f2a26ad62a5c155af9199af9e69b889claireho            errln((UnicodeString)"NumberFormat::format() should return the same result - text1="
655327f654740f2a26ad62a5c155af9199af9e69b889claireho                + text1 + " text2=" + text2);
655427f654740f2a26ad62a5c155af9199af9e69b889claireho        }
655527f654740f2a26ad62a5c155af9199af9e69b889claireho        delete fmt;
655627f654740f2a26ad62a5c155af9199af9e69b889claireho    }
655727f654740f2a26ad62a5c155af9199af9e69b889claireho}
655827f654740f2a26ad62a5c155af9199af9e69b889claireho
655927f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() {
656027f654740f2a26ad62a5c155af9199af9e69b889claireho
656127f654740f2a26ad62a5c155af9199af9e69b889claireho    UErrorCode status = U_ZERO_ERROR;
656227f654740f2a26ad62a5c155af9199af9e69b889claireho    Formattable result;
656327f654740f2a26ad62a5c155af9199af9e69b889claireho    ParsePosition parsePos(0);
656427f654740f2a26ad62a5c155af9199af9e69b889claireho
656527f654740f2a26ad62a5c155af9199af9e69b889claireho    // set the exponent symbol
656627f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
656727f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status);
656827f654740f2a26ad62a5c155af9199af9e69b889claireho    if(U_FAILURE(status)) {
656927f654740f2a26ad62a5c155af9199af9e69b889claireho        dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)");
657027f654740f2a26ad62a5c155af9199af9e69b889claireho        return;
657127f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6572b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
657327f654740f2a26ad62a5c155af9199af9e69b889claireho    // create format instance
657427f654740f2a26ad62a5c155af9199af9e69b889claireho    status = U_ZERO_ERROR;
657527f654740f2a26ad62a5c155af9199af9e69b889claireho    DecimalFormat fmt("#####", symbols, status);
6576b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(U_FAILURE(status)) {
657727f654740f2a26ad62a5c155af9199af9e69b889claireho        errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)");
657827f654740f2a26ad62a5c155af9199af9e69b889claireho    }
6579b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
658027f654740f2a26ad62a5c155af9199af9e69b889claireho    // parse the text
6581b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    fmt.parse("5.06e-27", result, parsePos);
658227f654740f2a26ad62a5c155af9199af9e69b889claireho    if(result.getType() != Formattable::kDouble &&
6583b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       result.getDouble() != 5.06E-27 &&
6584b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho       parsePos.getIndex() != 8
658527f654740f2a26ad62a5c155af9199af9e69b889claireho       )
658627f654740f2a26ad62a5c155af9199af9e69b889claireho    {
6587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("ERROR: parse failed - expected 5.06E-27, 8  - returned %d, %i",
6588b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho              result.getDouble(), parsePos.getIndex());
658927f654740f2a26ad62a5c155af9199af9e69b889claireho    }
659027f654740f2a26ad62a5c155af9199af9e69b889claireho}
659127f654740f2a26ad62a5c155af9199af9e69b889claireho
6592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() {
6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6594b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* Test that number formats are properly inherited from es_419 */
6595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* These could be subject to change if the CLDR data changes */
6596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    static const char* parentLocaleTests[][2]= {
6597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /* locale ID */  /* expected */
6598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CO", "1.250,75" },
6599b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_CR", "1.250,75" },
6600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_ES", "1.250,75" },
6601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {"es_GQ", "1.250,75" },
6602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_MX", "1,250.75" },
6603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_US", "1,250.75" },
6604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    {"es_VE", "1.250,75" },
6605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    };
6606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UnicodeString s;
6608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    for(int i=0; i < (int)(sizeof(parentLocaleTests)/sizeof(parentLocaleTests[i])); i++){
6610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UErrorCode status = U_ZERO_ERROR;
6611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        const char *localeID = parentLocaleTests[i][0];
6612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        UnicodeString expected(parentLocaleTests[i][1], -1, US_INV);
6613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        expected = expected.unescape();
6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        char loc[256]={0};
6615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        uloc_canonicalize(localeID, loc, 256, &status);
6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status);
6617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(U_FAILURE(status)){
6618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status));
6619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            continue;
6620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        s.remove();
6622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        fmt->format(1250.75, s);
6623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if(s!=expected){
6624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln(UnicodeString("FAIL: Expected: ")+expected
6625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString(" Got: ") + s
6626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho                    + UnicodeString( " for locale: ")+ UnicodeString(localeID) );
6627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        if (U_FAILURE(status)){
6629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho            errln((UnicodeString)"FAIL: Status " + (int32_t)status);
6630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        }
6631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        delete fmt;
6632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
6633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
6634b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}
6635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
6637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API.
6638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
6639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() {
6640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status);
6642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    CHECK_DATA(status, "NumberingSystem::getAvailableNames()")
6643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t nsCount = availableNumberingSystems->count(status);
6645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( nsCount < 36 ) {
6646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 36, got %d",nsCount);
6647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* A relatively simple test of the API.  We call getAvailableNames() and cycle through */
6650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* each name returned, attempting to create a numbering system based on that name and  */
6651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* verifying that the name returned from the resulting numbering system is the same    */
6652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /* one that we initially thought.                                                      */
6653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    int32_t len;
6655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    for ( int32_t i = 0 ; i < nsCount ; i++ ) {
6656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        const char *nsname = availableNumberingSystems->next(&len,status);
6657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status);
6658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        if ( uprv_strcmp(nsname,ns->getName()) ) {
6659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius            errln("FAIL: Numbering system name didn't match for name = %s\n",nsname);
6660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        }
6661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        delete ns;
6663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    delete availableNumberingSystems;
6666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid
6669103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void)
6670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{
6671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(pattern,"#",1);
6672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(pattern,"#",1);
6673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(infstr,"INF",3);
6675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(infstr,"INF",3);
6676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_DECL(nanstr,"NAN",3);
6678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    U_STRING_INIT(nanstr,"NAN",3);
6679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UChar outputbuf[50] = {0};
6681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UErrorCode status = U_ZERO_ERROR;
6682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status);
6683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        dataerrln("FAIL: error in unum_open() - %s", u_errorName(status));
6685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        return;
6686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status);
6689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status);
6690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( U_FAILURE(status) ) {
6691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln("FAIL: error setting symbols");
6692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    double inf = uprv_getInfinity();
6695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN);
6697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0);
6698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UFieldPosition position = { 0, 0, 0};
6700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_formatDouble(fmt,inf,outputbuf,50,&position,&status);
6701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    if ( u_strcmp(infstr, outputbuf)) {
6703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf);
6704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
6705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    unum_close(fmt);
6707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h"
6710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
6711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() {
6712103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49
671354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n",
6714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius        sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
671554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) {
671654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE);
671754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) {
671854dcd9b6a06071f647dac967e9e267abb9410720Craig 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));
671954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    }
6720103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else
672154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped.");
6722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
6723103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
672454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    // get some additional case
672554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
672654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
672754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000",""),status);
672854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 1;
672954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0001";
673054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
673154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
673254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
673354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
673454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),""));
673554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
673654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),""));
673754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
673954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
674054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
674154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
674254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN; // -9223372036854775808L;
674354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
674454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
674554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
674654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
674754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
674854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775808";
674954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
675054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
675154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
675254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
675354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
675454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
675554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808");
675654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
675854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
675954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
676054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
676154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MAX; // -9223372036854775808L;
676254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
676354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
676454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
676554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
676654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
676754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "9223372036854775807";
676854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
676954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
677054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
677154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
677254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
677354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
677454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX");
677554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6776103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
677754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
677854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
677954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
678054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = 0;
678154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // uint8_t bits[8];
678254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // memcpy(bits,&long_number,8);
678354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // for(int i=0;i<8;i++) {
678454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        //   logln("bits: %02X", (unsigned int)bits[i]);
678554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        // }
678654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "0000000000000000000";
678754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
678854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
678954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
679054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
679154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
679254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
679354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0");
679454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6795103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
679654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    {
679754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UErrorCode status=U_ZERO_ERROR;
679854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        DecimalFormat df(UnicodeString("0000000000000000000",""),status);
679954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        int64_t long_number = U_INT64_MIN + 1;
680054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString expect = "-9223372036854775807";
680154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        UnicodeString result;
680254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        FieldPosition pos;
680354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        df.format(long_number, result, pos);
680454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        if(U_FAILURE(status)||expect!=result) {
680554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        } else {
680754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius            logln("OK:  got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807");
680854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        }
6809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    }
681054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}
681154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
681254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
681354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) {
681454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) {
681554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius          sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
681754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) {
681854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
681954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
682054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  } else {
682154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n",
682254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius        sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE);
6823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  }
6824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}
6825103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
682659d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) {
682759d709d503bab6e2b61931737e662dd293b40578ccornelius  UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": ");
682859d709d503bab6e2b61931737e662dd293b40578ccornelius
682959d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattable *u = f.toUFormattable();
683059d709d503bab6e2b61931737e662dd293b40578ccornelius  logln();
683159d709d503bab6e2b61931737e662dd293b40578ccornelius  if (u == NULL) {
683259d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error: f.toUFormattable() retuned NULL.");
683359d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
683459d709d503bab6e2b61931737e662dd293b40578ccornelius  }
683559d709d503bab6e2b61931737e662dd293b40578ccornelius  logln("%s:%d: comparing Formattable with UFormattable", file, line);
683659d709d503bab6e2b61931737e662dd293b40578ccornelius  logln(fileLine + toString(f));
683759d709d503bab6e2b61931737e662dd293b40578ccornelius
683859d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode status = U_ZERO_ERROR;
683959d709d503bab6e2b61931737e662dd293b40578ccornelius  UErrorCode valueStatus = U_ZERO_ERROR;
684059d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType expectUType = UFMT_COUNT; // invalid
684159d709d503bab6e2b61931737e662dd293b40578ccornelius
684259d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool triedExact = FALSE; // did we attempt an exact comparison?
684359d709d503bab6e2b61931737e662dd293b40578ccornelius  UBool exactMatch = FALSE; // was the exact comparison true?
684459d709d503bab6e2b61931737e662dd293b40578ccornelius
684559d709d503bab6e2b61931737e662dd293b40578ccornelius  switch( f.getType() ) {
684659d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDate:
684759d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DATE;
684859d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus));
684959d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
685059d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685159d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kDouble:
685259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_DOUBLE;
685359d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus));
685459d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
685559d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
685659d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kLong:
685759d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_LONG;
685859d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus));
685959d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
686059d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
686159d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kString:
686259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_STRING;
686359d709d503bab6e2b61931737e662dd293b40578ccornelius    {
686459d709d503bab6e2b61931737e662dd293b40578ccornelius      UnicodeString str;
686559d709d503bab6e2b61931737e662dd293b40578ccornelius      f.getString(str);
686659d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
686759d709d503bab6e2b61931737e662dd293b40578ccornelius      const UChar* uch = ufmt_getUChars(u, &len, &valueStatus);
686859d709d503bab6e2b61931737e662dd293b40578ccornelius      if(U_SUCCESS(valueStatus)) {
686959d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString str2(uch, len);
687059d709d503bab6e2b61931737e662dd293b40578ccornelius        assertTrue("UChar* NULL-terminated", uch[len]==0);
687159d709d503bab6e2b61931737e662dd293b40578ccornelius        exactMatch = (str == str2);
687259d709d503bab6e2b61931737e662dd293b40578ccornelius      }
687359d709d503bab6e2b61931737e662dd293b40578ccornelius      triedExact = TRUE;
687459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
687559d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
687659d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kArray:
687759d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_ARRAY;
687859d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
687959d709d503bab6e2b61931737e662dd293b40578ccornelius    {
688059d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count = ufmt_getArrayLength(u, &valueStatus);
688159d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t count2;
688259d709d503bab6e2b61931737e662dd293b40578ccornelius      const Formattable *array2 = f.getArray(count2);
688359d709d503bab6e2b61931737e662dd293b40578ccornelius      exactMatch = assertEquals(fileLine + " array count", count, count2);
688459d709d503bab6e2b61931737e662dd293b40578ccornelius
688559d709d503bab6e2b61931737e662dd293b40578ccornelius      if(exactMatch) {
688659d709d503bab6e2b61931737e662dd293b40578ccornelius        for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) {
688759d709d503bab6e2b61931737e662dd293b40578ccornelius          UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus);
688859d709d503bab6e2b61931737e662dd293b40578ccornelius          if(*Formattable::fromUFormattable(uu) != (array2[i])) {
688959d709d503bab6e2b61931737e662dd293b40578ccornelius            errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i,
689059d709d503bab6e2b61931737e662dd293b40578ccornelius                  (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i]));
689159d709d503bab6e2b61931737e662dd293b40578ccornelius            exactMatch = FALSE;
689259d709d503bab6e2b61931737e662dd293b40578ccornelius          } else {
689359d709d503bab6e2b61931737e662dd293b40578ccornelius            if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) {
689459d709d503bab6e2b61931737e662dd293b40578ccornelius              exactMatch = FALSE;
689559d709d503bab6e2b61931737e662dd293b40578ccornelius            }
689659d709d503bab6e2b61931737e662dd293b40578ccornelius          }
689759d709d503bab6e2b61931737e662dd293b40578ccornelius        }
689859d709d503bab6e2b61931737e662dd293b40578ccornelius      }
689959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
690059d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690159d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kInt64:
690259d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_INT64;
690359d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus));
690459d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
690559d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
690659d709d503bab6e2b61931737e662dd293b40578ccornelius  case Formattable::kObject:
690759d709d503bab6e2b61931737e662dd293b40578ccornelius    expectUType = UFMT_OBJECT;
690859d709d503bab6e2b61931737e662dd293b40578ccornelius    exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus));
690959d709d503bab6e2b61931737e662dd293b40578ccornelius    triedExact = TRUE;
691059d709d503bab6e2b61931737e662dd293b40578ccornelius    break;
691159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691259d709d503bab6e2b61931737e662dd293b40578ccornelius  UFormattableType uType = ufmt_getType(u, &status);
691359d709d503bab6e2b61931737e662dd293b40578ccornelius
691459d709d503bab6e2b61931737e662dd293b40578ccornelius  if(U_FAILURE(status)) {
691559d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status));
691659d709d503bab6e2b61931737e662dd293b40578ccornelius    return FALSE;
691759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
691859d709d503bab6e2b61931737e662dd293b40578ccornelius
691959d709d503bab6e2b61931737e662dd293b40578ccornelius  if(uType != expectUType) {
692059d709d503bab6e2b61931737e662dd293b40578ccornelius    errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType);
692159d709d503bab6e2b61931737e662dd293b40578ccornelius  }
692259d709d503bab6e2b61931737e662dd293b40578ccornelius
692359d709d503bab6e2b61931737e662dd293b40578ccornelius  if(triedExact) {
692459d709d503bab6e2b61931737e662dd293b40578ccornelius    if(U_FAILURE(valueStatus)) {
692559d709d503bab6e2b61931737e662dd293b40578ccornelius      errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus));
692659d709d503bab6e2b61931737e662dd293b40578ccornelius    } else if(!exactMatch) {
692759d709d503bab6e2b61931737e662dd293b40578ccornelius     errln("%s:%d: failed exact match for the Formattable type", file, line);
692859d709d503bab6e2b61931737e662dd293b40578ccornelius    } else {
692959d709d503bab6e2b61931737e662dd293b40578ccornelius      logln("%s:%d: exact match OK", file, line);
693059d709d503bab6e2b61931737e662dd293b40578ccornelius    }
693159d709d503bab6e2b61931737e662dd293b40578ccornelius  } else {
693259d709d503bab6e2b61931737e662dd293b40578ccornelius    logln("%s:%d: note, did not attempt exact match for this formattable type", file, line);
693359d709d503bab6e2b61931737e662dd293b40578ccornelius  }
693459d709d503bab6e2b61931737e662dd293b40578ccornelius
693559d709d503bab6e2b61931737e662dd293b40578ccornelius  if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u))
693659d709d503bab6e2b61931737e662dd293b40578ccornelius      && f.isNumeric()) {
693759d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode convStatus = U_ZERO_ERROR;
693859d709d503bab6e2b61931737e662dd293b40578ccornelius
693959d709d503bab6e2b61931737e662dd293b40578ccornelius    if(uType != UFMT_INT64) { // may fail to compare
694059d709d503bab6e2b61931737e662dd293b40578ccornelius      assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus));
694159d709d503bab6e2b61931737e662dd293b40578ccornelius    }
694259d709d503bab6e2b61931737e662dd293b40578ccornelius
694359d709d503bab6e2b61931737e662dd293b40578ccornelius    if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) {
694459d709d503bab6e2b61931737e662dd293b40578ccornelius      StringPiece fDecNum = f.getDecimalNumber(convStatus);
694559d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1
694659d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len;
694759d709d503bab6e2b61931737e662dd293b40578ccornelius      const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus);
694859d709d503bab6e2b61931737e662dd293b40578ccornelius#else
694959d709d503bab6e2b61931737e662dd293b40578ccornelius      // copy version
695059d709d503bab6e2b61931737e662dd293b40578ccornelius      char decNumChars[200];
695159d709d503bab6e2b61931737e662dd293b40578ccornelius      int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus);
695259d709d503bab6e2b61931737e662dd293b40578ccornelius#endif
695359d709d503bab6e2b61931737e662dd293b40578ccornelius
695459d709d503bab6e2b61931737e662dd293b40578ccornelius      if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) {
695559d709d503bab6e2b61931737e662dd293b40578ccornelius        logln(fileLine + decNumChars);
695659d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars length==", len, fDecNum.length());
695759d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data());
695859d709d503bab6e2b61931737e662dd293b40578ccornelius      }
695959d709d503bab6e2b61931737e662dd293b40578ccornelius
696059d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionF = U_ZERO_ERROR;
696159d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t l = f.getInt64(int64ConversionF);
696259d709d503bab6e2b61931737e662dd293b40578ccornelius      UErrorCode int64ConversionU = U_ZERO_ERROR;
696359d709d503bab6e2b61931737e662dd293b40578ccornelius      int64_t r = ufmt_getInt64(u, &int64ConversionU);
696459d709d503bab6e2b61931737e662dd293b40578ccornelius
696559d709d503bab6e2b61931737e662dd293b40578ccornelius      if( (l==r)
696659d709d503bab6e2b61931737e662dd293b40578ccornelius          && ( uType != UFMT_INT64 ) // int64 better not overflow
696759d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionU)
696859d709d503bab6e2b61931737e662dd293b40578ccornelius          && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) {
696959d709d503bab6e2b61931737e662dd293b40578ccornelius        logln("%s:%d: OK: 64 bit overflow", file, line);
697059d709d503bab6e2b61931737e662dd293b40578ccornelius      } else {
697159d709d503bab6e2b61931737e662dd293b40578ccornelius        assertEquals(fileLine + " as int64 ==", l, r);
697259d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF);
697359d709d503bab6e2b61931737e662dd293b40578ccornelius        assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU);
697459d709d503bab6e2b61931737e662dd293b40578ccornelius      }
697559d709d503bab6e2b61931737e662dd293b40578ccornelius    }
697659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
697759d709d503bab6e2b61931737e662dd293b40578ccornelius  return exactMatch || !triedExact;
697859d709d503bab6e2b61931737e662dd293b40578ccornelius}
697959d709d503bab6e2b61931737e662dd293b40578ccornelius
698059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) {
698159d709d503bab6e2b61931737e662dd293b40578ccornelius  {
698259d709d503bab6e2b61931737e662dd293b40578ccornelius    // test that a default formattable is equal to Formattable()
698359d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
698459d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalUFormattablePointer defaultUFormattable(ufmt_open(&status));
698559d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("calling umt_open", status);
698659d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable defaultFormattable;
698759d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
698859d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
698959d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
699059d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()",
699159d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
699259d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultUFormattable.getAlias()))));
699359d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable",
699459d709d503bab6e2b61931737e662dd293b40578ccornelius               (defaultFormattable
699559d709d503bab6e2b61931737e662dd293b40578ccornelius                == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable()))));
699659d709d503bab6e2b61931737e662dd293b40578ccornelius    assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable",
699759d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
699859d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultFormattable.toUFormattable())));
699959d709d503bab6e2b61931737e662dd293b40578ccornelius    assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()",
700059d709d503bab6e2b61931737e662dd293b40578ccornelius               ((&defaultFormattable)
700159d709d503bab6e2b61931737e662dd293b40578ccornelius                == Formattable::fromUFormattable(defaultUFormattable.getAlias())));
700259d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable);
700359d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700459d709d503bab6e2b61931737e662dd293b40578ccornelius  // test some random Formattables
700559d709d503bab6e2b61931737e662dd293b40578ccornelius  {
700659d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(ucal_getNow(), Formattable::kIsDate);
700759d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
700859d709d503bab6e2b61931737e662dd293b40578ccornelius  }
700959d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701059d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((double)1.61803398874989484820); // golden ratio
701159d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701259d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701359d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701459d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon
701559d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
701659d709d503bab6e2b61931737e662dd293b40578ccornelius  }
701759d709d503bab6e2b61931737e662dd293b40578ccornelius  {
701859d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/
701959d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
702059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
702159d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702259d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f("Hello world."); // should be invariant?
702359d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
702459d709d503bab6e2b61931737e662dd293b40578ccornelius  }
702559d709d503bab6e2b61931737e662dd293b40578ccornelius  {
702659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
702759d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg
702859d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a StringPiece", status2);
702959d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
703059d709d503bab6e2b61931737e662dd293b40578ccornelius  }
703159d709d503bab6e2b61931737e662dd293b40578ccornelius  {
703259d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status2 = U_ZERO_ERROR;
703359d709d503bab6e2b61931737e662dd293b40578ccornelius    UObject *obj = new Locale();
703459d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable f(obj);
703559d709d503bab6e2b61931737e662dd293b40578ccornelius    assertSuccess("Constructing a Formattable from a default constructed Locale()", status2);
703659d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__,  f);
703759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
703859d709d503bab6e2b61931737e662dd293b40578ccornelius  {
703959d709d503bab6e2b61931737e662dd293b40578ccornelius    const Formattable array[] = {
704059d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable(ucal_getNow(), Formattable::kIsDate),
704159d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((int32_t)4),
704259d709d503bab6e2b61931737e662dd293b40578ccornelius      Formattable((double)1.234),
704359d709d503bab6e2b61931737e662dd293b40578ccornelius    };
704459d709d503bab6e2b61931737e662dd293b40578ccornelius
704559d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable fa(array, 3);
704659d709d503bab6e2b61931737e662dd293b40578ccornelius    testFormattableAsUFormattable(__FILE__, __LINE__, fa);
704759d709d503bab6e2b61931737e662dd293b40578ccornelius  }
704859d709d503bab6e2b61931737e662dd293b40578ccornelius}
704959d709d503bab6e2b61931737e662dd293b40578ccornelius
705059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) {
705159d709d503bab6e2b61931737e662dd293b40578ccornelius  double input[] = {
705259d709d503bab6e2b61931737e662dd293b40578ccornelius        0, 0,
705359d709d503bab6e2b61931737e662dd293b40578ccornelius        0.1, -0.1,
705459d709d503bab6e2b61931737e662dd293b40578ccornelius        123, -123,
705559d709d503bab6e2b61931737e662dd293b40578ccornelius        12345, -12345,
705659d709d503bab6e2b61931737e662dd293b40578ccornelius        123.45, -123.45,
705759d709d503bab6e2b61931737e662dd293b40578ccornelius        123.44501, -123.44501,
705859d709d503bab6e2b61931737e662dd293b40578ccornelius        0.001234, -0.001234,
705959d709d503bab6e2b61931737e662dd293b40578ccornelius        0.00000000123, -0.00000000123,
706059d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000000000000000123, -0.0000000000000000000123,
706159d709d503bab6e2b61931737e662dd293b40578ccornelius        1.2, -1.2,
706259d709d503bab6e2b61931737e662dd293b40578ccornelius        0.0000000012344501, -0.0000000012344501,
706359d709d503bab6e2b61931737e662dd293b40578ccornelius        123445.01, -123445.01,
706459d709d503bab6e2b61931737e662dd293b40578ccornelius        12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0,
706559d709d503bab6e2b61931737e662dd293b40578ccornelius    };
706659d709d503bab6e2b61931737e662dd293b40578ccornelius    const char* expected[] = {
706759d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00", "0.00",
706859d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.100", "-0.100",
706959d709d503bab6e2b61931737e662dd293b40578ccornelius        "123", "-123",
707059d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345", "-12345",
707159d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
707259d709d503bab6e2b61931737e662dd293b40578ccornelius        "123.45", "-123.45",
707359d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.001234", "-0.001234",
707459d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.00000000123", "-0.00000000123",
707559d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000000000000000123", "-0.0000000000000000000123",
707659d709d503bab6e2b61931737e662dd293b40578ccornelius        "1.20", "-1.20",
707759d709d503bab6e2b61931737e662dd293b40578ccornelius        "0.0000000012345", "-0.0000000012345",
707859d709d503bab6e2b61931737e662dd293b40578ccornelius        "123450", "-123450",
707959d709d503bab6e2b61931737e662dd293b40578ccornelius        "12345000000000000000000000000000000", "-12345000000000000000000000000000000",
708059d709d503bab6e2b61931737e662dd293b40578ccornelius    };
708159d709d503bab6e2b61931737e662dd293b40578ccornelius
708259d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
708359d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
708459d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
708559d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
708659d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status,"NumberFormat::createInstance")
708759d709d503bab6e2b61931737e662dd293b40578ccornelius
708859d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
708959d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
709059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(5);
709159d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setGroupingUsed(false);
709259d709d503bab6e2b61931737e662dd293b40578ccornelius
709359d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
709459d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString expectedResult;
709559d709d503bab6e2b61931737e662dd293b40578ccornelius    for (unsigned int i = 0; i < sizeof(input)/sizeof(double); ++i) {
709659d709d503bab6e2b61931737e662dd293b40578ccornelius        numberFormat->format(input[i], result);
709759d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString expectedResult(expected[i]);
709859d709d503bab6e2b61931737e662dd293b40578ccornelius        if (result != expectedResult) {
709959d709d503bab6e2b61931737e662dd293b40578ccornelius          errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result);
710059d709d503bab6e2b61931737e662dd293b40578ccornelius        }
710159d709d503bab6e2b61931737e662dd293b40578ccornelius        result.remove();
710259d709d503bab6e2b61931737e662dd293b40578ccornelius    }
710359d709d503bab6e2b61931737e662dd293b40578ccornelius}
710459d709d503bab6e2b61931737e662dd293b40578ccornelius
710559d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() {
710659d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
710759d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
710859d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
710959d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
711059d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
711159d709d503bab6e2b61931737e662dd293b40578ccornelius
711259d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
711359d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(3);
711459d709d503bab6e2b61931737e662dd293b40578ccornelius
711559d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString result;
711659d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->format(0.0, result);
711759d709d503bab6e2b61931737e662dd293b40578ccornelius    if (result != "0") {
711859d709d503bab6e2b61931737e662dd293b40578ccornelius        errln((UnicodeString)"Expected: 0, got " + result);
711959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
712059d709d503bab6e2b61931737e662dd293b40578ccornelius}
712159d709d503bab6e2b61931737e662dd293b40578ccornelius
712259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() {
712359d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
712459d709d503bab6e2b61931737e662dd293b40578ccornelius    Locale locale("en_US");
712559d709d503bab6e2b61931737e662dd293b40578ccornelius    LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>(
712659d709d503bab6e2b61931737e662dd293b40578ccornelius            NumberFormat::createInstance(locale, status)));
712759d709d503bab6e2b61931737e662dd293b40578ccornelius    if (U_FAILURE(status)) {
712859d709d503bab6e2b61931737e662dd293b40578ccornelius        dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status));
712959d709d503bab6e2b61931737e662dd293b40578ccornelius        return;
713059d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713159d709d503bab6e2b61931737e662dd293b40578ccornelius
713259d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
713359d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
713459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713559d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(TRUE);
713659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
713759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
713859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
713959d709d503bab6e2b61931737e662dd293b40578ccornelius
714059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
714159d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == TRUE) {
714259d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__);
714359d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714459d709d503bab6e2b61931737e662dd293b40578ccornelius
714559d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMinimumSignificantDigits(3);
714659d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
714759d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
714859d709d503bab6e2b61931737e662dd293b40578ccornelius    }
714959d709d503bab6e2b61931737e662dd293b40578ccornelius
715059d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setSignificantDigitsUsed(FALSE);
715159d709d503bab6e2b61931737e662dd293b40578ccornelius    numberFormat->setMaximumSignificantDigits(6);
715259d709d503bab6e2b61931737e662dd293b40578ccornelius    if (numberFormat->areSignificantDigitsUsed() == FALSE) {
715359d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__);
715459d709d503bab6e2b61931737e662dd293b40578ccornelius    }
715559d709d503bab6e2b61931737e662dd293b40578ccornelius
715659d709d503bab6e2b61931737e662dd293b40578ccornelius}
715759d709d503bab6e2b61931737e662dd293b40578ccornelius
715859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() {
715959d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
716059d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status);
716159d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
716259d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
716359d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
716459d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
716559d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u200e-0,5");
716659d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
716759d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
716859d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
716959d709d503bab6e2b61931737e662dd293b40578ccornelius        errln("Expected -0,5 to parse for Farsi.");
717059d709d503bab6e2b61931737e662dd293b40578ccornelius    }
717159d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
717259d709d503bab6e2b61931737e662dd293b40578ccornelius}
717359d709d503bab6e2b61931737e662dd293b40578ccornelius
717459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() {
717559d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
717659d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status);
717759d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK_DATA(status, "NumberFormat::createInstance")
717859d709d503bab6e2b61931737e662dd293b40578ccornelius    test->setLenient(TRUE);
717959d709d503bab6e2b61931737e662dd293b40578ccornelius    Formattable af;
718059d709d503bab6e2b61931737e662dd293b40578ccornelius    ParsePosition ppos;
718159d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString value("\\u208B0.5");
718259d709d503bab6e2b61931737e662dd293b40578ccornelius    value = value.unescape();
718359d709d503bab6e2b61931737e662dd293b40578ccornelius    test->parse(value, af, ppos);
718459d709d503bab6e2b61931737e662dd293b40578ccornelius    if (ppos.getIndex() == 0) {
718559d709d503bab6e2b61931737e662dd293b40578ccornelius        errln(UnicodeString("Expected ") + value + UnicodeString(" to parse."));
718659d709d503bab6e2b61931737e662dd293b40578ccornelius    }
718759d709d503bab6e2b61931737e662dd293b40578ccornelius    delete test;
718859d709d503bab6e2b61931737e662dd293b40578ccornelius}
718959d709d503bab6e2b61931737e662dd293b40578ccornelius
719059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() {
719159d709d503bab6e2b61931737e662dd293b40578ccornelius    UErrorCode status = U_ZERO_ERROR;
719259d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormatSymbols custom(Locale::getUS(), status);
719359d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormatSymbols constructor");
719459d709d503bab6e2b61931737e662dd293b40578ccornelius
719559d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*");
719659d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^");
719759d709d503bab6e2b61931737e662dd293b40578ccornelius    custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":");
719859d709d503bab6e2b61931737e662dd293b40578ccornelius
719959d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString pat(" #,##0.00");
720059d709d503bab6e2b61931737e662dd293b40578ccornelius    pat.insert(0, (UChar)0x00A4);
720159d709d503bab6e2b61931737e662dd293b40578ccornelius
720259d709d503bab6e2b61931737e662dd293b40578ccornelius    DecimalFormat fmt(pat, custom, status);
720359d709d503bab6e2b61931737e662dd293b40578ccornelius    CHECK(status, "DecimalFormat constructor");
720459d709d503bab6e2b61931737e662dd293b40578ccornelius
720559d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString numstr("* 1^234:56");
720659d709d503bab6e2b61931737e662dd293b40578ccornelius    expect2(fmt, (Formattable)((double)1234.56), numstr);
720759d709d503bab6e2b61931737e662dd293b40578ccornelius}
720859d709d503bab6e2b61931737e662dd293b40578ccornelius
720959d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct {
721059d709d503bab6e2b61931737e662dd293b40578ccornelius    const char *   locale;
721159d709d503bab6e2b61931737e662dd293b40578ccornelius    UBool          lenient;
721259d709d503bab6e2b61931737e662dd293b40578ccornelius    UnicodeString  numString;
721359d709d503bab6e2b61931737e662dd293b40578ccornelius    double         value;
721459d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem;
721559d709d503bab6e2b61931737e662dd293b40578ccornelius
721659d709d503bab6e2b61931737e662dd293b40578ccornelius
721759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() {
721859d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem items[] = {
721959d709d503bab6e2b61931737e662dd293b40578ccornelius        // locale               lenient numString                                                       value
722059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
722159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
722259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
722359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
722459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
722559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
722659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
722759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
722859d709d503bab6e2b61931737e662dd293b40578ccornelius
722959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
723059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
723159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
723259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
723359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
723459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
723559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
723659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arab",    TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
723759d709d503bab6e2b61931737e662dd293b40578ccornelius
723859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
723959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
724059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
724159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
724259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
724359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
724459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
724559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "en@numbers=arabext", TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
724659d709d503bab6e2b61931737e662dd293b40578ccornelius
724759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("12"),                                      12 },
724859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("12"),                                      12 },
724959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("-23"),                                    -23 },
725059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("-23"),                                    -23 },
725159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
725259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
725359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
725459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "he",                 TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
725559d709d503bab6e2b61931737e662dd293b40578ccornelius
725659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u0663\\u0664"),                          34 },
725859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
725959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("-\\u0664\\u0665"),                        -45 },
726059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("- \\u0664\\u0665"),                       -45 },
726159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 FALSE,  CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
726259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F-\\u0664\\u0665"),                 -45 },
726359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar",                 TRUE,   CharsToUnicodeString("\\u200F- \\u0664\\u0665"),                -45 },
726459d709d503bab6e2b61931737e662dd293b40578ccornelius
726559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("12"),                                      12 },
726659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("12"),                                      12 },
726759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("-23"),                                    -23 },
726859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("-23"),                                    -23 },
726959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("- 23"),                                   -23 },
727059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              FALSE,  CharsToUnicodeString("\\u200E-23"),                             -23 },
727159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E-23"),                             -23 },
727259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ar_MA",              TRUE,   CharsToUnicodeString("\\u200E- 23"),                            -23 },
727359d709d503bab6e2b61931737e662dd293b40578ccornelius
727459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
727659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212\\u06F6\\u06F7"),                  -67 },
727859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"),                 -67 },
727959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 FALSE,  CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
728059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"),    -67 },
728159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "fa",                 TRUE,   CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"),   -67 },
728259d709d503bab6e2b61931737e662dd293b40578ccornelius
728359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
728459d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u06F5\\u06F6"),                          56 },
728559d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728659d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u06F6\\u06F7"),                        -67 },
728759d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("- \\u06F6\\u06F7"),                       -67 },
728859d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
728959d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"),          -67 },
729059d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"),         -67 },
729159d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 FALSE,  CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
729259d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"),                 -67 },
729359d709d503bab6e2b61931737e662dd293b40578ccornelius        { "ps",                 TRUE,   CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"),                -67 },
729459d709d503bab6e2b61931737e662dd293b40578ccornelius        // terminator
729559d709d503bab6e2b61931737e662dd293b40578ccornelius        { NULL,                 0,      UnicodeString(""),                                                0 },
729659d709d503bab6e2b61931737e662dd293b40578ccornelius    };
729759d709d503bab6e2b61931737e662dd293b40578ccornelius
729859d709d503bab6e2b61931737e662dd293b40578ccornelius    const SignsAndMarksItem * itemPtr;
729959d709d503bab6e2b61931737e662dd293b40578ccornelius    for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
730059d709d503bab6e2b61931737e662dd293b40578ccornelius        UErrorCode status = U_ZERO_ERROR;
730159d709d503bab6e2b61931737e662dd293b40578ccornelius        NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status);
730259d709d503bab6e2b61931737e662dd293b40578ccornelius        if (U_SUCCESS(status)) {
730359d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->setLenient(itemPtr->lenient);
730459d709d503bab6e2b61931737e662dd293b40578ccornelius            Formattable fmtobj;
730559d709d503bab6e2b61931737e662dd293b40578ccornelius            ParsePosition ppos;
730659d709d503bab6e2b61931737e662dd293b40578ccornelius            numfmt->parse(itemPtr->numString, fmtobj, ppos);
730759d709d503bab6e2b61931737e662dd293b40578ccornelius            if (ppos.getIndex() == itemPtr->numString.length()) {
730859d709d503bab6e2b61931737e662dd293b40578ccornelius                double parsedValue = fmtobj.getDouble(status);
730959d709d503bab6e2b61931737e662dd293b40578ccornelius                if (U_FAILURE(status) || parsedValue != itemPtr->value) {
731059d709d503bab6e2b61931737e662dd293b40578ccornelius                    errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue);
731159d709d503bab6e2b61931737e662dd293b40578ccornelius                }
731259d709d503bab6e2b61931737e662dd293b40578ccornelius            } else {
731359d709d503bab6e2b61931737e662dd293b40578ccornelius                errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex());
731459d709d503bab6e2b61931737e662dd293b40578ccornelius            }
731559d709d503bab6e2b61931737e662dd293b40578ccornelius        } else {
731659d709d503bab6e2b61931737e662dd293b40578ccornelius            dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status));
731759d709d503bab6e2b61931737e662dd293b40578ccornelius        }
731859d709d503bab6e2b61931737e662dd293b40578ccornelius        delete numfmt;
731959d709d503bab6e2b61931737e662dd293b40578ccornelius    }
732059d709d503bab6e2b61931737e662dd293b40578ccornelius}
732159d709d503bab6e2b61931737e662dd293b40578ccornelius
7322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct {
7323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  DecimalFormat::ERoundingMode mode;
7324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  double value;
7325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  UnicodeString expected;
7326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data;
7327fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7328fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7329fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0.
7330fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() {
7331fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const Test10419Data items[] = {
7332fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundCeiling, 1.488,  "2"},
7333fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundDown, 1.588,  "1"},
7334fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundFloor, 1.888,  "1"},
7335fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfDown, 1.5,  "1"},
7336fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfEven, 2.5,  "2"},
7337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundHalfUp, 2.5,  "3"},
7338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        { DecimalFormat::kRoundUp, 1.5,  "2"},
7339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    };
7340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status));
7342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        dataerrln("Failure creating DecimalFormat %s", u_errorName(status));
7344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < (int32_t) (sizeof(items) / sizeof(items[0])); ++i) {
7347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setRoundingMode(items[i].mode);
7348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        decfmt->setMaximumFractionDigits(0);
7349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        UnicodeString actual;
7350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        if (items[i].expected != decfmt->format(items[i].value, actual)) {
7351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            errln("Expected " + items[i].expected + ", got " + actual);
7352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() {
7357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt is now 'a'
7358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("'I''ll'*a###.##", status);
7360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("a")) {
7367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Padding character should be 'a'.");
7368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Padding char of fmt ought to be '*' since that is the default and no
7372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // explicit padding char is specified in the new pattern.
7373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.applyPattern("AA#,##0.00ZZ", status);
7374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    // Oops this still prints 'a' even though we changed the pattern.
7376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (fmt.getPadCharacterString() != UnicodeString("*")) {
7377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("applyPattern did not clear padding character.");
7378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() {
7382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat format("0.00E0", status);
7384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status));
7386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat::ERoundingMode roundingModes[] = {
7390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundCeiling,
7391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundDown,
7392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundFloor,
7393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfDown,
7394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfEven,
7395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundHalfUp,
7396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            DecimalFormat::kRoundUp};
7397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    const char *descriptions[] = {
7398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Ceiling",
7399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Down",
7400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round Floor",
7401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half down",
7402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half even",
7403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round half up",
7404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            "Round up"};
7405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016};
7408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3",
7411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3",
7413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3",
7414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3",
7416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"};
7417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016};
7428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7429fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3",
7431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3",
7432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3",
7433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3",
7434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3",
7436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"};
7437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0
7447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {0.0, -0.0};
7449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0",
7457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "0.00E0", "-0.00E0"};
7458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/
7468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15};
7471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25",
7474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "9.99E24",
7476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.00E25", "1.00E25",
7479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E25", "1.01E25", "1.00E25"};
7480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15};
7491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-9.99E24", "-1.00E25",
7495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25",
7496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.00E25",
7499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E25", "-1.00E25", "-1.01E25"};
7500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35};
7511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25",
7514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "9.99E-26",
7516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.00E-25", "1.00E-25",
7519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "1.00E-25", "1.01E-25", "1.00E-25"};
7520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    {
7530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35};
7531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        // The order of these expected values correspond to the order of roundingModes and the order of values.
7532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char *expected[] = {
7533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-9.99E-26", "-1.00E-25",
7535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25",
7536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.00E-25",
7539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                "-1.00E-25", "-1.00E-25", "-1.01E-25"};
7540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        verifyRounding(
7541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                format,
7542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                values,
7543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                expected,
7544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                roundingModes,
7545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                descriptions,
7546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(values) / sizeof(values[0])),
7547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0])));
7548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() {
7552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat fmt("0.00E0", status);
7554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (!assertSuccess("Formt creation", status)) {
7555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        return;
7556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString out;
7558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmt.format(-0.0, out);
7559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    assertEquals("format", "-0.00E0", out);
7560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding(
7563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        DecimalFormat& format,
7564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const double *values,
7565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *expected,
7566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const DecimalFormat::ERoundingMode *roundingModes,
7567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *descriptions,
7568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t valueSize,
7569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t roundingModeSize) {
7570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    for (int32_t i = 0; i < roundingModeSize; ++i) {
7571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        format.setRoundingMode(roundingModes[i]);
7572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        for (int32_t j = 0; j < valueSize; j++) {
7573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString currentExpected(expected[i * valueSize + j]);
7574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            currentExpected = currentExpected.unescape();
7575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            UnicodeString actual;
7576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            format.format(values[j], actual);
7577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            if (currentExpected != actual) {
7578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                char buffer[256];
7579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                sprintf(
7580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        buffer,
7581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        "For %s value %f, expected ",
7582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        descriptions[i],
7583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                        values[j]);
7584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                errln(UnicodeString(buffer) + currentExpected + ", got " + actual);
7585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius            }
7586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        }
7587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() {
7591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING;
7593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)1234.5, "$1,234.50", TRUE, status);
7596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1234.5, "($1,234.50)", TRUE, status);
7598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)0, "$0.00", TRUE, status);
7600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("en_US", style, status),
7601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-0.2, "($0.20)", TRUE, status);
7602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status);
7604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("ja_JP", style, status),
7605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status);
7606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    expect(NumberFormat::createInstance("de_DE", style, status),
7607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        (Formattable)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status);
7608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186
7611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() {
7612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UErrorCode status = U_ZERO_ERROR;
7613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status);
7614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormatSymbols for root");
7616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    UnicodeString pattern("#,##0.###");
7619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status);
7620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (U_FAILURE(status)) {
7621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	dataerrln("Fail: can't create DecimalFormat using root symbols");
7622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    	return;
7623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone();
7626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32);
7627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    if (*fmtClone == *fmtBase) {
7628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth");
7629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
7630fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtClone;
7631fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7632fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    delete fmtBase;
7633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
7634fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
7635f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid NumberFormatTest::TestCurrencyUsage() {
7636f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    double agent = 123.567;
7637f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7638f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UErrorCode status;
7639f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    DecimalFormat *fmt;
7640f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7641f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // compare the Currency and Currency Cash Digits
7642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // Note that as of CLDR 26:
7643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // * TWD switches from 0 decimals to 2; PKR still has 0, so change test to that
7644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // * CAD and all other currencies that rounded to .05 no longer do
7645f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7646f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    Locale enUS_PKR("en_US@currency=PKR");
7647f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7648f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7649f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7650f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7651f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CURRENCY, status);
7652f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=PKR/CURRENCY", status, TRUE) == FALSE) {
7653f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7654f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7655f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7656f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UnicodeString original;
7657f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->format(agent,original);
7658f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test Currency Usage 1", UnicodeString("PKR124"), original);
7659f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7660f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            // test the getter here
7661f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UCurrencyUsage curUsage = fmt->getCurrencyUsage();
7662f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test usage getter - standard", curUsage, UCURR_USAGE_STANDARD);
7663f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7664f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7665f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7666f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CASH_CURRENCY, status);
7667f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=PKR/CASH", status, TRUE) == FALSE) {
7668f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7669f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7670f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7671f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7672f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        // must be usage = cash
7673f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UCurrencyUsage curUsage = fmt->getCurrencyUsage();
7674f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test usage getter - cash", curUsage, UCURR_USAGE_CASH);
7675f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7676f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cash_currency;
7677f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent,cash_currency);
7678f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 2", UnicodeString("PKR124"), cash_currency);
7679f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7680f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7681f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // compare the Currency and Currency Cash Rounding
7683f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7684f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    Locale enUS_CAD("en_US@currency=CAD");
7685f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7687f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7688f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status);
7689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) {
7690f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7692f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7693f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            UnicodeString original_rounding;
7694f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->format(agent, original_rounding);
7695f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            assertEquals("Test Currency Usage 3", UnicodeString("CA$123.57"), original_rounding);
7696f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7697f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7698f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status);
7699f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) {
7700f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7701f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7703f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7704f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cash_rounding_currency;
7705f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, cash_rounding_currency);
7706f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 4", UnicodeString("CA$123.57"), cash_rounding_currency);
7707f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7708f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7709f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7710f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // Test the currency change
7711f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    // 1st time for getter/setter, 2nd time for factory method
7712f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    const UChar CUR_PKR[] = {0x50, 0x4B, 0x52, 0};
7713f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    for(int i=0; i<2; i++){
7714f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        status = U_ZERO_ERROR;
7715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        if(i == 0){
7716f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status);
7717f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) {
7718f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status);
7721f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }else{
7722f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status);
7723f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) {
7724f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius                continue;
7725f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius            }
7726f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        }
7727f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString cur_original;
7729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, cur_original);
7730f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 5", UnicodeString("CA$123.57"), cur_original);
7731f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7732f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->setCurrency(CUR_PKR, status);
7733f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertSuccess("Set currency to PKR", status);
7734f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
7735f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        UnicodeString PKR_changed;
7736f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        fmt->format(agent, PKR_changed);
7737f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        assertEquals("Test Currency Usage 6", UnicodeString("PKR124"), PKR_changed);
7738f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius        delete fmt;
7739f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    }
7740f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius}
77411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
77421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
77431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Check the constant MAX_INT64_IN_DOUBLE.
77441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// The value should convert to a double with no loss of precision.
77451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// A failure may indicate a platform with a different double format, requiring
77461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// a revision to the constant.
77471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert//
77481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Note that this is actually hard to test, because the language standard gives
77491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert//  compilers considerable flexibility to do unexpected things with rounding and
77501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert//  with overflow in simple int to/from float conversions. Some compilers will completely optimize
77511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert//  away a simple round-trip conversion from int64_t -> double -> int64_t.
77521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
77531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestDoubleLimit11439() {
77541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    char  buf[50];
77551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    for (int64_t num = MAX_INT64_IN_DOUBLE-10; num<=MAX_INT64_IN_DOUBLE; num++) {
77561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        sprintf(buf, "%lld", (long long)num);
77571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        double fNum = 0.0;
77581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        sscanf(buf, "%lf", &fNum);
77591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        int64_t rtNum = fNum;
77601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        if (num != rtNum) {
77611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert            errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum);
77621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert            return;
77631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        }
77641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    }
77651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    for (int64_t num = -MAX_INT64_IN_DOUBLE+10; num>=-MAX_INT64_IN_DOUBLE; num--) {
77661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        sprintf(buf, "%lld", (long long)num);
77671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        double fNum = 0.0;
77681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        sscanf(buf, "%lf", &fNum);
77691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        int64_t rtNum = fNum;
77701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        if (num != rtNum) {
77711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert            errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum);
77721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert            return;
77731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        }
77741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    }
77751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert}
77761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
77771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestFastPathConsistent11524() {
77781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    UErrorCode status = U_ZERO_ERROR;
77791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    NumberFormat *fmt = NumberFormat::createInstance("en", status);
77801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    if (U_FAILURE(status) || fmt == NULL) {
77811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        dataerrln("Failed call to NumberFormat::createInstance() - %s", u_errorName(status));
77821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert        return;
77831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    }
77841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    fmt->setMaximumIntegerDigits(INT32_MIN);
77851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    UnicodeString appendTo;
77861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    assertEquals("", "0", fmt->format(123, appendTo));
77871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    appendTo.remove();
77881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    assertEquals("", "0", fmt->format(12345, appendTo));
77891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    delete fmt;
77901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert}
77911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
77921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert
7793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
7794