numfmtst.cpp revision 95bba3074fbe8ba9d29e736334ae3bad704102aa
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT: 395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep * Copyright (c) 1997-2015, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Modification History: 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/15/99 helena Ported to HPUX 10/11 CC. 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "numfmtst.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/localpointer.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/measfmt.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "digitlst.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "textfile.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tokiter.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "charstr.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "putilimp.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "winnmtst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <float.h> 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 31b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <stdlib.h> 32b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cstring.h" 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/numsys.h" 3454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "fmtableimp.h" 35b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 36b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_CACHE_DEBUG 1 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "stdio.h" /* for sprintf */ 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// #include "iostream" // for cout 39b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 40b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_DEBUG 1 41b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUR[] = {69,85,82,0}; // "EUR" 43b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD" 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4559d709d503bab6e2b61931737e662dd293b40578ccornelius 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class NumberFormatTest 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { errcheckln(status, UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 5127f654740f2a26ad62a5c155af9199af9e69b889claireho#define CHECK_DATA(status,str) if (U_FAILURE(status)) { dataerrln(UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_BEGIN; 568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencySign); 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrency); 588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParse); 598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding487); 608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestQuotes); 618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponential); 628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns); 638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // Upgrade to alphaWorks - liu 5/99 658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponent); 668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific); 678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPad); 688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns2); 698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSecondaryGrouping); 708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSurrogateSupport); 718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAPI); 728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyObject); 748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyPatterns); 758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius //TESTCASE_AUTO(TestDigitList); 768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestWhiteSpaceParsing); 778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestComplexCurrency); // This test removed because CLDR no longer uses choice formats in currency symbols. 788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRegCurrency); 798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSymbolsWithBadLocale); 808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAdoptDecimalFormatSymbols); 818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific2); 838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientificGrouping); 848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestInt64); 858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPerMill); 878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestIllegalPatterns); 888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCases); 898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyNames); 918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyAmount); 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyUnit); 938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCoverage); 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestJB3832); 958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHost); 968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHostClone); 978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormat); 988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding); 998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNonpositiveMultiplier); 1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNumberingSystems); 1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSpaceParsing); 1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestMultiCurrencySign); 1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormatForMixParsing); 1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimalFormatCurrencyParse); 1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyIsoPluralFormat); 1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyParsing); 1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParseCurrencyInUCurr); 1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatAttributes); 1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFieldPositionIterator); 1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimal); 1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFractionDigits); 1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponentParse); 1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExplicitParents); 1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestLenientParse); 1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAvailableNumberingSystems); 1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRoundingPattern); 1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(Test9087); 1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatFastpaths); 1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormattableSize); 12059d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestUFormattable); 12159d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestSignificantDigits); 12259d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestShowZero); 12359d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCompatibleCurrencies); 12459d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestBug9936); 12559d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithFaLocale); 12659d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithAlternateMinusSign); 12759d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCustomCurrencySignAndSeparator); 12859d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseSignsAndMarks); 129fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10419RoundingWith0FractionDigits); 130fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10468ApplyPattern); 131fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestRoundingScientific10542); 132fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestZeroScientific10547); 133fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestAccountingCurrency); 134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestEquality); 135f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCurrencyUsage); 13695bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep TESTCASE_AUTO(TestFastPathConsistent11524); 1378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_END; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 13950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test API (increase code coverage) 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestAPI(void) 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test API"); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = NumberFormat::createInstance("root", status); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("unable to create format object - %s", u_errorName(status)); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test != NULL) { 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumIntegerDigits(10); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumIntegerDigits(2); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumFractionDigits(10); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumFractionDigits(2); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(bla, result, pos, status); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Yuck... Formatted a duck... As a number!"); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.remove(); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t ll = 12; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(ll, result); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != "12.00"){ 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("format int64_t error"); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ParsePosition ppos; 177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(test->parseCurrency("",ppos)); 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // old test for (U_FAILURE(status)) was bogus here, method does not set status! 179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (ppos.getIndex()) { 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed empty string as currency"); 18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete test; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18759d709d503bab6e2b61931737e662dd293b40578ccorneliusclass StubNumberFormat :public NumberFormat{ 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 18959d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat(){}; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const { 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const { 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo.append((UChar)0x0033); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NumberFormat::format(number, appendTo, pos); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse(const UnicodeString& , 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& ) const {} 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse( const UnicodeString& , 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ) const {} 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID(void) const { 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char classID = 0; 21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (UClassID)&classID; 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual Format* clone() const {return NULL;} 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCoverage(void){ 21759d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat stub; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString agent("agent"); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t num = 4; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stub.format(num, agent, pos) != UnicodeString("agent3")){ 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)"); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test various patterns 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestPatterns(void) 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 2326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Could not construct DecimalFormatSymbols - %s", u_errorName(status)); return; } 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "#.#", "#.", ".#", "#" }; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* num[] = { "0", "0.", ".0", "0" }; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<pat_length; ++i) 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[i], sym, status); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newp; fmt.toPattern(newp); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(newp == newpat[i])) 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] + 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + newp + " seen instead"); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(s == num[i])) 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] + 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + s + " seen instead"); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits()); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestDigitList(void) 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // API coverage for DigitList 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list1; 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.append('1'); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.fDecimalAt = 1; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list2; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list2.set((int32_t)1); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (list1 != list2) { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator!= or set failed "); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(list1 == list2)) { 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator== or set failed "); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test exponential pattern 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestExponential(void) 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 2906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; } 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// The following #if statements allow this test to be built and run on 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// platforms that do not have standard IEEE numerics. For example, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// S/390 doubles have an exponent range of -78 to +75. For the 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following #if statements to work, float.h must define 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// DBL_MAX_10_EXP to be a compile-time constant. 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This section may be expanded as needed. 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if DBL_MAX_10_EXP > 300 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = (int32_t)(sizeof(val) / sizeof(val[0])); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valFormat[] = 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E300, -3.141593E-271, 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E300, -3.142E-271, 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif DBL_MAX_10_EXP > 70 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 }; 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = sizeof(val) / sizeof(val[0]); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* valFormat[] = 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71", 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72", 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072", 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]" 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E70, -3.141593E-71, 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E70, -3.142E-71, 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't test double conversion 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* val = 0; 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = 0; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char** valFormat = 0; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* valParse = 0; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Warning: Skipping double conversion tests"); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lval[] = { 0, -1, 1, 123456789 }; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lval_length = (int32_t)(sizeof(lval) / sizeof(lval[0])); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* lvalFormat[] = 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "-1E0", "1E0", "1.2346E8", 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E000", "-1E000", "1E000", "123.4568E006", 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "[1E0]", "1E0", "1.235E8" 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lvalParse[] = 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123456800, 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123500000, 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ival = 0, ilval = 0; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t p=0; p<pat_length; ++p) 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[p], sym, status); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; } 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" + 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pattern) + "\""); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t v; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<val_length; ++v) 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + val[v] + " -format-> " + s); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != valFormat[v+ival]) 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double a; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useEpsilon = FALSE; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong) 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getLong(); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (af.getType() == Formattable::kDouble) { 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getDouble(); 398103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // S/390 will show a failure like this: 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -3.141592652999999e-271 -format-> -3.1416E-271 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -parse-> -3.1416e-271 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| FAIL: Expected -3.141599999999999e-271 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // To compensate, we use an epsilon-based equality 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test on S/390 only. We don't want to do this in 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // general because it's less exacting. 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru useEpsilon = TRUE; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-numeric Formattable returned"); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Use epsilon comparison as necessary 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((useEpsilon && 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) || 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (!useEpsilon && a != valParse[v+ival])) 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)" should be (" + s.length() + " chars) -> " + valParse[v+ival]); 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<lval_length; ++v) 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (*(NumberFormat*)&fmt).format(lval[v], s); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + lval[v] + "L -format-> " + s); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != lvalFormat[v+ilval]) 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong || 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru af.getType() == Formattable::kInt64) { 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t a = af.getLong(status); 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a != lvalParse[v+ilval]) 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Double: " + af.getDouble() 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + ", Long: " + af.getLong()); 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ival += val_length; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ilval += lval_length; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientific2() { 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num = 12.34; 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(TRUE); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$1.23E1"); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(FALSE); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientificGrouping() { 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("##0.00E0",status); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .01234, "12.3E-3"); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .1234, "123E-3"); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1.234, "1.23E0"); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 12.34, "12.3E0"); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 123.4, "123E0"); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1234., "1.23E3"); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void setFromString(DigitList& dl, const char* str) { 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char c; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool decimalSet = FALSE; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.clear(); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((c = *str++)) { 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c == '-') { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '+') { 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '.') { 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSet = TRUE; 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.append(c); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!decimalSet) { 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}*/ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestInt64() { 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#.#E0",status); 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setMaximumFractionDigits(20); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)0, "0E0"); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)-1, "-1E0"); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)1, "1E0"); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9"); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9"); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18"); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18"); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // also test digitlist 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* int64_t int64max = U_INT64_MAX; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64min = U_INT64_MIN; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64maxstr = "9223372036854775807"; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64minstr = "-9223372036854775808"; 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fail("fail: "); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test max int64 value 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList dl; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64maxstr); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr + " didn't fit"); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of max int64 value (1 shy of min int64 value) 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr + " didn't fit"); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test min int64 value 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64minstr); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64minstr + " didn't fit"); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of min int 64 value (1 more than max int64 value) 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; // won't fit 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dl.fitsIntoInt64(FALSE)) { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-(" + int64minstr + ") didn't fit"); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the handling of quotes 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestQuotes(void) 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString *pat; 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status); 6046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 6066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 6076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a'fo''o'b#"); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status); 61150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString s; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 61550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="afo'ob123")) 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected afo'ob123"); 61750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a''b#"); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(*pat, *sym, status); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 62750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="a'b123")) 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected a'b123"); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns. 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrencySign(void) 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar currency = 0x00A4; 6446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 6466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 6476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append("#,##0.00;-"). 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append("#,##0.00"); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(pat, *sym, status); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 65727f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "$1,234.56") dataerrln((UnicodeString)"FAIL: Expected $1,234.56"); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(- 1234.56, s); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 66127f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "-$1,234.56") dataerrln((UnicodeString)"FAIL: Expected -$1,234.56"); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00" 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append(currency). 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" #,##0.00;"). 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append(currency). 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" -#,##0.00"); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, *sym, status); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(1234.56, s); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 67427f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD 1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD 1,234.56"); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(-1234.56, s); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 67827f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD -1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD -1,234.56"); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 6816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + u_errorName(status)); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 68350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); } 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::escape(UnicodeString& s) 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<s.length(); ++i) 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar c = s[(int32_t)i]; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c <= (UChar)0x7F) buf += c; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += (UChar)0x5c; buf += (UChar)0x55; 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0xF000) >> 12); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x0F00) >> 8); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x00F0) >> 4); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString(c & 0x000F); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (s = buf); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* testCases[][2]= { 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* locale ID */ /* expected */ 71154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ca_ES_PREEURO", "\\u20A7\\u00A01.150" }, 712c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"de_LU_PREEURO", "1,150\\u00A0F" }, 713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" }, 714b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_BE_PREEURO", "1.150,50\\u00A0BEF" }, 715fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 71654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"eu_ES_PREEURO", "\\u20A7\\u00A01.150" }, 717c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 718b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"it_IT_PREEURO", "ITL\\u00A01.150" }, 719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"pt_PT_PREEURO", "1,150$50\\u00A0\\u200B"}, // per cldrbug 7670 72027f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=JPY", "\\u00A51,150"}, 72127f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=jpy", "\\u00A51,150"}, 72227f654740f2a26ad62a5c155af9199af9e69b889claireho {"en-US-u-cu-jpy", "\\u00A51,150"} 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns. 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrency(void) 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createCurrencyInstance()"); 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; currencyFmt->format(1.50, s); 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre ici a..........." + s); 739c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0$"))) 740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$"); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status); 74559d709d503bab6e2b61931737e662dd293b40578ccornelius (void)len; // Suppress unused variable warning. 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en Allemagne a.." + s); 749f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!(s==CharsToUnicodeString("1,50\\u00A0DM"))) 750f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM"); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en France a....." + s); 757c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0F"))) 758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F"); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 76250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i=0; i < (int)(sizeof(testCases)/sizeof(testCases[i])); i++){ 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID = testCases[i][0]; 766c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString expected(testCases[i][1], -1, US_INV); 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = expected.unescape(); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(localeID, loc, 256, &status); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Could not create currency formatter for locale %s",localeID); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 77850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 77950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 78850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the Currency object handling, new as of ICU 2.2. 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyObject() { 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 79650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* fmt = 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createCurrencyInstance(Locale::getUS(), ec); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 8006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getCurrencyInstance(US) - %s", u_errorName(ec)); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale null("", "", ""); 80650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, "$1,234.56"); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 8168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "$1,234.56"); 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getCurrencyInstance(FRANCE)"); 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 82950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 833f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 1234.56, CharsToUnicodeString("1 235 JPY")); // Yen 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 8368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "1 234,56 CHF"); // no more 0.05 rounding here, see cldrbug 5548 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "1 234,56 $US"); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 84650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do rudimentary testing of parsing. 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestParse(void) 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString arg("0"); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* format = new DecimalFormat("00", status); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; format->parse(arg, n, status); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"parse(" + arg + ") = " + n.getLong()); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (n.getType() != Formattable::kLong || 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0"); 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 8646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errcheckln(status, (UnicodeString)"FAIL: Status " + u_errorName(status)); 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(Exception e) { 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"Exception caught: " + e); 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 87050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 873b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientAffixTestCases[] = { 874103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1)", 875103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1)", 876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1 )", 877103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1 )" 878b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientMinusTestCases[] = { 881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-5", 882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u22125", 883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u20105" 884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientCurrencyTestCases[] = { 887103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1,000", 888103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1,000", 889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1000", 890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1000", 891103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1 000.00", 892103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1 000.00", 893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1\\u00A0000.00", 894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "1000.00" 895b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 89759d709d503bab6e2b61931737e662dd293b40578ccornelius// changed from () to - per cldrbug 5674 898b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativeCurrencyTestCases[] = { 89959d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1,000", 90059d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1,000", 90159d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1000", 90259d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1000", 90359d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1 000.00", 90459d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1 000.00", 90559d709d503bab6e2b61931737e662dd293b40578ccornelius "- $ 1,000.00 ", 90659d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1\\u00A0000.00", 90759d709d503bab6e2b61931737e662dd293b40578ccornelius "-1000.00" 908b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 910b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientPercentTestCases[] = { 911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25%", 912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25%", 913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25 %", 914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25 %", 915b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25\\u00A0%", 916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25" 917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativePercentTestCases[] = { 920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25%", 921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " -25%", 922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25%", 923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25 %", 924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25 %", 925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25 %", 926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25\\u00A0%", 927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25", 928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25" 929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *strictFailureTestCases[] = { 932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " 1000", 933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "10,00", 934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1,000,.0" 935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define ARRAY_SIZE(array) ((int32_t) (sizeof (array) / sizeof(array[0]))) 938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Test lenient parsing. 941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid 943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormatTest::TestLenientParse(void) 944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *format = new DecimalFormat("(#,##0)", status); 947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Formattable n; 948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (format == NULL || U_FAILURE(status)) { 950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create DecimalFormat (#,##0) - %s", u_errorName(status)); 951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->setLenient(TRUE); 953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientAffixTestCases); t += 1) { 954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientAffixTestCases[t]); 955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 956b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->parse(testCase, n, status); 957b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || 960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1) { 961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\""); 962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete format; 966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale en_US("en_US"); 969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale sv_SE("sv_SE"); 970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *mFormat = NumberFormat::createInstance(sv_SE, UNUM_DECIMAL, status); 972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (sv_SE, UNUM_DECIMAL) - %s", u_errorName(status)); 975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) { 978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat = NumberFormat::createInstance(en_US, UNUM_DECIMAL, status); 992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 993b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 994b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_DECIMAL) - %s", u_errorName(status)); 995b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 996b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) { 998b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 999b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1000b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 1001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1003b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 1004b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 1005b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1006b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 1009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *cFormat = NumberFormat::createInstance(en_US, UNUM_CURRENCY, status); 1012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (cFormat == NULL || U_FAILURE(status)) { 1014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_CURRENCY) - %s", u_errorName(status)); 1015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->setLenient(TRUE); 1017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientCurrencyTestCases); t += 1) { 1018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientCurrencyTestCases[t]); 1019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\""); 1026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativeCurrencyTestCases); t += 1) { 1031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativeCurrencyTestCases[t]); 1032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != -1000) { 1038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\""); 1039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete cFormat; 1044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *pFormat = NumberFormat::createPercentInstance(en_US, status); 1047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (pFormat == NULL || U_FAILURE(status)) { 1049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat::createPercentInstance (en_US) - %s", u_errorName(status)); 1050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->setLenient(TRUE); 1052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientPercentTestCases); t += 1) { 1053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientPercentTestCases[t]); 1054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != 0.25) { 1060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\""); 1061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativePercentTestCases); t += 1) { 1066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativePercentTestCases[t]); 1067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != -0.25) { 1073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\""); 1074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete pFormat; 1079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1081b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Test cases that should fail with a strict parse and pass with a 1082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // lenient parse. 1083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *nFormat = NumberFormat::createInstance(en_US, status); 1084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (nFormat == NULL || U_FAILURE(status)) { 1086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US) - %s", u_errorName(status)); 1087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // first, make sure that they fail with a strict parse 1089b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) { 1090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (! U_FAILURE(status)) { 1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // then, make sure that they pass with a lenient parse 1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->setLenient(TRUE); 1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) { 1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete nFormat; 1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// ------------------------------------- 1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method. 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestRounding487(void) 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *nf = NumberFormat::createInstance(status); 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createInstance()"); 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00159999, 4, "0.0016"); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00995, 4, "0.01"); 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.3995, 3, "12.4"); 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.4999, 0, "12"); 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, - 19.5, 0, "-20"); 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value. 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSecondaryGrouping(void) { 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols ct"); 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat f("#,##,###", US, status); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat ct"); 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,34,56,789"); 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,##,###"); 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.applyPattern("#,###", status); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.setSecondaryGroupingSize(4); 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,3456,789"); 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,####,###"); 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status); 116727f654740f2a26ad62a5c155af9199af9e69b889claireho CHECK_DATA(status, "createInstance(hi_IN)"); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = (int32_t)1876543210L; 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g->format(l, out); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g; 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // expect "1,87,65,43,210", but with Hindi digits 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890123 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = TRUE; 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (out.length() != 14) { 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<out.length(); ++i) { 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool expectGroup = FALSE; 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (i) { 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectGroup = TRUE; 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Later -- fix this to get the actual grouping 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // character from the resource bundle. 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isGroup = (out.charAt(i) == 0x002C); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isGroup != expectGroup) { 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) { 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL Expected " + l + 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" + 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok " + l + 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"" + 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestWhiteSpaceParsing(void) { 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), ec); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("a b#0c ", US, ec); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 12146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: Constructor - %s", u_errorName(ec)); 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currencies whose display name is a ChoiceFormat. 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestComplexCurrency() { 122650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// UErrorCode ec = U_ZERO_ERROR; 1228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Locale loc("kn", "IN", ""); 1229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec); 1230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// if (U_SUCCESS(ec)) { 1231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00")); 1232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Use .00392625 because that's 2^-8. Any value less than 0.005 is fine. 1233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky 1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00")); 1235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50")); 1236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00")); 1237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00")); 1238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } else { 1239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// errln("FAIL: getCurrencyInstance(kn_IN)"); 1240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } 1241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// delete fmt; 1242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 124650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected) 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf.setMaximumFractionDigits(maxFractionDigits); 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; nf.format(x, out); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected); 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestExponent(void) { 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt1(UnicodeString("0.###E0"), US, status); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E0)"); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status); 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E+0)"); 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt1, n, "1.234E3"); 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt2, n, "1.234E+3"); 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt1, "1.234E+3", n); // Either format should parse "E+3" 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestScientific(void) { 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test pattern round-trip 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000", 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0.###E0;[0.###E0]" }; 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t PAT_length = (int32_t)(sizeof(PAT) / sizeof(PAT[0])); 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t DIGITS[] = { 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // min int, max int, min frac, max frac 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1, 0, 0, // "#E0" 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 4, // "0.####E0" 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2, 2, 3, 3, // "00.000E00" 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 3, 0, 4, // "##0.####E000" 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 3, // "0.###E0;[0.###E0]" 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<PAT_length; ++i) { 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(PAT[i]); 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat df(pat, US, status); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.toPattern(pat2); 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == pat2) { 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok Pattern rt \"") + 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL Pattern rt \"") + 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure digit counts match what we expect 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (df.getMinimumIntegerDigits() != DIGITS[4*i] || 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() != DIGITS[4*i+1] || 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() != DIGITS[4*i+2] || 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() != DIGITS[4*i+3]) { 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"" + pat + 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" min/max int; min/max frac = ") + 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumIntegerDigits() + "/" + 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() + ";" + 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() + "/" + 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() + ", expect " + 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i] + "/" + 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+1] + ";" + 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+2] + "/" + 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+3]); 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test the constructor for default locale. We have to 132850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // manually set the default locale, as there is no 132950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // guarantee that the default locale has the same 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // scientific format. 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale def = Locale::getDefault(); 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getUS(), status); 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(status), 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(def, status); 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345E4", status); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1E4", status); 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getUS(), status), 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E3", status); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.00001, 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.35E3", status); 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12345, 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.345E3", status); 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status), 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1,2345678901E4", status); 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.####E0", US, status), 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789.12345e-9, 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "789.12E-9", status); 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 780.e-9, 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "780E-9", status); 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat(".###E0", US, status), 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45678.0, 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".457E5", status); 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(".###E0", US, status), 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 0, 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".0E0", status); 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat[] { new DecimalFormat("#E0", US), 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("##E0", US), 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("####E0", US), 137550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("0E0", US), 137650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("00E0", US), 137750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("000E0", US), 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(45678000), 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new String[] { "4.5678E7", 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "45.678E6", 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "4567.8E4", 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "5E7", 138450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "46E6", 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "457E5", 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4.5678E7", status); 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##E0", US, status), 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "45.678E6", status); 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("####E0", US, status), 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4567.8E4", status); 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "5E7", status); 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("00E0", US, status), 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "46E6", status); 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("000E0", US, status), 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "457E5", status); 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("###E0", US, status), 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.0000123), "12.3E-6", 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.000123), "123E-6", 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.00123), "1.23E-3", 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.0123), "12.3E-3", 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.123), "123E-3", 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1.23), "1.23E0", 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(12.3), "12.3E0", 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(123), "123E0", 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1230), "1.23E3", 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0000123, "12.3E-6", status); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.000123, "123E-6", status); 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00123, "1.23E-3", status); 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0123, "12.3E-3", status); 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.123, "123E-3", status); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.23, "1.23E0", status); 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12.3, "12.3E0", status); 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123.0, "123E0", status); 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230.0, "1.23E3", status); 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0.#E+00", US, status), 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.00012), "1.2E-04", 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(12000), "1.2E+04", 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00012, "1.2E-04", status); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12000, "1.2E+04", status); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPad(void) { 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, "^-1.3", status); 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0E0______ g-m/s^2", status); 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333.333E-3_ g-m/s^2", status); 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0______ g-m/s^2", status); 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0.33333__ g-m/s^2", status); 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding before a sign 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)"; 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "xxxxxxxxxx(10.0)", status); 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"xxxxxxx(1,000.0)", status); 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"xxx(1,000,000.0)", status); 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "xxxxxxxx(100.37)", status); 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "xxxxx(10,456.37)", status); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "xx(1,120,456.37)", status); 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "xxxxxxxxxxxx10.0", status); 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"xxxxxxxxx1,000.0", status); 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"xxxxx1,000,000.0", status); 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "xxxxxxxxxx100.37", status); 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "xxxxxxx10,456.37", status); 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "xxxx1,120,456.37", status); 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "xx112,045,600.37", status); 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding between a sign and a number 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)"; 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "(10.0xxxxxxxxxx)", status); 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"(1,000.0xxxxxxx)", status); 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"(1,000,000.0xxx)", status); 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "(100.37xxxxxxxx)", status); 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "(10,456.37xxxxx)", status); 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "(1,120,456.37xx)", status); 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "10.0xxxxxxxxxxxx", status); 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"1,000.0xxxxxxxxx", status); 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"1,000,000.0xxxxx", status); 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "100.37xxxxxxxxxx", status); 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "10,456.37xxxxxxx", status); 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "1,120,456.37xxxx", status); 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "112,045,600.37xx", status); 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing the setPadCharacter(UnicodeString) and getPadCharacterString() 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString padString("P"); 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString); 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter((UnicodeString)"^"); 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^"); 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //commented untill implementation is complete 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fmt.setPadCharacter((UnicodeString)"^^^"); 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^"); 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.remove(); 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0061); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0302); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000}; 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern(patternChars); 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString); 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPatterns2(void) { 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 157950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar hat = 0x005E; /*^*/ 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat); 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat); 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat); 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat); 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^$#", ILLEGAL); 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^$", ILLEGAL); 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix, 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, (UChar)0x0078 /*x*/); 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix, 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, (UChar)0x0078 /*x*/); 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix, 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10, (UChar)0x0061 /*a*/); 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern("AA#,##0.00ZZ", status); 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(hat); 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(10); 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforePrefix); 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "*^AA#,##0.00ZZ"); 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix); 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00*^ZZ"); 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterSuffix); 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00ZZ*^"); 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exp("AA*^#,##0.00ZZ", ""); 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(12); 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterPrefix); 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, exp); 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(13); 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^##,##0.00ZZ"); 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(14); 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 345678901234 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^###,##0.00ZZ"); 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(15); 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012345 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(16); 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123456 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^#,###,##0.00ZZ"); 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSurrogateSupport(void) { 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols custom(Locale::getUS(), status); 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal"); 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus"); 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus "); 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent"); 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternStr("*\\U00010000##.##", ""); 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", ""); 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), expStr, status); 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", custom, status), 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##.##", custom, status), 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, " minus 1decimal3", status); 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0exponent0 g-m/s^2", status); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333decimal333exponent minus 3 g-m/s^2", status); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0 g-m/s^2", status); 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0decimal33333 g-m/s^2", status); 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString zero((UChar32)0x10000); 167027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString one((UChar32)0x10001); 167127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString two((UChar32)0x10002); 167227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString five((UChar32)0x10005); 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); 167427f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, one); 167527f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kTwoDigitSymbol, two); 167627f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kFiveDigitSymbol, five); 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", ""); 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.000", custom, status), 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.25, expStr, status); 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30); 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money"); 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator"); 1686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'"); 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", ""); 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent"); 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = "'You''ve lost ' -0.00 %' of your money today'"; 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus You've lost minus 2000decimal00 percent of your money today", ""); 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyPatterns(void) { 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, locCount; 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* locs = NumberFormat::getAvailableLocales(locCount); 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<locCount; ++i) { 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec); 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec)); 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure currency formats do not have a variable number 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // of fraction digits 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min = nf->getMinimumFractionDigits(); 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t max = nf->getMaximumFractionDigits(); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != max) { 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a, b; 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.125, b); 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " min fraction digits != max fraction digits; " 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + escape(a) + 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; x 1.125 => " + escape(b)); 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure EURO currency formats have exactly 2 fraction digits 172627f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat* df = dynamic_cast<DecimalFormat*>(nf); 172727f654740f2a26ad62a5c155af9199af9e69b889claireho if (df != NULL) { 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, df->getCurrency()) == 0) { 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != 2 || max != 2) { 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a; 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is a EURO format but it does not have 2 fraction digits; " 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(a)); 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRegCurrency(void) { 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar USD[4]; 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", USD, 4, &status); 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar YEN[4]; 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("ja_JP", YEN, 4, &status); 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar TMP[4]; 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar QQQ[] = {0x51, 0x51, 0x51, 0}; 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 17546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Unable to get currency for locale, error %s", u_errorName(status)); 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status); 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status); 176050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", TMP, 4, &status); 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(YEN, TMP) != 0) { 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return YEN registered for en_US"); 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO"); 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 177050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status); 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fallbackLen) { 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: tried to fallback en_XX_BAR"); 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 177650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enkey, &status)) { 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enkey"); 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucurr_forLocale("en_US", TMP, 4, &status); 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return USD for en_US after unregister of en_US"); 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 178650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US"); 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 179150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_BLAH", TMP, 4, &status); 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: could not find USD for en_US_BLAH after unregister of en"); 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 179750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enUSEUROkey, &status)) { 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enUSEUROkey"); 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, TMP) != 0) { 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO"); 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyNames(void) { 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Do a basic check of getName() 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // USD { "US$", "US Dollar" } // 04/04/1792- 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/ 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/ 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/ 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/ 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isChoiceFormat; 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 18206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru const UBool possibleDataError = TRUE; 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 182250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // THE LOCALE DATA before diving into the code. 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(SYMBOL_NAME)", 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(LONG_NAME)", 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US Dollar"), 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 18336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1836c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en", 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en_CA", 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1847103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius assertEquals("USD.getName(SYMBOL_NAME) in en_AU", 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US$"), 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en_AU", 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1854c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en_AU", 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USX.getName(LONG_NAME)", 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("USX"), 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USX, "en_US", 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 18636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_getName", ec); 186650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default or fallback warning is being returned. JB 4239. 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat, 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 187250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (es_ES fallback)", 18736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat, 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 187750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (zh_TW fallback)", 18786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat, 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 188250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (en_US default)", 188350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_USING_DEFAULT_WARNING == ec || U_USING_FALLBACK_WARNING == ec, TRUE); 188450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucurr_getName(CAD, "ti", UCURR_LONG_NAME, &isChoiceFormat, 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 1887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho assertTrue("ucurr_getName (ti default)", 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 188950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default warning is being returned when falling back to root. JB 4536. 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat, 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 189350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (cy default to root)", 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 189550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO add more tests later 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyUnit(void){ 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1902fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD[] = {63, 63, 63, 0}; /*???*/ 1903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD2[] = {63, 63, 65, 0}; /*???*/ 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu(USD, ec); 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyUnit", ec); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar * r = cu.getISOCurrency(); // who is the buffer owner ? 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("getISOCurrency()", USD, r); 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu2(cu); 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(cu2 == cu)){ 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit copy constructed object should be same"); 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone(); 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*cu3 == cu)){ 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit cloned object should be same"); 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1919fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad(BAD, ec); 1920fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 1921fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (cu.getIndex() == bad.getIndex()) { 1922fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of different currencies should differ."); 1923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1924fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad2(BAD2, ec); 1925fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 1926fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad2.getIndex() != bad.getIndex()) { 1927fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of unrecognized currencies should be the same."); 1928fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1929fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad == bad2) { 1930fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Different unrecognized currencies should not be equal."); 1931fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1932fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius bad = bad2; 1933fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad != bad2) { 1934fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Currency unit assignment should be the same."); 1935fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cu3; 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyAmount(void){ 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca(9, USD, ec); 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyAmount", ec); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca2(ca); 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount copy constructed object should be same"); 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ca2=ca; 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount assigned object should be same"); 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 195450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone(); 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*ca3 == ca)){ 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount cloned object should be same"); 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ca3; 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSymbolsWithBadLocale(void) { 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locDefault; 1964103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius static const char *badLocales[] = { 1965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length < ULOC_FULLNAME_CAPACITY 1966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME", 1967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length > ULOC_FULLNAME_CAPACITY 1969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME" 1970103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; // expect U_USING_DEFAULT_WARNING for both 1971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unsigned int i; 1973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (i = 0; i < sizeof(badLocales) / sizeof(char*); i++) { 1974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName = badLocales[i]; 1975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale locBad(localeName); 1976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString intlCurrencySymbol((UChar)0xa4); 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1979103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius intlCurrencySymbol.append((UChar)0xa4); 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1981103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 1982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locBad, status); 1983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 1984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormatSymbols mySymbols(status); 1985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (status != U_USING_DEFAULT_WARNING) { 1986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols should return U_USING_DEFAULT_WARNING."); 1987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { 1989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols does not have the right locale.", locBad.getName()); 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1991103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; 1992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { 1993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum); 1994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString)); 1995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (symbolString.length() == 0 1996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol 1997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) 1998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 1999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); 2000103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locDefault, status); 2005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behave the same, except for memory ownership semantics. (No 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * version of this test on Java, since Java has only one method.) 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestAdoptDecimalFormatSymbols(void) { 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "Fail: DecimalFormatSymbols constructor - %s", u_errorName(ec)); 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(" #,##0.00"); 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.insert(0, (UChar)0x00A4); 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, sym, ec); 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "$ 2,350.75") { 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 203527f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: " + str + ", expected $ 2,350.75"); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptDecimalFormatSymbols(sym); 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 205227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(pat, sym, ec); 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 206650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym2(Locale::getUS(), ec); 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.setDecimalFormatSymbols(sym2); 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.format(2350.75, str); 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 208027f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPerMill() { 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(ctou("###.###\\u2030"), ec); 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("DecimalFormat ct", ec)) return; 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###\\u2030", 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctou("485.7\\u2030"), fmt.format(0.4857, str)); 209150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), ec); 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m")); 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2("", sym, ec); 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.applyLocalizedPattern("###.###m", ec); 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("setup", ec)) return; 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###m", 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "485.7m", fmt2.format(0.4857, str)); 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generic test for patterns that should be legal/illegal. 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestIllegalPatterns() { 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test cases: 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "-:" for illegal patterns 2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "+:" for legal patterns 2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* DATA[] = { 2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Unquoted special characters in the suffix are illegal 2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "-:000.000|###", 2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "+:000.000'|###'", 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; DATA[i]; ++i) { 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat=DATA[i]; 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool valid = (*pat) == '+'; 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat += 2; 2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, ec); // locale doesn't matter here 2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec) == valid) { 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: pattern \"%s\": %s", 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, u_errorName(ec)); 2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 21256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: pattern \"%s\" should have %s; got %s", 2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, (valid?"succeeded":"failed"), 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* KEYWORDS[] = { 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*0*/ "ref=", // <reference pattern to parse numbers> 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*1*/ "loc=", // <locale for formats> 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*2*/ "f:", // <pattern or '-'> <number> <exp. string> 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*3*/ "fp:", // <pattern or '-'> <number> <exp. string> <exp. number> 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*4*/ "rt:", // <pattern or '-'> <(exp.) number> <(exp.) string> 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*5*/ "p:", // <pattern or '-'> <string> <exp. number> 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*6*/ "perr:", // <pattern or '-'> <invalid string> 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'> 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return an integer representing the next token from this 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iterator. The integer will be an index into the given list, or 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -1 if there are no more tokens, or -2 if the token is not on 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the list. 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t keywordIndex(const UnicodeString& tok) { 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; KEYWORDS[i]!=0; ++i) { 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok==KEYWORDS[i]) { 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a CurrencyAmount using the given NumberFormat, with 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the 'delim' character separating the number and the currency. 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void parseCurrencyAmount(const UnicodeString& str, 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NumberFormat& fmt, 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar delim, 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& result, 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ec) { 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num, cur; 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = str.indexOf(delim); 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(0, i, num); 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(i+1, INT32_MAX, cur); 2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(num, n, ec); 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec)); 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCases() { 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TextFile reader("NumberFormatTestCases.txt", "UTF8", ec); 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 21846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't open NumberFormatTestCases.txt"); 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TokenIterator tokens(&reader); 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en", "US", ""); 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *ref = 0, *fmt = 0; 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *mfmt = 0; 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat, tok, mloc, str, out, where, currAmt; 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) { 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru where = UnicodeString("(") + tokens.getLineNumber() + ") "; 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cmd = keywordIndex(tok); 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (cmd) { 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ref= <reference pattern> 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref = new DecimalFormat(tok, 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormatSymbols(Locale::getUS(), ec), ec); 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error constructing DecimalFormat"); 2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto error; 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // loc= <locale> 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 221727f654740f2a26ad62a5c155af9199af9e69b889claireho loc = Locale::createFromName(CharString().appendInvariantChars(tok, ec).data()); 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: // f: 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: // fp: 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: // rt: 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: // p: 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = tok; 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec); 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec)); 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 2 || cmd == 3 || cmd == 4) { 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // f: <pattern or '-'> <number> <exp. string> 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fp: <pattern or '-'> <number> <exp. string> <exp. number> 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // rt: <pattern or '-'> <number> <string> 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num; 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".format(" + num + ")", 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, fmt->format(n, out.remove(), ec)); 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { // fp: 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd != 2) { // != f: 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, m, ec); 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 226250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // p: <pattern or '-'> <string to parse> <exp. number> 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expstr; 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(expstr, ec)) goto error; 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable exp, n; 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(expstr, exp, ec); 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, n, ec); 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exp, n); 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: // fpc: 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mloc = tok; 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt = MeasureFormat::createCurrencyFormat( 228427f654740f2a26ad62a5c155af9199af9e69b889claireho Locale::createFromName( 228527f654740f2a26ad62a5c155af9199af9e69b889claireho CharString().appendInvariantChars(mloc, ec).data()), ec); 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec)); 2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2294f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (mfmt == NULL) { 2295f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("FAIL: " + where + "Loc \"" + mloc + "\": skip case using previous locale, no valid MeasureFormat"); 2296f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2297f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2298f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2299f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")", 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, mfmt->format(n, out.remove(), ec)); 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt->parseObject(str, m, ec); 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrency", ec)) { 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")", 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 2319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: source " + str); 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // perr: <pattern or '-'> <invalid string> 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Under construction"); 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: { 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // pat: <pattern> <exp. toPattern, or '-' or 'err'> 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testpat; 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exppat; 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(testpat, ec)) goto error; 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(exppat, ec)) goto error; 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool err = exppat == "err"; 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool existingPat = FALSE; 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testpat == "-") { 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid command \"pat: - err\""); 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru existingPat = TRUE; 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testpat = pat; 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exppat == "-") exppat = testpat; 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* f = 0; 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec2 = U_ZERO_ERROR; 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (existingPat) { 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = fmt; 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = new DecimalFormat(testpat, ec2); 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec2)) { 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid pattern \"" + testpat + 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" was accepted"); 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + testpat + "\".toPattern()", 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exppat, f->toPattern(pat2)); 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + where + "Invalid pattern \"" + testpat + 2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Valid pattern \"" + testpat + 2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!existingPat) delete f; 2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } break; 2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case -1: 2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Unknown command \"" + tok + "\""); 2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error: 2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec)) { 2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Unexpected EOF"); 2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 23836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec)); 2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done: 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods 2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) { 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == b.getType()) { 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a == b; 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == Formattable::kLong) { 2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kInt64) { 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getLong() == b.getLong(); 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 240650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long 2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kDouble) { 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double) b.getLong(); 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kInt64) { 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double)b.getInt64(); 2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kInt64) { 2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getLong(); 2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getDouble(); 2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, n, str, FALSE); 2427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, str, n); 2428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, n, str, FALSE); 2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, str, n); 2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n, 2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, 2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 243927f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 244027f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(*fmt, n, exp); 2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable num; 2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, num, status); 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 245227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status)); 2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (equalValue(num, n)) { 2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + str + "\" x " + 2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num)); 2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 246227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL \"") + str + "\" x " + 2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable num; 2471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(str, num, status); 2472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + str + "\""); 2474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (equalValue(num, n)) { 2477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln(UnicodeString("Ok \"") + str + " = " + 2478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num)); 2479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL \"") + str + " = " + 2481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n, 2486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw; 2488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru FieldPosition pos; 2489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n, saw, pos, status); 2491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw == exp) { 249350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(UnicodeString("Ok ") + toString(n) + 2494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\""); 2496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // We should be able to round-trip the formatted string => 2497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // number => string (but not the other way around: number 2498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // => string => number2, might have number2 != number): 2499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (rt) { 2500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable n2; 2501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(exp, n2, status); 2502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\""); 2504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw2; 2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw2 != exp) { 2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " => \"" + saw2 + "\""); 2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 251550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL ") + toString(n) + 2516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 2518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n, 2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw; 2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n, saw, pos, status); 2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw == exp) { 2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok ") + toString(n) + " x " + 2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\""); 2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // We should be able to round-trip the formatted string => 2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // number => string (but not the other way around: number 2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // => string => number2, might have number2 != number): 2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rt) { 2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n2; 2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(exp, n2, status); 2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 254127f654740f2a26ad62a5c155af9199af9e69b889claireho errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status)); 2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw2; 2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw2 != exp) { 2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => \"" + saw2 + "\""); 2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 255327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL ") + toString(n) + " x " + 2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n, 2560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString& exp, UBool rt, 2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 256227f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 256327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(*fmt, n, exp, rt); 2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale, 2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double value, const UnicodeString& string) { 2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat& fmt = * (DecimalFormat*) &nf; 2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar DEFAULT_CURR[] = {45/*-*/,0}; 2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar curr[4]; 2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(curr, DEFAULT_CURR); 2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*locale.getLanguage() != 0) { 2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale(locale.getName(), curr, 4, &ec); 2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_forLocale", ec); 2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr, ec); 2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("DecimalFormat::setCurrency", ec); 2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr); //Deprecated variant, for coverage only 2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(value, s); 2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020); 2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Default display of the number yields "1234.5599999999999" 2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // instead of "1234.56". Use a formatter to fix this. 259050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* f = 2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createInstance(Locale::getUS(), ec); 2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v; 2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Oops; bad formatter. Use default op+= display. 2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru v = (UnicodeString)"" + value; 2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setMaximumFractionDigits(4); 2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setGroupingUsed(FALSE); 2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->format(value, v); 2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s == string) { 2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s)); 2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) + 2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + prettify(string)); 2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) { 2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pat); 2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == exp) { 2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\""); 2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\""); 2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos) { 2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, 0, (UnicodeString)""); 2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, UChar pad) { 2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, width, UnicodeString(pad)); 2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, const UnicodeString& pad) { 2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t apos = 0, awidth = 0; 2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString apadStr; 2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern(pat, status); 2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = fmt.getPadPosition(); 2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = fmt.getFormatWidth(); 2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr=fmt.getPadCharacterString(); 2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = -1; 2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = width; 2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr = pad; 2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (apos == pos && awidth == width && apadStr == pad) { 2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString infoStr; 2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos == ILLEGAL) { 2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr; 2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\" pos=" + apos + infoStr); 2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos + 2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " width=" + awidth + " pad=" + apadStr + 2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + pos + " " + width + " " + pad); 2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 265659d709d503bab6e2b61931737e662dd293b40578ccornelius 265759d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale - FIXME 265859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() { 265959d709d503bab6e2b61931737e662dd293b40578ccornelius/* 2660fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar JPY[] = {0x4A, 0x50, 0x59, 0}; 2661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar CNY[] = {0x43, 0x4E, 0x59, 0}; 266259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 266359d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmt( 266459d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getUS(), status)); 266559d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 266659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Could not create number format instance."); 266759d709d503bab6e2b61931737e662dd293b40578ccornelius return; 266859d709d503bab6e2b61931737e662dd293b40578ccornelius } 266959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 267059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\u00A51,235"); 267159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__); 267259d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\uFFE51,235"); 267359d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 267459d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, CNY, 1235, "CN\\u00A51,235"); 267559d709d503bab6e2b61931737e662dd293b40578ccornelius 267659d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtTW( 267759d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status)); 267859d709d503bab6e2b61931737e662dd293b40578ccornelius 267959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__); 268059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\u00A51,235"); 268159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__); 268259d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\uFFE51,235"); 268359d709d503bab6e2b61931737e662dd293b40578ccornelius 268459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtJP( 268559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getJapan(), status)); 268659d709d503bab6e2b61931737e662dd293b40578ccornelius 268759d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__); 268859d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\u00A51,235"); 268959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__); 269059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\uFFE51,235"); 269159d709d503bab6e2b61931737e662dd293b40578ccornelius 269259d709d503bab6e2b61931737e662dd293b40578ccornelius // more.. 269359d709d503bab6e2b61931737e662dd293b40578ccornelius*/ 269459d709d503bab6e2b61931737e662dd293b40578ccornelius} 269559d709d503bab6e2b61931737e662dd293b40578ccornelius 269659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) { 269759d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 269859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString utext = ctou(text); 269959d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos)); 270059d709d503bab6e2b61931737e662dd293b40578ccornelius if (!ppos.getIndex()) { 270159d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Parse of ") + utext + " should have succeeded."); 270259d709d503bab6e2b61931737e662dd293b40578ccornelius return; 270359d709d503bab6e2b61931737e662dd293b40578ccornelius } 270459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 270559d709d503bab6e2b61931737e662dd293b40578ccornelius 270659d709d503bab6e2b61931737e662dd293b40578ccornelius char theInfo[100]; 270759d709d503bab6e2b61931737e662dd293b40578ccornelius sprintf(theInfo, "For locale %s, string \"%s\", currency ", 270859d709d503bab6e2b61931737e662dd293b40578ccornelius fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(), 270959d709d503bab6e2b61931737e662dd293b40578ccornelius text); 271059d709d503bab6e2b61931737e662dd293b40578ccornelius u_austrcpy(theInfo+uprv_strlen(theInfo), currency); 271159d709d503bab6e2b61931737e662dd293b40578ccornelius 271259d709d503bab6e2b61931737e662dd293b40578ccornelius char theOperation[100]; 271359d709d503bab6e2b61931737e662dd293b40578ccornelius 271459d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 271559d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check amount:"); 271659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(theOperation, amount == currencyAmount->getNumber().getDouble(status)); 271759d709d503bab6e2b61931737e662dd293b40578ccornelius 271859d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 271959d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check currency:"); 272059d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(theOperation, currency, currencyAmount->getISOCurrency()); 272159d709d503bab6e2b61931737e662dd293b40578ccornelius} 272259d709d503bab6e2b61931737e662dd293b40578ccornelius 272359d709d503bab6e2b61931737e662dd293b40578ccornelius 2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){ 2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID = "pt_PT@currency=PTE"; 2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc(localeID); 2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0\\u200B")); // per cldrbug 7670 2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status); 2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 27326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status)); 2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 273750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 273850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost() 2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2749103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API 2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Win32NumberTest::testLocales(this); 2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale loc("en_US@compat=host"); 2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (UNumberFormatStyle k = UNUM_DECIMAL; 2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) { 2755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2756b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status)); 2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (!NumberFormat::isStyleSupported(k)) { 2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (status != U_UNSUPPORTED_ERROR) { 2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAIL: expected style %d to be unsupported - %s", 2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 2761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (full.isNull() || U_FAILURE(status)) { 2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("FAIL: Can't create number instance of style %d for host - %s", 2766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 2767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString result1; 2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable number(10.00); 2771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->format(number, result1, status); 2772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't format for host"); 2774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable formattable; 2777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->parse(result1, formattable, status); 2778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't parse for host"); 2780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone() 2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Verify that a cloned formatter gives the same results 2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and is useable after the original has been deleted. 2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This is mainly important on Windows. 2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en_US@compat=host"); 2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate now = Calendar::getNow(); 2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *full = NumberFormat::createInstance(loc, status); 2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (full == NULL || U_FAILURE(status)) { 27976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status)); 2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result1; 2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full->format(now, result1, status); 2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *fullClone = full->clone(); 2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete full; 2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full = NULL; 2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result2; 2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fullClone->format(now, result2, status); 2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: format failure."); 2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result1 != result2) { 2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Clone returned different result from non-clone."); 2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fullClone; 2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat() 2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test is here to increase code coverage. 2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *cloneObj; 2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable toFormat, result; 2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0}; 2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveDefaultLocale = Locale::getDefault(); 2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( Locale::getUK(), status ); 2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("couldn't set default Locale!"); 2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status); 2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( saveDefaultLocale, status ); 2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 28366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Status %s", u_errorName(status)); 2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj = (MeasureFormat *)measureObj->clone(); 2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cloneObj == NULL) { 2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone doesn't work"); 2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status)); 2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->format(toFormat, str, status); 2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->parseObject(str, result, status); 2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->format(toFormat, str, status); 2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->parseObject(str, result, status); 2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*measureObj != *cloneObj) { 2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Cloned object is not equal to the original object"); 2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete measureObj; 2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cloneObj; 2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_USELESS_COLLATOR_ERROR; 2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (MeasureFormat::createCurrencyFormat(status) != NULL) { 2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("createCurrencyFormat should have returned NULL."); 2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */ 2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() { 2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 28816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int roundingIncrements[]={1, 2, 5, 20, 50, 100}; 2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int testValues[]={0, 300}; 2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int j=0; j<2; j++) { 2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) { 2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingMode((DecimalFormat::ERoundingMode)mode); 2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int increment=0; increment<6; increment++) { 2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double base=testValues[j]; 2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double rInc=roundingIncrements[increment]; 2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rInc=1.000000000/rInc; 2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2900c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete df; 2901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2903103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() { 2904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius struct { 2906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString pattern; 2907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double testCase; 2908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString expected; 2909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } tests[] = { 2910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" }, 2911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"#50", 1230, (UnicodeString)"1250" } 2912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 2913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t numOfTests = (sizeof(tests)/sizeof(tests[0])); 2914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString result; 2915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 2917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 2919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 2920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2922103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t i = 0; i < numOfTests; i++) { 2923103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius result.remove(); 2924103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2925103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->applyPattern(tests[i].pattern, status); 2926103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2927103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status)); 2928103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2929103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->format(tests[i].testCase, result); 2931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (result != tests[i].expected) { 2933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected); 2934103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2936103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2937103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete df; 2938103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2939103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) { 2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingIncrement(increment); 2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double lastParsed=INT32_MIN; //Intger.MIN_VALUE 2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i=-iterations; i<=iterations;i++) { 2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double iValue=base+(increment*(i*0.1)); 2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double smallIncrement=0.00000001; 2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (iValue!=0) { 2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru smallIncrement*=iValue; 2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //we not only test the value, but some values in a small range around it 2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue-smallIncrement, lastParsed); 2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue, lastParsed); 2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue+smallIncrement, lastParsed); 2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) { 2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString formattedDecimal; 2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double parsed; 2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result; 2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->format(iValue, formattedDecimal, status); 2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error formatting number."); 2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->parse(formattedDecimal, result, status); 2968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error parsing number."); 2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parsed=result.getDouble(); 2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastParsed>parsed) { 2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Rounding wrong direction! %d > %d", lastParsed, parsed); 2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return lastParsed; 2980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2982c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() { 2983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 2985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 2986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormat df(UnicodeString("0"), US, status); 2987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormat(0)"); 298850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2989c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test zero multiplier 2990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t mult = df.getMultiplier(); 2992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(0); 2993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != mult) { 2994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(0) did not ignore its zero input"); 2995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 299650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2997c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test negative multiplier 299850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2999c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-1); 3000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != -1) { 3001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(-1) ignored its negative input"); 3002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 3003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 300450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3005c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1122.123", -1122.123); 3006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1122.123", 1122.123); 3007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1.2", -1.2); 3008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1.2", 1.2); 3009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 301050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Note: the tests with the final parameter of FALSE will not round trip. 301150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The initial numeric value will format correctly, after the multiplier. 301250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Parsing the formatted text will be out-of-range for an int64, however. 301350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The expect() function could be modified to detect this and fall back 301450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // to looking at the decimal parsed value, but it doesn't. 301550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN, "9223372036854775808", FALSE); 301650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN+1, "9223372036854775807"); 301750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)-123, "123"); 301850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)123, "-123"); 3019c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, U_INT64_MAX-1, "-9223372036854775806"); 302050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MAX, "-9223372036854775807"); 3021c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-2); 3023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806"); 302450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2), "-9223372036854775808"); 302550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE); 3026c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-7); 302850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE); 302950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7), "9223372036854775807"); 3030c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800"); 3031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported 3033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // (right now the big numbers get turned into doubles and lose tons of accuracy) 3034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX)); 3035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1)); 3036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2))); 3037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2))); 3038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it 3040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 3045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 3047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * stringToParse; 3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPos; 3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex; 3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool lenient; 3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem; 3052c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 305350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() { 3055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the string to be parsed, parsed position, parsed error index 3057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const TestSpaceParsingItem DATA[] = { 3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // TOTO: Update the following TODOs, some may be handled now 3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, FALSE}, 3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, FALSE}, 3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, FALSE}, 3062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$ 124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 0, 0, FALSE}, // TODO: need to handle space correctly 3067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 0, 3, FALSE}, // TODO: need to handle space correctly 3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // {"124 $", 5, -1, FALSE}, // TODO: OK or not, need currency spacing rule 3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 0, 3, FALSE}, 3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, TRUE}, 3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, TRUE}, 3072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, TRUE}, 3073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 5, -1, TRUE}, 3074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 5, -1, TRUE}, 3075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 6, -1, TRUE}, 3076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124$", 4, -1, TRUE}, // TODO: need to handle trailing currency correctly 3077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 3, -1, TRUE}, 3078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124 $", 5, -1, TRUE}, // TODO: OK or not, need currency spacing rule 3079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 4, -1, TRUE}, 3080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale locale("en_US"); 3083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status); 3084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 3090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ParsePosition parsePosition(0); 3091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse); 3092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPosition = DATA[i].parsedPos; 3093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex = DATA[i].errorIndex; 3094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho foo->setLenient(DATA[i].lenient); 3095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru foo->parse(stringToBeParsed, result, parsePosition); 3097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getIndex() != parsedPosition || 3098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parsePosition.getErrorIndex() != errorIndex) { 3099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")"); 3100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getErrorIndex() == -1 && 310250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result.getType() == Formattable::kLong && 3103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != 124) { 3104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong()); 3105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 3111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword. 3112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 3113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 3114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName; 3115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double value; 3116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool isRBNF; 3117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *expectedResult; 3118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem; 3119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() { 3121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem DATA[] = { 3123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, 3124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" }, 3125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" }, 312659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" }, 3127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35 3128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ar_MA", 1234.567, FALSE, "1.234,567" }, 3129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" }, 3131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" }, 3132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35 3133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" }, 313554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" }, 3136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { NULL, 0, FALSE, NULL } 3137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 3138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode ec; 314027f654740f2a26ad62a5c155af9199af9e69b889claireho 3141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem *item; 3142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (item = DATA; item->localeName != NULL; item++) { 3143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc = Locale::createFromName(item->localeName); 314550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3146fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *origFmt = NumberFormat::createInstance(loc,ec); 3147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(ec)) { 3148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec)); 3149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius continue; 3150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3151fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Clone to test ticket #10682 3152fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *fmt = (NumberFormat *) origFmt->clone(); 3153fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete origFmt; 3154fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (item->isRBNF) { 3157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 3159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt; 3162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Test bogus keyword value 3166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc4 = Locale::createFromName("en_US@numbers=foobar"); 3168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec); 3169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( ec != U_UNSUPPORTED_ERROR ) { 3170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR"); 3171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt4; 3172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 317427f654740f2a26ad62a5c155af9199af9e69b889claireho ec = U_ZERO_ERROR; 317550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns = NumberingSystem::createInstance(ec); 317650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(ec)) { 317750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec)); 317850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 317950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 318027f654740f2a26ad62a5c155af9199af9e69b889claireho if ( ns != NULL ) { 318127f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getDynamicClassID(); 318227f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getStaticClassID(); 318327f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 318427f654740f2a26ad62a5c155af9199af9e69b889claireho errln("FAIL: getInstance() returned NULL."); 318527f654740f2a26ad62a5c155af9199af9e69b889claireho } 318650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns1 = new NumberingSystem(*ns); 318850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ns1 == NULL) { 318950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: NumberSystem copy constructor returned NULL."); 319050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 319150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 319250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns1; 319350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns; 3194103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 319850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() { 3200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][6] = { 3201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the fields in the following test are: 320250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 320350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // currency pattern (with negative pattern), 3204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency number to be formatted, 3205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency symbol name, such as "$" for USD, 3206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency ISO name, such as "USD", 3207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using plural name, such as "US dollars". 3208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for US locale 320950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"}, 321050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"}, 321159d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"}, 3212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for CHINA locale 3213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"}, 3214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"}, 3215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"} 3216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0}; 3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString doubleCurrencyStr(doubleCurrencySign); 3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0}; 3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString tripleCurrencyStr(tripleCurrencySign); 3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* locale = DATA[i][0]; 3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat = ctou(DATA[i][1]); 3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][2]); 3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status); 3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j=1; j<=3; ++j) { 3234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // j represents the number of currency sign in the pattern. 3235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (j == 2) { 3236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr); 3237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (j == 3) { 3238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr); 3239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status); 3242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED init DecimalFormat "); 3244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString s; 3248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ((NumberFormat*) fmt)->format(numberToBeFormat, s); 3249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][j+2] is the currency format result using 3256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 'j' number of currency sign. 3257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString currencyFormatResult = ctou(DATA[i][2+j]); 3258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (s.compare(currencyFormatResult)) { 3259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s); 3260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // mix style parsing 3262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int k=3; k<=5; ++k) { 3263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormat = ctou(DATA[i][k]); 3270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseRes; 3272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(oneCurrencyFormat, parseRes, status); 3273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kDouble && 327550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho parseRes.getDouble() != numberToBeFormat) || 3276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kLong && 3277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseRes.getLong() != numberToBeFormat)) { 3278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " + 3279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i + ", " + j + ", " + k); 3280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 328950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() { 3291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status); 3293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* formats[] = { 3298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1,234.56", // string to be parsed 3299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1,234.56", 3300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1,234.56", 3301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1,234.56 US dollars" 3302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 330327f654740f2a26ad62a5c155af9199af9e69b889claireho const CurrencyAmount* curramt = NULL; 3304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) { 3305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(formats[i]); 330627f654740f2a26ad62a5c155af9199af9e69b889claireho logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed); 3307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru curFmt->parseObject(stringToBeParsed, result, status); 3310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 331150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status)); 331250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if (result.getType() != Formattable::kObject || 331327f654740f2a26ad62a5c155af9199af9e69b889claireho (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL || 331427f654740f2a26ad62a5c155af9199af9e69b889claireho curramt->getNumber().getDouble() != 1234.56 || 331527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD) 331627f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 3317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number "); 331827f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getNumber().getDouble() != 1234.56) { 331927f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble()); 3320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 332127f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getISOCurrency() != ISO_CURRENCY_USD) { 332227f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency()); 3323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 333050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() { 3332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Locale.US 3333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status); 3335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat; 3340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currency = 0x00A4; 3341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 3342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00"); 3343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, sym, status); 3344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse"); 3347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][2] = { 3350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // string to be parsed, the parsed result (number) 335250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1.00", "1"}, 335350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1.00", "1"}, 335450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1.00 US dollar", "1"}, 335550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1,234.56", "1234.56"}, 335650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1,234.56", "1234.56"}, 335750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1,234.56 US dollar", "1234.56"}, 3358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 3360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(DATA[i][0]); 3361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double parsedResult = atof(DATA[i][1]); 3362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(stringToBeParsed, result, status); 3365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kDouble && 3367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getDouble() != parsedResult) || 3368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kLong && 3369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != parsedResult)) { 3370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL parse: Expected " + parsedResult); 3371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 337450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 3375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 337750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() { 3379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 338150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 338750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 338859d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"}, 3389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"}, 339059d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"}, 339159d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"}, 339259d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"}, 3393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"}, 3394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"}, 339559d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 339659d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"}, 339759d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 339859d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "2", "RUB", "2,00\\u00A0\\u0440\\u0443\\u0431.", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 339959d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "5", "RUB", "5,00\\u00A0\\u0440\\u0443\\u0431.", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 3400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test locale without currency information 340150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"}, 3402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test choice format 340359d709d503bab6e2b61931737e662dd293b40578ccornelius {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"}, 3404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 3405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 341050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3411f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) { 3412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 0; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 3413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNumberFormatStyle k = currencyStyles[kIndex]; 3414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 3420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 34226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 342627f654740f2a26ad62a5c155af9199af9e69b889claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 343350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 3436b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 3439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 3441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 3444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 344550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 3446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 3447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 3449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 3451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 3454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 3457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 3458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 3459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 346050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"FAIL: getCurrencyFormat of locale " + 3461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru localeString + " failed roundtripping the number"); 3462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 3463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble()); 3464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 3465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong()); 3466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 347050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 3475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() { 3476b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 347850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 3484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"}, 348559d709d503bab6e2b61931737e662dd293b40578ccornelius {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"}, 3486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_AR", "1", "USD", "US$1,00", "USD1,00", "1,00 d\\u00f3lar estadounidense"}, 3487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"ar_EG", "1", "USD", "US$\\u00a0\\u0661\\u066b\\u0660\\u0660", "USD\\u00a0\\u0661\\u066b\\u0660\\u0660", "\\u0661\\u066b\\u0660\\u0660 \\u062f\\u0648\\u0644\\u0627\\u0631 \\u0623\\u0645\\u0631\\u064a\\u0643\\u064a"}, 348859d709d503bab6e2b61931737e662dd293b40578ccornelius {"fa_CA", "1", "USD", "\\u200e$\\u06f1\\u066b\\u06f0\\u06f0", "\\u200eUSD\\u06f1\\u066b\\u06f0\\u06f0", "\\u200e\\u062f\\u0644\\u0627\\u0631 \\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627\\u06f1\\u066b\\u06f0\\u06f0"}, 3489f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"he_IL", "1", "USD", "1.00\\u00a0$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"}, 349059d709d503bab6e2b61931737e662dd293b40578ccornelius {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"}, 3491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"}, 349259d709d503bab6e2b61931737e662dd293b40578ccornelius {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"}, 3493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00 \\ubbf8\\uad6d \\ub2ec\\ub7ec"}, 3494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00 \\u7c73\\u30c9\\u30eb"}, 349559d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "CNY", "\\uFFE5\\u00a01.00", "CNY\\u00a01.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 349659d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 349759d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 349859d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"}, 349959d709d503bab6e2b61931737e662dd293b40578ccornelius {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"}, 350059d709d503bab6e2b61931737e662dd293b40578ccornelius {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u672c\\u5186"}, 350159d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0439 \\u0440\\u0443\\u0431\\u043B\\u044C"} 3502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 350859d709d503bab6e2b61931737e662dd293b40578ccornelius static const char* currencyStyleNames[] = { 350959d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY", 351059d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_ISO", 351159d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_PLURAL" 351259d709d503bab6e2b61931737e662dd293b40578ccornelius }; 351350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 3515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0; 3516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) { 3517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printf("loop: %d\n", deadloop++); 3518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 351959d709d503bab6e2b61931737e662dd293b40578ccornelius for (uint32_t i=0; i< sizeof(DATA)/sizeof(DATA[0]); ++i) { /* i = test case # - should be i=0*/ 3520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 2; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 352159d709d503bab6e2b61931737e662dd293b40578ccornelius UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */ 3522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 352859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("#%d NumberFormat(%s, %s) Currency=%s\n", 352959d709d503bab6e2b61931737e662dd293b40578ccornelius i, localeString, currencyStyleNames[kIndex], 353059d709d503bab6e2b61931737e662dd293b40578ccornelius currencyISOCode); 353159d709d503bab6e2b61931737e662dd293b40578ccornelius 3532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 35346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 3538b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 354550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 354859d709d503bab6e2b61931737e662dd293b40578ccornelius /* 3549b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 3552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 355950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 3560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 3563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 3565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 356859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("parse(%s)", DATA[i][j]); 3569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 3572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 3573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 3574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 357559d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] + 357659d709d503bab6e2b61931737e662dd293b40578ccornelius "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+". Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]"); 3577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 357859d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble()); 3579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 358059d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong()); 3581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 358259d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)" round-trip would be: " + strBuf); 3583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 358650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 3589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 3591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 3595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() { 3596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[] = { 3597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US DOLLAR", // case in-sensitive 3598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 3599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 3600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 3601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 3602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 360354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "A$1.00", 3604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 3605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 3606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 3607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 3608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 3609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 3610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFN1.00", 3611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ALL1.00", 3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AMD1.00", 3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ANG1.00", 3614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOA1.00", 3615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 3616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 3617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 3621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "ARS1.00", 3622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 3624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 3625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 3626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARS1.00", 3627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 3628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 3629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AUD1.00", 3630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AWG1.00", 3631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 3632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 3633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZN1.00", 363459d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u20132002)1.00", 363559d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan afghani (1927\\u20132002)1.00", 3636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghani1.00", 3637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghanis1.00", 3638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Lek1.00", 3639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek1.00", 3640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek\\u00eb1.00", 3641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dinar1.00", 3642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinar1.00", 3643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinars1.00", 3644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peseta1.00", 3645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran peseta1.00", 3646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran pesetas1.00", 364759d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u20131991)1.00", 364859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u20131999)1.00", 3649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanza1.00", 365059d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u20132000)1.00", 365159d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanza (1977\\u20131991)1.00", 365259d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanza (1995\\u20131999)1.00", 3653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanza1.00", 365459d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanzas (1977\\u20131991)1.00", 365559d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanzas (1995\\u20131999)1.00", 3656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanzas1.00", 365759d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanza (1990\\u20132000)1.00", 365859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanzas (1990\\u20132000)1.00", 3659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austral1.00", 366059d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u20131985)1.00", 3661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Peso1.00", 3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine austral1.00", 3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine australs1.00", 366459d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine peso (1983\\u20131985)1.00", 3665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine peso1.00", 366659d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine pesos (1983\\u20131985)1.00", 3667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine pesos1.00", 3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dram1.00", 3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian dram1.00", 3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian drams1.00", 3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Florin1.00", 3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban florin1.00", 3673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dollar1.00", 3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollar1.00", 3675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollars1.00", 3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schilling1.00", 3677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schilling1.00", 3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schillings1.00", 367959d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u20132006)1.00", 3680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Manat1.00", 368159d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manat (1993\\u20132006)1.00", 3682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manat1.00", 368359d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manats (1993\\u20132006)1.00", 3684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manats1.00", 3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAM1.00", 3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BBD1.00", 3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BDT1.00", 3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEF1.00", 3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGL1.00", 3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BHD1.00", 3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BIF1.00", 3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BMD1.00", 3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BND1.00", 3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOB1.00", 3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRL1.00", 3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BTN1.00", 3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BWP1.00", 3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 3725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYR1.00", 3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZD1.00", 3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dollar1.00", 3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollar1.00", 3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollars1.00", 3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dinar1.00", 3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinar1.00", 3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinars1.00", 3734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Taka1.00", 3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi taka1.00", 3736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi takas1.00", 3737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dollar1.00", 3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollar1.00", 3739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollars1.00", 374059d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian New Ruble (1994\\u20131999)1.00", 3741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Ruble1.00", 374259d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian new ruble (1994\\u20131999)1.00", 374359d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian new rubles (1994\\u20131999)1.00", 3744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian ruble1.00", 3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian rubles1.00", 3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible)1.00", 3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial)1.00", 3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc1.00", 3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (convertible)1.00", 3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (financial)1.00", 3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc1.00", 3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (convertible)1.00", 3753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (financial)1.00", 3754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs1.00", 3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dollar1.00", 3756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollar1.00", 3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollars1.00", 3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dollar1.00", 3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollar1.00", 3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollars1.00", 3761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultrum1.00", 3762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrum1.00", 3763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrums1.00", 3764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdol1.00", 3765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Peso1.00", 3766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdol1.00", 3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdols1.00", 3768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian peso1.00", 3769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian pesos1.00", 3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 3771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 3772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivianos1.00", 3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mark1.00", 377459d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00", 3775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible mark1.00", 3776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible marks1.00", 377759d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinar (1992\\u20131994)1.00", 377859d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinars (1992\\u20131994)1.00", 3779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pula1.00", 3780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pula1.00", 3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pulas1.00", 378259d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzado (1989\\u20131990)1.00", 378359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzado (1986\\u20131989)1.00", 378459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u20131993)1.00", 378559d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u20131986)1.00", 378659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1993\\u20131994)1.00", 3787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Real1.00", 378859d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzado (1989\\u20131990)1.00", 378959d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzados (1989\\u20131990)1.00", 379059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzado (1986\\u20131989)1.00", 379159d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzados (1986\\u20131989)1.00", 379259d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1990\\u20131993)1.00", 379359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiro (1967\\u20131986)1.00", 379459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1993\\u20131994)1.00", 379559d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1990\\u20131993)1.00", 379659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiros (1967\\u20131986)1.00", 379759d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1993\\u20131994)1.00", 3798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian real1.00", 3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian reals1.00", 3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "British Pound Sterling1.00", 3801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "British pound sterling1.00", 380250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "British pounds sterling1.00", 3803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dollar1.00", 3804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollar1.00", 3805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollars1.00", 3806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Lev1.00", 3807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Lev1.00", 3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Leva1.00", 3809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard lev1.00", 3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard leva1.00", 3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian lev1.00", 3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kyat1.00", 3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyat1.00", 3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyats1.00", 3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Franc1.00", 3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian franc1.00", 3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian francs1.00", 3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA$1.00", 3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CAD1.00", 3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA Franc BCEAO1.00", 3823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA Franc BEAC1.00", 3824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA franc BCEAO1.00", 3825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA franc BEAC1.00", 3826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA francs BCEAO1.00", 3827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA francs BEAC1.00", 3828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Franc1.00", 3829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP franc1.00", 3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP francs1.00", 3831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFPF1.00", 3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHF1.00", 3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 3837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 3838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLP1.00", 3840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CNY1.00", 3841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COP1.00", 3842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 3843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 3844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CRC1.00", 3845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 3846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 3847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 3849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 3851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CVE1.00", 3852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CYP1.00", 3853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZK1.00", 3854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Riel1.00", 3855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riel1.00", 3856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riels1.00", 3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dollar1.00", 3858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollar1.00", 3859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollars1.00", 3860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escudo1.00", 3861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudo1.00", 3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudos1.00", 3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dollar1.00", 3864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollar1.00", 3865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollars1.00", 3866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Peso1.00", 386727f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Account (UF)1.00", 3868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean peso1.00", 3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean pesos1.00", 387027f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean unit of account (UF)1.00", 387127f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean units of account (UF)1.00", 387227f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yuan1.00", 3873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chinese yuan1.00", 3874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Peso1.00", 3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian peso1.00", 3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian pesos1.00", 3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian Franc1.00", 3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian franc1.00", 3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian francs1.00", 3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Franc1.00", 3881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese franc1.00", 3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese francs1.00", 3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f3n1.00", 3884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3n1.00", 3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3ns1.00", 3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dinar1.00", 3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kuna1.00", 3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinar1.00", 3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinars1.00", 3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kuna1.00", 3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kunas1.00", 3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Peso1.00", 3893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban peso1.00", 3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban pesos1.00", 3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Pound1.00", 3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pound1.00", 3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pounds1.00", 3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Koruna1.00", 3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic koruna1.00", 3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic korunas1.00", 3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Koruna1.00", 3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard koruna1.00", 3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard korunas1.00", 3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 3908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJF1.00", 3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DKK1.00", 3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DOP1.00", 3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZD1.00", 3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Krone1.00", 3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish krone1.00", 3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish kroner1.00", 3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mark1.00", 3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German mark1.00", 3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German marks1.00", 3918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Franc1.00", 3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian franc1.00", 3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian francs1.00", 3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Peso1.00", 3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican peso1.00", 3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican pesos1.00", 3924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC$1.00", 3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 3926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 3933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 3934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 3935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 3936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 3937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 3938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 3939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESP1.00", 3940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ETB1.00", 3941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EUR1.00", 3942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dollar1.00", 3943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollar1.00", 3944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollars1.00", 3945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Mark1.00", 3946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German mark1.00", 3947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German marks1.00", 3948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucre1.00", 394927f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Value1.00", 3950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucre1.00", 3951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucres1.00", 395227f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian unit of constant value1.00", 395327f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian units of constant value1.00", 3954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Pound1.00", 3955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pound1.00", 3956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pounds1.00", 3957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f3n1.00", 3958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran col\\u00f3n1.00", 3959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran colones1.00", 3960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwele1.00", 3961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean ekwele1.00", 3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakfa1.00", 3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfa1.00", 3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfas1.00", 3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroon1.00", 3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroon1.00", 3967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroons1.00", 3968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Birr1.00", 3969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birr1.00", 3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birrs1.00", 3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Euro1.00", 3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Unit1.00", 3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Unit1.00", 3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Unit1.00", 3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC)1.00", 3976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD)1.00", 3977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite unit1.00", 3978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite units1.00", 3979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency unit1.00", 3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency units1.00", 3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary unit1.00", 3982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary units1.00", 3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBC)1.00", 3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBD)1.00", 3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBC)1.00", 3986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBD)1.00", 3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJD1.00", 3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 3993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Pound1.00", 3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pound1.00", 3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pounds1.00", 3997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dollar1.00", 3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollar1.00", 3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollars1.00", 4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markka1.00", 4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markka1.00", 4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markkas1.00", 400350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "CHF1.00", 4004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Franc1.00", 4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Franc1.00", 4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Franc1.00", 4007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-franc1.00", 4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-francs1.00", 4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French franc1.00", 4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French francs1.00", 4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold franc1.00", 4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold francs1.00", 4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GBP1.00", 4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEL1.00", 4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHS1.00", 4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNF1.00", 4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GYD1.00", 4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalasi1.00", 4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasi1.00", 4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasis1.00", 4040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Larit1.00", 4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lari1.00", 4042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larit1.00", 4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larits1.00", 4044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian lari1.00", 4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian laris1.00", 404659d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u20132007)1.00", 4047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Cedi1.00", 404859d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedi (1979\\u20132007)1.00", 4049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedi1.00", 405059d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedis (1979\\u20132007)1.00", 4051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedis1.00", 4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Pound1.00", 4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pound1.00", 4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pounds1.00", 4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachma1.00", 4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachma1.00", 4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachmas1.00", 4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetzal1.00", 4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzal1.00", 4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzals1.00", 4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Franc1.00", 4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syli1.00", 4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean franc1.00", 4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean francs1.00", 4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean syli1.00", 4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean sylis1.00", 4069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Peso1.00", 4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau peso1.00", 4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau pesos1.00", 4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dollar1.00", 4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollar1.00", 4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollars1.00", 4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK$1.00", 4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HKD1.00", 4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HUF1.00", 4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourde1.00", 4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourde1.00", 4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourdes1.00", 4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempira1.00", 4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempira1.00", 4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempiras1.00", 4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dollar1.00", 4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollar1.00", 4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollars1.00", 4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forint1.00", 4095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forint1.00", 4096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forints1.00", 4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IDR1.00", 4098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IEP1.00", 4099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILS1.00", 4102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "INR1.00", 4103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQD1.00", 4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IRR1.00", 4105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ITL1.00", 4108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kr\\u00f3na1.00", 4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3na1.00", 4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3nur1.00", 4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupee1.00", 4112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupee1.00", 4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupees1.00", 4114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupiah1.00", 4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiah1.00", 4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiahs1.00", 4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Rial1.00", 4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rial1.00", 4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rials1.00", 4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dinar1.00", 4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinar1.00", 4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinars1.00", 4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Pound1.00", 4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pound1.00", 4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pounds1.00", 4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Pound1.00", 4127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli new sheqel1.00", 4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pound1.00", 4129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pounds1.00", 4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lira1.00", 4131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian lira1.00", 4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian liras1.00", 4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JMD1.00", 4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JOD1.00", 4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JPY1.00", 4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dollar1.00", 4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollar1.00", 4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollars1.00", 4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Yen1.00", 4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese yen1.00", 4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dinar1.00", 4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinar1.00", 4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinars1.00", 4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KES1.00", 4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KGS1.00", 4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KHR1.00", 4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KMF1.00", 4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KRW1.00", 4151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KWD1.00", 4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZT1.00", 415527f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Tenge1.00", 415627f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenge1.00", 415727f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenges1.00", 4158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shilling1.00", 4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shilling1.00", 4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shillings1.00", 4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dinar1.00", 4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinar1.00", 4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinars1.00", 4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani Som1.00", 4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani som1.00", 4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani soms1.00", 4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LBP1.00", 4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LKR1.00", 4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LSL1.00", 4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LYD1.00", 4190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Kip1.00", 4191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kip1.00", 4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kips1.00", 4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lats1.00", 4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Ruble1.00", 4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian lats1.00", 4196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "Latvian lati1.00", 4197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian ruble1.00", 4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian rubles1.00", 4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Pound1.00", 4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pound1.00", 4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pounds1.00", 4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Loti1.00", 4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho loti1.00", 4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho lotis1.00", 4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dollar1.00", 4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollar1.00", 4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollars1.00", 4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dinar1.00", 4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinar1.00", 4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinars1.00", 4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Litas1.00", 4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talonas1.00", 4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litas1.00", 4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litai1.00", 4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonas1.00", 4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonases1.00", 4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Franc1.00", 4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Franc1.00", 4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Franc1.00", 4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible franc1.00", 4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible francs1.00", 4222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial franc1.00", 4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial francs1.00", 4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian franc1.00", 4225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian francs1.00", 4226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX$1.00", 4233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MKD1.00", 4238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MNT1.00", 4243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MRO1.00", 4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTL1.00", 4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MWK1.00", 4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXN1.00", 4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MYR1.00", 4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZM1.00", 4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZN1.00", 4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Pataca1.00", 4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese pataca1.00", 4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese patacas1.00", 4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Denar1.00", 4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denar1.00", 4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denari1.00", 4270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariaries1.00", 4271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Franc1.00", 4274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy franc1.00", 4275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy francs1.00", 4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwachas1.00", 4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgit1.00", 4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgit1.00", 4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgits1.00", 4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiyaa1.00", 4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaa1.00", 4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaas1.00", 4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Franc1.00", 4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian franc1.00", 4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian francs1.00", 4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lira1.00", 4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Pound1.00", 4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pound1.00", 4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pounds1.00", 4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiya1.00", 4295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiya1.00", 4296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiyas1.00", 4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupee1.00", 4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupee1.00", 4299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupees1.00", 4300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Peso1.00", 430159d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u20131992)1.00", 430227f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Unit1.00", 4303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican peso1.00", 4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican pesos1.00", 430559d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver peso (1861\\u20131992)1.00", 430659d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver pesos (1861\\u20131992)1.00", 430727f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment unit1.00", 430827f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment units1.00", 4309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Leu1.00", 4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan leu1.00", 4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan lei1.00", 4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugrik1.00", 4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugrik1.00", 4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugriks1.00", 4315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirham1.00", 4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Franc1.00", 4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirham1.00", 4318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirhams1.00", 4319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan franc1.00", 4320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan francs1.00", 4321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escudo1.00", 4322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metical1.00", 4323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudo1.00", 4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudos1.00", 4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican metical1.00", 4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican meticals1.00", 432759d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kyat1.00", 432859d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyat1.00", 432959d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyats1.00", 4330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAD1.00", 4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NGN1.00", 4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIC1.00", 4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NOK1.00", 4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NPR1.00", 4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT$1.00", 4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZ$1.00", 4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZD1.00", 4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dollar1.00", 4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollar1.00", 4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollars1.00", 4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupee1.00", 4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupee1.00", 4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupees1.00", 4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilder1.00", 4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilder1.00", 4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilders1.00", 4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilder1.00", 4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilder1.00", 4353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilders1.00", 4354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqel1.00", 4355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqels1.00", 4356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dollar1.00", 4357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollar1.00", 4358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollars1.00", 435927f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdoba1.00", 436059d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00", 436127f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdoba1.00", 436227f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdobas1.00", 436359d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00", 436459d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00", 4365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Naira1.00", 4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian naira1.00", 4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian nairas1.00", 4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Won1.00", 4369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Krone1.00", 4372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian krone1.00", 4373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian kroner1.00", 4374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OMR1.00", 437559d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican Metical (1980\\u20132006)1.00", 437659d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican metical (1980\\u20132006)1.00", 437759d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican meticals (1980\\u20132006)1.00", 437859d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Lei (1952\\u20132006)1.00", 437959d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u20132006)1.00", 438059d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian leu (1952\\u20132006)1.00", 438159d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u20132006)1.00", 438259d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinar (2002\\u20132006)1.00", 438359d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinars (2002\\u20132006)1.00", 438459d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u20132007)1.00", 438559d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u20131998)1.00", 438659d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinar (1992\\u20132007)1.00", 438759d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinars (1992\\u20132007)1.00", 438859d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pound (1957\\u20131998)1.00", 438959d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pounds (1957\\u20131998)1.00", 439059d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 439159d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 4392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Rial1.00", 4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rial1.00", 4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rials1.00", 4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PHP1.00", 4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PKR1.00", 4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLN1.00", 4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PYG1.00", 4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupee1.00", 4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupee1.00", 4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupees1.00", 4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balboa1.00", 4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboa1.00", 4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboas1.00", 4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kina1.00", 4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guarani1.00", 4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guarani1.00", 4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guaranis1.00", 4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Inti1.00", 4428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Nuevo Sol1.00", 442959d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u20131965)1.00", 4430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian inti1.00", 4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian intis1.00", 4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian nuevo sol1.00", 4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian nuevos soles1.00", 443459d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian sol (1863\\u20131965)1.00", 443559d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian soles (1863\\u20131965)1.00", 4436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Peso1.00", 4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine peso1.00", 4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine pesos1.00", 4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 444159d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u20131995)1.00", 4442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zloty1.00", 4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys1.00", 4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty (PLZ)1.00", 4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty1.00", 4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys (PLZ)1.00", 4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escudo1.00", 4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escudo1.00", 4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudo1.00", 4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudos1.00", 4451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudo1.00", 4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudos1.00", 4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QAR1.00", 4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Rial1.00", 4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rial1.00", 4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rials1.00", 4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN\\u00a51.00", 4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUB1.00", 4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUB1.00", 4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dollar1.00", 4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollar1.00", 4477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollars1.00", 4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Leu1.00", 4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian lei1.00", 4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian leu1.00", 448159d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u20131998)1.00", 4482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Ruble1.00", 448359d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian ruble (1991\\u20131998)1.00", 4484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian ruble1.00", 448559d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian rubles (1991\\u20131998)1.00", 4486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian rubles1.00", 4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Franc1.00", 4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan franc1.00", 4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan francs1.00", 4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SAR1.00", 4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SBD1.00", 4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SCR1.00", 4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SEK1.00", 4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SGD1.00", 4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SKK1.00", 4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SOS1.00", 4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRG1.00", 4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "STD1.00", 4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SYP1.00", 4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZL1.00", 4519f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Pound1.00", 4520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pound1.00", 4521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pounds1.00", 4522f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra1.00", 4523f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra1.00", 4524f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras1.00", 4525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riyal1.00", 4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyal1.00", 4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyals1.00", 4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dinar1.00", 4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinar1.00", 4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinars1.00", 4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupee1.00", 4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupee1.00", 4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupees1.00", 4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leone1.00", 4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leone1.00", 4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leones1.00", 4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dollar1.00", 4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollar1.00", 4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollars1.00", 4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Koruna1.00", 4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak koruna1.00", 4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak korunas1.00", 4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tolar1.00", 4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolar1.00", 4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolars1.00", 4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dollar1.00", 4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollar1.00", 4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollars1.00", 4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shilling1.00", 4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shilling1.00", 4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shillings1.00", 4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial)1.00", 4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand1.00", 4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand (financial)1.00", 4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rands (financial)1.00", 4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Won1.00", 4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Rouble1.00", 4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet rouble1.00", 4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet roubles1.00", 4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account)1.00", 4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account)1.00", 4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta1.00", 4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (A account)1.00", 4570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (convertible account)1.00", 4571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta1.00", 4572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (A account)1.00", 4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (convertible account)1.00", 4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas1.00", 4575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Rights1.00", 457627f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupee1.00", 457727f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupee1.00", 457827f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupees1.00", 4579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Pound1.00", 4580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pound1.00", 4581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pounds1.00", 4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dollar1.00", 4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollar1.00", 4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollars1.00", 458527f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilder1.00", 458627f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilder1.00", 458727f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilders1.00", 4588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangeni1.00", 4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi lilangeni1.00", 4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi emalangeni1.00", 4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Krona1.00", 4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish krona1.00", 4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish kronor1.00", 4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Franc1.00", 4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss franc1.00", 4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss francs1.00", 4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Pound1.00", 4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pound1.00", 4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pounds1.00", 4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "THB1.00", 4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 4603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 4604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 4605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TOP1.00", 4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRL1.00", 4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TTD1.00", 4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TWD1.00", 4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZS1.00", 4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dollar1.00", 4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollar1.00", 4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollars1.00", 4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Ruble1.00", 4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somoni1.00", 4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani ruble1.00", 4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani rubles1.00", 4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somoni1.00", 4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somonis1.00", 4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shilling1.00", 4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shilling1.00", 4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shillings1.00", 4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Baht1.00", 4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escudo1.00", 4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudo1.00", 4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudos1.00", 4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u02bbanga1.00", 4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 4641f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dollar1.00", 4642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollar1.00", 4643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollars1.00", 4644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dinar1.00", 4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinar1.00", 4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinars1.00", 4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish lira1.00", 4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Manat1.00", 4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirham1.00", 4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirhams1.00", 4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAH1.00", 4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGX1.00", 4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day)1.00", 4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day)1.00", 4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar1.00", 4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (next day)1.00", 4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (same day)1.00", 4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (next day)1.00", 4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (same day)1.00", 4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 4676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 4678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYU1.00", 4680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 468259d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u20131987)1.00", 4683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shilling1.00", 468459d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shilling (1966\\u20131987)1.00", 4685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shilling1.00", 468659d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shillings (1966\\u20131987)1.00", 4687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shillings1.00", 4688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvnia1.00", 4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanets1.00", 4690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnia1.00", 4691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnias1.00", 4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovanets1.00", 4693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovantsiv1.00", 469427f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Unit1.00", 4695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirham1.00", 469627f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currency1.00", 469759d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan Peso (1975\\u20131993)1.00", 4698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan Peso1.00", 469927f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan Peso (Indexed Units)1.00", 470059d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan peso (1975\\u20131993)1.00", 470127f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan peso (indexed units)1.00", 4702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan peso1.00", 470359d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan pesos (1975\\u20131993)1.00", 470427f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan pesos (indexed units)1.00", 4705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan pesos1.00", 4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uzbekistan Som1.00", 4707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uzbekistan som1.00", 4708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uzbekistan som1.00", 4709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEB1.00", 4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEF1.00", 4711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VND1.00", 4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VUV1.00", 4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vatu1.00", 4714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatu1.00", 4715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatus1.00", 4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar1.00", 471759d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00", 4718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvar1.00", 4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvars1.00", 472059d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvar (1871\\u20132008)1.00", 472159d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvars (1871\\u20132008)1.00", 4722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Dong1.00", 4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Euro1.00", 4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Franc1.00", 4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euro1.00", 4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euros1.00", 4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR franc1.00", 4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR francs1.00", 4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan Tala1.00", 4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 4749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 4750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XCD1.00", 4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 4753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 4754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 4755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 4756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPF1.00", 4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YER1.00", 4775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 4776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 4777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 4781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dinar1.00", 4782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Rial1.00", 4783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinar1.00", 4784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinars1.00", 4785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rial1.00", 4786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rials1.00", 478759d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Convertible Dinar (1990\\u20131992)1.00", 478859d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u20131990)1.00", 478959d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian New Dinar (1994\\u20132002)1.00", 479059d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinar (1990\\u20131992)1.00", 479159d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinars (1990\\u20131992)1.00", 479259d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinar (1966\\u20131990)1.00", 479359d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinars (1966\\u20131990)1.00", 479459d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinar (1994\\u20132002)1.00", 479559d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinars (1994\\u20132002)1.00", 4796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAR1.00", 4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 4800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 4801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 4802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 4803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 4804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 4805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZWD1.00", 480659d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u20131998)1.00", 480759d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean Zaire (1971\\u20131993)1.00", 480859d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaire (1993\\u20131998)1.00", 480959d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaires (1993\\u20131998)1.00", 481059d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaire (1971\\u20131993)1.00", 481159d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaires (1971\\u20131993)1.00", 4812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwacha1.00", 4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwacha1.00", 4814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwachas1.00", 481559d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u20132008)1.00", 481659d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollar (1980\\u20132008)1.00", 481759d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollars (1980\\u20132008)1.00", 4818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euro1.00", 4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euros1.00", 482059d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish lira (1922\\u20132005)1.00", 4821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "special drawing rights1.00", 482227f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value unit1.00", 482327f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value units1.00", 4824b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "unknown currency1.00", 4825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a31.00", 4826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a51.00", 4827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ab1.00", 4828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20aa1.00", 4829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ac1.00", 48308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius "Rs.1.00", // Google Patch: Indian Rupee symbol \u20B9 -> "Rs." 4831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 4832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following has extra text, should be parsed correctly too 4833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00 random", 4834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00 random", 4835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 4836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 4837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 4838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 483959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Afghan Afghanis (1927\\u20131992) random", 4840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghanis random", 4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian Lek random", 4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian lek random", 484350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "1.00 Albanian lek\\u00eb random", 4844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian Dinar random", 4845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinar random", 4846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinars random", 4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran Peseta random", 4848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran peseta random", 4849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran pesetas random", 485059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Kwanza (1977\\u20131990) random", 485159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random", 4852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan Kwanza random", 485359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan New Kwanza (1990\\u20132000) random", 485459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanza (1977\\u20131991) random", 485559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanza (1995\\u20131999) random", 4856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanza random", 485759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanzas (1977\\u20131991) random", 485859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanzas (1995\\u20131999) random", 4859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanzas random", 486059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanza (1990\\u20132000) random", 486159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanzas (1990\\u20132000) random", 4862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Austral random", 486359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine Peso (1983\\u20131985) random", 4864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Peso random", 4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine austral random", 4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine australs random", 486759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine peso (1983\\u20131985) random", 4868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine peso random", 486959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine pesos (1983\\u20131985) random", 4870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine pesos random", 4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian Dram random", 4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian dram random", 4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian drams random", 4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban Florin random", 4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban florin random", 4876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian Dollar random", 4877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollar random", 4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollars random", 4879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian Schilling random", 4880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schilling random", 4881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schillings random", 488259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani Manat (1993\\u20132006) random", 4883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani Manat random", 488459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manat (1993\\u20132006) random", 4885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manat random", 488659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manats (1993\\u20132006) random", 4887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manats random", 4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian Dollar random", 4889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollar random", 4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollars random", 4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini Dinar random", 4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinar random", 4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinars random", 4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi Taka random", 4895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi taka random", 4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi takas random", 4897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian Dollar random", 4898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollar random", 4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollars random", 490059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian New Ruble (1994\\u20131999) random", 4901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian Ruble random", 490259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian new ruble (1994\\u20131999) random", 490359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian new rubles (1994\\u20131999) random", 4904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian ruble random", 4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian rubles random", 4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (convertible) random", 4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (financial) random", 4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc random", 4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (convertible) random", 4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (financial) random", 4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc random", 4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (convertible) random", 4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (financial) random", 4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs random", 4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize Dollar random", 4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollar random", 4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollars random", 4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan Dollar random", 4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollar random", 4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollars random", 4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese Ngultrum random", 4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrum random", 4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrums random", 4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Mvdol random", 4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Peso random", 4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdol random", 4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdols random", 4928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian peso random", 4929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian pesos random", 4930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 4932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Bolivianos random", 4933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina Convertible Mark random", 493459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random", 4935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible mark random", 4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible marks random", 493759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random", 493859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random", 4939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan Pula random", 4940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pula random", 4941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pulas random", 494259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzado (1989\\u20131990) random", 494359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzado (1986\\u20131989) random", 494459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1990\\u20131993) random", 494559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzeiro (1967\\u20131986) random", 494659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1993\\u20131994) random", 4947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian Real random", 494859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzado (1989\\u20131990) random", 494959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzados (1989\\u20131990) random", 495059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzado (1986\\u20131989) random", 495159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzados (1986\\u20131989) random", 495259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1990\\u20131993) random", 495359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiro (1967\\u20131986) random", 495459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1993\\u20131994) random", 495559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1990\\u20131993) random", 495659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiros (1967\\u20131986) random", 495759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1993\\u20131994) random", 4958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian real random", 4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian reals random", 4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 British Pound Sterling random", 4961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 British pound sterling random", 496250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "1.00 British pounds sterling random", 4963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei Dollar random", 4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollar random", 4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollars random", 4966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Hard Lev random", 4967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Lev random", 4968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Leva random", 4969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard lev random", 4970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard leva random", 4971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian lev random", 4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese Kyat random", 4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyat random", 4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyats random", 4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian Franc random", 4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian franc random", 4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian francs random", 4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian Riel random", 4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riel random", 4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riels random", 4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian Dollar random", 4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollar random", 4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollars random", 4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean Escudo random", 4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudo random", 4986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudos random", 4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands Dollar random", 4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollar random", 4989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollars random", 4990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean Peso random", 499127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean Unit of Account (UF) random", 4992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean peso random", 4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean pesos random", 499427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean unit of account (UF) random", 499527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean units of account (UF) random", 499627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chinese Yuan random", 4997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chinese yuan random", 4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian Peso random", 4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian peso random", 5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian pesos random", 5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian Franc random", 5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian franc random", 5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian francs random", 5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese Franc Congolais random", 5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese franc Congolais random", 5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese francs Congolais random", 5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican Col\\u00f3n random", 5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3n random", 5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3ns random", 5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Dinar random", 5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Kuna random", 5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinar random", 5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinars random", 5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kuna random", 5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kunas random", 5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban Peso random", 5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban peso random", 5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban pesos random", 5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot Pound random", 5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pound random", 5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pounds random", 5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic Koruna random", 5023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic koruna random", 5024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic korunas random", 5025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak Hard Koruna random", 5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard koruna random", 5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard korunas random", 5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish Krone random", 5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish krone random", 5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish kroner random", 5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German Mark random", 5032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German mark random", 5033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German marks random", 5034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian Franc random", 5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian franc random", 5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian francs random", 5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican Peso random", 5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican peso random", 5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican pesos random", 5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean Dollar random", 5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollar random", 5042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollars random", 5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German Mark random", 5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German mark random", 5045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German marks random", 5046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian Sucre random", 504727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian Unit of Constant Value random", 5048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucre random", 5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucres random", 505027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian unit of constant value random", 505127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian units of constant value random", 5052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian Pound random", 5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pound random", 5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pounds random", 5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran Col\\u00f3n random", 5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran col\\u00f3n random", 5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran colones random", 5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean Ekwele random", 5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean ekwele random", 5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean Nakfa random", 5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfa random", 5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfas random", 5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian Kroon random", 5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroon random", 5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroons random", 5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian Birr random", 5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birr random", 5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birrs random", 5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Composite Unit random", 5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Currency Unit random", 5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Monetary Unit random", 5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBC) random", 5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBD) random", 5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite unit random", 5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite units random", 5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency unit random", 5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency units random", 5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary unit random", 5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary units random", 5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBC) random", 5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBD) random", 5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBC) random", 5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBD) random", 5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands Pound random", 5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pound random", 5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pounds random", 5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian Dollar random", 5088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollar random", 5089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollars random", 5090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish Markka random", 5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markka random", 5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markkas random", 5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Franc random", 5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Gold Franc random", 5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-Franc random", 5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-franc random", 5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-francs random", 5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French franc random", 5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French francs random", 5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold franc random", 5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold francs random", 5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian Dalasi random", 5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasi random", 5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasis random", 5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Kupon Larit random", 5106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Lari random", 5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larit random", 5108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larits random", 5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian lari random", 5110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian laris random", 511159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian Cedi (1979\\u20132007) random", 5112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian Cedi random", 511359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedi (1979\\u20132007) random", 5114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedi random", 511559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedis (1979\\u20132007) random", 5116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedis random", 5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar Pound random", 5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pound random", 5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pounds random", 5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek Drachma random", 5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachma random", 5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachmas random", 5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan Quetzal random", 5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzal random", 5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzals random", 5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Franc random", 5129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Syli random", 5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean franc random", 5131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean francs random", 5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean syli random", 5133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean sylis random", 5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau Peso random", 5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau peso random", 5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau pesos random", 5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese Dollar random", 5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollar random", 5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollars random", 5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian Gourde random", 5141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourde random", 5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourdes random", 5143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran Lempira random", 5144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempira random", 5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempiras random", 5146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong Dollar random", 5147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollar random", 5148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollars random", 5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian Forint random", 5150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forint random", 5151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forints random", 5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic Kr\\u00f3na random", 5153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3na random", 5154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3nur random", 5155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian Rupee random", 5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupee random", 5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupees random", 5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian Rupiah random", 5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiah random", 5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiahs random", 5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian Rial random", 5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rial random", 5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rials random", 5164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi Dinar random", 5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinar random", 5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinars random", 5167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish Pound random", 5168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pound random", 5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pounds random", 5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli Pound random", 5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli new sheqel random", 5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pound random", 5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pounds random", 5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian Lira random", 5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian lira random", 5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian liras random", 5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican Dollar random", 5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollar random", 5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollars random", 5180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese Yen random", 5181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese yen random", 5182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian Dinar random", 5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinar random", 5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinars random", 518527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani Tenge random", 518627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenge random", 518727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenges random", 5188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan Shilling random", 5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shilling random", 5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shillings random", 5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti Dinar random", 5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinar random", 5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinars random", 5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani Som random", 5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani som random", 5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani soms random", 5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian Kip random", 5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kip random", 5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kips random", 5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Lats random", 5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Ruble random", 5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lats random", 5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lati random", 5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian ruble random", 5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian rubles random", 5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese Pound random", 5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pound random", 5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pounds random", 5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho Loti random", 5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho loti random", 5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho lotis random", 5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian Dollar random", 5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollar random", 5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollars random", 5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan Dinar random", 5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinar random", 5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinars random", 5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Litas random", 5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Talonas random", 5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litas random", 5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litai random", 5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonas random", 5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonases random", 5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Convertible Franc random", 5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg Financial Franc random", 5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Franc random", 5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible franc random", 5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible francs random", 5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial franc random", 5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial francs random", 5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian franc random", 5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian francs random", 5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese Pataca random", 5234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese pataca random", 5235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese patacas random", 5236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian Denar random", 5237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denar random", 5238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denari random", 5239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariaries random", 5240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Franc random", 5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy franc random", 5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy francs random", 5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwachas random", 5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian Ringgit random", 5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgit random", 5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgits random", 5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian Rufiyaa random", 5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaa random", 5253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaas random", 5254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian Franc random", 5255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian franc random", 5256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian francs random", 5257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Lira random", 5258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Pound random", 5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese lira random", 5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese liras random", 5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pound random", 5262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pounds random", 5263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian Ouguiya random", 5264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiya random", 5265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiyas random", 5266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian Rupee random", 5267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupee random", 5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupees random", 5269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican Peso random", 527059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican Silver Peso (1861\\u20131992) random", 527127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican Investment Unit random", 5272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican peso random", 5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican pesos random", 527459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver peso (1861\\u20131992) random", 527559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver pesos (1861\\u20131992) random", 527627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment unit random", 527727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment units random", 5278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan Leu random", 5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan leu random", 5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan lei random", 5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian Tugrik random", 5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugrik random", 5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugriks random", 5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Dirham random", 5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Franc random", 5286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirham random", 5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirhams random", 5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan franc random", 5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan francs random", 5290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Escudo random", 5291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Metical random", 5292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudo random", 5293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudos random", 5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican metical random", 5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican meticals random", 529659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar Kyat random", 529759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyat random", 529859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyats random", 5299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dollar random", 5300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollar random", 5301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollars random", 5302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupee random", 5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupee random", 5304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupees random", 5305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilder random", 5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilder random", 5307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilders random", 5308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilder random", 5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilder random", 5310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilders random", 5311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli New Sheqel random", 5312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli new sheqels random", 5313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dollar random", 5314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollar random", 5315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollars random", 531627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan C\\u00f3rdoba random", 531759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random", 531827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 531927f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 532059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random", 532159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random", 5322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Naira random", 5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian naira random", 5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nairas random", 5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Won random", 5326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Krone random", 5329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian krone random", 5330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kroner random", 533159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican Metical (1980\\u20132006) random", 533259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican metical (1980\\u20132006) random", 533359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican meticals (1980\\u20132006) random", 533459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Lei (1952\\u20132006) random", 533559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Leu (1952\\u20132006) random", 533659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian leu (1952\\u20132006) random", 533759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian Dinar (2002\\u20132006) random", 533859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinar (2002\\u20132006) random", 533959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinars (2002\\u20132006) random", 534059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Dinar (1992\\u20132007) random", 534159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Pound (1957\\u20131998) random", 534259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinar (1992\\u20132007) random", 534359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinars (1992\\u20132007) random", 534459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pound (1957\\u20131998) random", 534559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pounds (1957\\u20131998) random", 534659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 534759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 5348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani Rial random", 5349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rial random", 5350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rials random", 5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani Rupee random", 5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupee random", 5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupees random", 5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian Balboa random", 5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboa random", 5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboas random", 5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean Kina random", 5360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan Guarani random", 5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guarani random", 5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guaranis random", 5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian Inti random", 5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian Nuevo Sol random", 536759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian Sol (1863\\u20131965) random", 5368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian inti random", 5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian intis random", 5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian nuevo sol random", 5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian nuevos soles random", 537259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian sol (1863\\u20131965) random", 537359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian soles (1863\\u20131965) random", 5374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine Peso random", 5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine peso random", 5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine pesos random", 5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 537959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Polish Zloty (1950\\u20131995) random", 5380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish Zloty random", 5381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys random", 5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty (PLZ) random", 5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty random", 5384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys (PLZ) random", 5385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Escudo random", 5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea Escudo random", 5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudo random", 5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudos random", 5389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudo random", 5390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudos random", 5391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari Rial random", 5392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rial random", 5393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rials random", 5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian Dollar random", 5397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollar random", 5398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollars random", 5399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian Leu random", 5400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian lei random", 5401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian leu random", 540259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian Ruble (1991\\u20131998) random", 5403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian Ruble random", 540459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian ruble (1991\\u20131998) random", 5405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian ruble random", 540659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian rubles (1991\\u20131998) random", 5407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian rubles random", 5408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan Franc random", 5409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan franc random", 5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan francs random", 5411f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena Pound random", 5412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pound random", 5413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pounds random", 5414f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra random", 5415f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra random", 5416f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras random", 5417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi Riyal random", 5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyal random", 5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyals random", 5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian Dinar random", 5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinar random", 5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinars random", 5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois Rupee random", 5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupee random", 5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupees random", 5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean Leone random", 5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leone random", 5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leones random", 5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore Dollar random", 5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollar random", 5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollars random", 5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak Koruna random", 5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak koruna random", 5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak korunas random", 5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian Tolar random", 5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolar random", 5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolars random", 5438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands Dollar random", 5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollar random", 5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollars random", 5441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali Shilling random", 5442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shilling random", 5443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shillings random", 5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand (financial) random", 5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand random", 5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand (financial) random", 5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rands (financial) random", 5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean Won random", 5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet Rouble random", 5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet rouble random", 5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet roubles random", 5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (A account) random", 5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (convertible account) random", 5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta random", 5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (A account) random", 5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (convertible account) random", 5461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta random", 5462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (A account) random", 5463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (convertible account) random", 5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas random", 5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Special Drawing Rights random", 546627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan Rupee random", 546727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupee random", 546827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupees random", 5469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese Pound random", 5470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pound random", 5471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pounds random", 5472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese Dollar random", 5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollar random", 5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollars random", 547527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese Guilder random", 547627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilder random", 547727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilders random", 5478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi Lilangeni random", 5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi lilangeni random", 5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi emalangeni random", 5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish Krona random", 5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish krona random", 5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish kronor random", 5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss Franc random", 5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss franc random", 5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss francs random", 5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian Pound random", 5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pound random", 5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pounds random", 5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan Dollar random", 5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollar random", 5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollars random", 5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Ruble random", 5494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Somoni random", 5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani ruble random", 5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani rubles random", 5497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somoni random", 5498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somonis random", 5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian Shilling random", 5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shilling random", 5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shillings random", 5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai Baht random", 5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese Escudo random", 5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudo random", 5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudos random", 5510f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago Dollar random", 5511f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollar random", 5512f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollars random", 5513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian Dinar random", 5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinar random", 5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinars random", 5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish lira random", 5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani Manat random", 5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Next day) random", 5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Same day) random", 5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar random", 5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (next day) random", 5526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (same day) random", 5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 5528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (next day) random", 5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (same day) random", 5530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 553159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan Shilling (1966\\u20131987) random", 5532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan Shilling random", 553359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shilling (1966\\u20131987) random", 5534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shilling random", 553559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shillings (1966\\u20131987) random", 5536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shillings random", 5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Hryvnia random", 5538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Karbovanets random", 5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnia random", 5540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnias random", 5541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovanets random", 5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovantsiv random", 554327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian Real Value Unit random", 5544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 United Arab Emirates Dirham random", 554527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Unknown Currency random", 554659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan Peso (1975\\u20131993) random", 5547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan Peso random", 554827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan Peso (Indexed Units) random", 554959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan peso (1975\\u20131993) random", 555027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan peso (indexed units) random", 5551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan peso random", 555259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan pesos (1975\\u20131993) random", 555327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan pesos (indexed units) random", 5554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uzbekistan Som random", 5555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uzbekistan som random", 5556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uzbekistan som random", 5557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu Vatu random", 5558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatu random", 5559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatus random", 5560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan Bol\\u00edvar random", 556159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random", 5562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvar random", 5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvars random", 556459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random", 556559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random", 5566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese Dong random", 5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Euro random", 5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Franc random", 5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euro random", 5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euros random", 5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR franc random", 5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR francs random", 5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan Tala random", 5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Dinar random", 5579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Rial random", 5580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinar random", 5581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinars random", 5582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rial random", 5583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rials random", 558459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random", 558559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random", 558659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian New Dinar (1994\\u20132002) random", 558759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinar (1990\\u20131992) random", 558859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinars (1990\\u20131992) random", 558959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinar (1966\\u20131990) random", 559059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinars (1966\\u20131990) random", 559159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinar (1994\\u20132002) random", 559259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinars (1994\\u20132002) random", 559359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean New Zaire (1993\\u20131998) random", 559459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean Zaire (1971\\u20131993) random", 559559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaire (1993\\u20131998) random", 559659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaires (1993\\u20131998) random", 559759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaire (1971\\u20131993) random", 559859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaires (1971\\u20131993) random", 5599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian Kwacha random", 5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwacha random", 5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwachas random", 560259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean Dollar (1980\\u20132008) random", 560359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollar (1980\\u20132008) random", 560459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollars (1980\\u20132008) random", 5605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euro random", 5606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euros random", 560759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish lira (1922\\u20132005) random", 5608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 special drawing rights random", 560927f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value unit random", 561027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value units random", 5611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1.00 unknown currency random", 5612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* WRONG_DATA[] = { 5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following are missing one last char in the currency name 5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "usd1.00", // case sensitive 5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan Cordob", 5618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dolla", 5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dolla", 5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupe", 5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupe", 5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilde", 5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilde", 5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilde", 5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilde", 5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli New Sheqe", 5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dolla", 5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dolla", 5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan cordob", 5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Nair", 5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nair", 5632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Wo", 5633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean wo", 5634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Kron", 5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kron", 5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dolla", 5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00", 5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "A1.00", 5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AD1.00", 5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AE1.00", 5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AF1.00", 5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AL1.00", 5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AM1.00", 5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AN1.00", 5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AO1.00", 5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AR1.00", 5647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AT1.00", 5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AU1.00", 5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AW1.00", 5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZ1.00", 5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghan1.00", 565259d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u201320021.00", 5653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afl1.00", 5654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Le1.00", 5655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dina1.00", 5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peset1.00", 5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanz1.00", 565859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u201319901.00", 565959d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u201319991.00", 566059d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u201320001.00", 5661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austra1.00", 5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Pes1.00", 566359d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u201319851.00", 5664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dra1.00", 5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Flori1.00", 5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dolla1.00", 5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schillin1.00", 5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Mana1.00", 566959d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u201320061.00", 5670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "B1.00", 5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BA1.00", 5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BB1.00", 5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BE1.00", 5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BG1.00", 5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BH1.00", 5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BI1.00", 5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BM1.00", 5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BN1.00", 5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BO1.00", 5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BR1.00", 5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BS1.00", 5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BT1.00", 5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BU1.00", 5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BW1.00", 5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BY1.00", 5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZ1.00", 5687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dolla1.00", 5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dina1.00", 5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Tak1.00", 5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dolla1.00", 5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bds1.00", 569259d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian New Ruble (1994\\u201319991.00", 5693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Rubl1.00", 5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Fran1.00", 5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible1.00", 5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial1.00", 5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dolla1.00", 5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dolla1.00", 5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultru1.00", 5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdo1.00", 5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Pes1.00", 5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivian1.00", 5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mar1.00", 5704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Dina1.00", 5705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pul1.00", 5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzad1.00", 5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzado Nov1.00", 5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzeir1.00", 570959d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u201319931.00", 571059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u201319861.00", 5711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Rea1.00", 5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "British Pound Sterlin1.00", 5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dolla1.00", 5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Le1.00", 5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Le1.00", 5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kya1.00", 5717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Fran1.00", 5718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "C1.00", 5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA1.00", 5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CD1.00", 5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA Franc BCEA1.00", 5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFA Franc BEA1.00", 5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Fran1.00", 5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP1.00", 5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CH1.00", 5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CL1.00", 5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN1.00", 5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CO1.00", 5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CS1.00", 5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CU1.00", 5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CV1.00", 5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CY1.00", 5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZ1.00", 5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Rie1.00", 5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dolla1.00", 5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escud1.00", 5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dolla1.00", 5738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Pes1.00", 573927f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Accoun1.00", 574027f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yua1.00", 5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Pes1.00", 5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comoro Fran1.00", 5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Fran1.00", 5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f31.00", 5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dina1.00", 5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kun1.00", 5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Pes1.00", 5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Poun1.00", 5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Korun1.00", 5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Korun1.00", 5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "D1.00", 5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DD1.00", 5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DE1.00", 5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJ1.00", 5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DK1.00", 5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DO1.00", 5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZ1.00", 5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Kron1.00", 5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mar1.00", 5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Fran1.00", 5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dk1.00", 5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Pes1.00", 5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC1.00", 5764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EE1.00", 5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EG1.00", 5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EQ1.00", 5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ER1.00", 5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ES1.00", 5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ET1.00", 5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EU1.00", 5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dolla1.00", 5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Ostmar1.00", 5773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucr1.00", 577427f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Valu1.00", 5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Poun1.00", 5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ekwel1.00", 5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f31.00", 5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwel1.00", 5779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakf1.00", 5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Es1.00", 5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroo1.00", 5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Bir1.00", 5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eur1.00", 5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Uni1.00", 5785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Uni1.00", 5786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Uni1.00", 5787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC1.00", 5788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD1.00", 5789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "F1.00", 5790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FB1.00", 5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FI1.00", 5792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJ1.00", 5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FK1.00", 5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FR1.00", 5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Poun1.00", 5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fd1.00", 5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dolla1.00", 5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markk1.00", 5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fr1.00", 5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Fran1.00", 5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Fran1.00", 5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Fran1.00", 5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "G1.00", 5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GB1.00", 5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GE1.00", 5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GH1.00", 5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GI1.00", 5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GM1.00", 5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GN1.00", 5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQ1.00", 5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GR1.00", 5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GT1.00", 5813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GW1.00", 5814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GY1.00", 5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalas1.00", 5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Lari1.00", 5817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lar1.00", 5818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Ced1.00", 581959d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u201320071.00", 5820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Poun1.00", 5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gol1.00", 5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachm1.00", 5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetza1.00", 5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Fran1.00", 5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syl1.00", 5826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Pes1.00", 5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dolla1.00", 5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK1.00", 5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HN1.00", 5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HR1.00", 5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HT1.00", 5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HU1.00", 5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourd1.00", 5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempir1.00", 5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dolla1.00", 5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forin1.00", 5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "I1.00", 5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IE1.00", 5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IL1.00", 5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IN1.00", 5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQ1.00", 5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IR1.00", 5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IS1.00", 5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IT1.00", 5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kron1.00", 5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupe1.00", 5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupia1.00", 5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Ria1.00", 5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dina1.00", 5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Poun1.00", 5851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Poun1.00", 5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lir1.00", 5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "J1.00", 5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JM1.00", 5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JO1.00", 5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JP1.00", 5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dolla1.00", 5858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Ye1.00", 5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dina1.00", 5860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K S1.00", 5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K1.00", 5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KE1.00", 5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KG1.00", 5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KH1.00", 5865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KP1.00", 5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KR1.00", 5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KW1.00", 5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KY1.00", 5869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZ1.00", 587027f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Teng1.00", 5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shillin1.00", 5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dina1.00", 5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani So1.00", 5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LA1.00", 5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LB1.00", 5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LK1.00", 5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LR1.00", 5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LT1.00", 5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LU1.00", 5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LV1.00", 5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LY1.00", 5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Ki1.00", 5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lat1.00", 5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Rubl1.00", 5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Poun1.00", 5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Lot1.00", 5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dolla1.00", 5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dina1.00", 5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Lit1.00", 5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talona1.00", 5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Fran1.00", 5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Fran1.00", 5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Fran1.00", 5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MA1.00", 5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MD1.00", 5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDe1.00", 5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MEX1.00", 5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MG1.00", 5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ML1.00", 5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MM1.00", 5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MN1.00", 5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MO1.00", 5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MR1.00", 5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MT1.00", 5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MU1.00", 5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MV1.00", 5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MW1.00", 5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX1.00", 5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MY1.00", 5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZ1.00", 5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Patac1.00", 5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Dena1.00", 5913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariar1.00", 5914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Fran1.00", 5915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwach1.00", 5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgi1.00", 5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiya1.00", 5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Fran1.00", 5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malot1.00", 5920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lir1.00", 5921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Poun1.00", 5922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiy1.00", 5923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupe1.00", 5924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Pes1.00", 592559d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u201319921.00", 592627f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Uni1.00", 5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Le1.00", 5928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugri1.00", 5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirha1.00", 5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Fran1.00", 5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escud1.00", 5932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metica1.00", 593359d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kya1.00", 5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "N1.00", 5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NA1.00", 5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAf1.00", 5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NG1.00", 5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NI1.00", 5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NK1.00", 5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NL1.00", 5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NO1.00", 5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NP1.00", 5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT1.00", 5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dolla1.00", 5945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupe1.00", 5946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilde1.00", 5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilde1.00", 5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqe1.00", 5949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dolla1.00", 595059d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00", 595127f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdob1.00", 5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Nair1.00", 5953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Wo1.00", 5954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Kron1.00", 5955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nr1.00", 5956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OM1.00", 5957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Old Mozambican Metica1.00", 595859d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u201320061.00", 595959d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u201320061.00", 596059d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u201320071.00", 596159d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u201319981.00", 596259d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u201320051.00", 5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Ria1.00", 5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PA1.00", 5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PE1.00", 5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PG1.00", 5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PH1.00", 5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PK1.00", 5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PL1.00", 5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PT1.00", 5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PY1.00", 5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupe1.00", 5973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladiu1.00", 5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balbo1.00", 5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kin1.00", 5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guaran1.00", 5977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Int1.00", 597859d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u201319651.00", 5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Sol Nuev1.00", 5980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Pes1.00", 5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinu1.00", 5982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zlot1.00", 598359d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u201319951.00", 5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escud1.00", 5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escud1.00", 5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pr1.00", 5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QA1.00", 5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Ria1.00", 5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RD1.00", 5990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RH1.00", 5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Fund1.00", 5992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RS1.00", 5993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RU1.00", 5994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RW1.00", 5995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rb1.00", 5996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dolla1.00", 5997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Le1.00", 5998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Rubl1.00", 599959d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u201319981.00", 6000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Fran1.00", 6001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "S1.00", 6002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SA1.00", 6003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SB1.00", 6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SC1.00", 6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SD1.00", 6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SE1.00", 6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SG1.00", 6008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SH1.00", 6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SI1.00", 6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SK1.00", 6011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL R1.00", 6012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL1.00", 6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SO1.00", 6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ST1.00", 6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SU1.00", 6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SV1.00", 6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SY1.00", 6018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZ1.00", 6019f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Poun1.00", 6020f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobr1.00", 6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riya1.00", 6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dina1.00", 6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupe1.00", 6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sh1.00", 6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leon1.00", 6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silve1.00", 6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dolla1.00", 6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Korun1.00", 6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tola1.00", 6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dolla1.00", 6031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shillin1.00", 6032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Ran1.00", 6033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial1.00", 6034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Wo1.00", 6035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Roubl1.00", 6036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peset1.00", 6037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account1.00", 6038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account1.00", 6039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Right1.00", 604027f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupe1.00", 6041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Poun1.00", 6042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dolla1.00", 604327f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilde1.00", 6044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangen1.00", 6045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Kron1.00", 6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Fran1.00", 6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Poun1.00", 6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "T S1.00", 6049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TH1.00", 6050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJ1.00", 6051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TM1.00", 6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TN1.00", 6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TO1.00", 6054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TP1.00", 6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TR1.00", 6056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TT1.00", 6057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TW1.00", 6058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZ1.00", 6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dolla1.00", 6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Rubl1.00", 6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somon1.00", 6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shillin1.00", 6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Cod1.00", 6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Bah1.00", 6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escud1.00", 6066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u20bbang1.00", 6067f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dolla1.00", 6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dina1.00", 6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lir1.00", 6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Mana1.00", 6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U S1.00", 6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U1.00", 6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UA1.00", 6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UG1.00", 6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dolla1.00", 6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day1.00", 6077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day1.00", 6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US1.00", 6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UY1.00", 6080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZ1.00", 6081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shillin1.00", 608259d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u201319871.00", 6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvni1.00", 6084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanet1.00", 608527f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Uni1.00", 6086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirha1.00", 608727f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currenc1.00", 6088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ur1.00", 608959d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguay Peso (1975\\u201319931.00", 6090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguay Peso Uruguay1.00", 609127f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguay Peso (Indexed Units1.00", 6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uzbekistan So1.00", 6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "V1.00", 6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VE1.00", 6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VN1.00", 6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VU1.00", 6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vat1.00", 6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edva1.00", 6099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar Fuert1.00", 6100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Don1.00", 6101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Eur1.00", 6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Fran1.00", 6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WS1.00", 6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoa Tal1.00", 6105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XA1.00", 6106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XB1.00", 6107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XC1.00", 6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XD1.00", 6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XE1.00", 6110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XF1.00", 6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XO1.00", 6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XP1.00", 6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XR1.00", 6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XT1.00", 6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XX1.00", 6116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YD1.00", 6117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YE1.00", 6118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YU1.00", 6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dina1.00", 6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Ria1.00", 6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yugoslavian Convertible Dina1.00", 612259d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u201319901.00", 612327f654740f2a26ad62a5c155af9199af9e69b889claireho "Yugoslavian New Dina1.00", 6124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Z1.00", 6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZA1.00", 6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZM1.00", 6127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZR1.00", 6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZW1.00", 612959d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u201319981.00", 6130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zairean Zair1.00", 6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwach1.00", 613259d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u201320081.00", 6133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "dra1.00", 6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "lar1.00", 6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "le1.00", 6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "man1.00", 6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "so1.00", 6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 6139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale("en_US"); 6141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 6142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(DATA[i]); 6143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 61456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( doubleVal != 1.0 ) { 6151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal); 6152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 6154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Failed to parse as currency: " + formatted); 61556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 61566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 61576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 61586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 61596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) { 6165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(WRONG_DATA[i]); 6166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 61686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal); 61746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 61756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 61766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 61776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 61786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 6183c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 618450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t); 618550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 618650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s; 618750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::string ss; 618850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::cout << s.toUTF8String(ss) 618950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount, 619050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 619150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool found[10]; 619250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition fp; 619350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 619450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (tupleCount > 10) { 619550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("internal error, tupleCount too large", FALSE); 619650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 619750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 619850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = FALSE; 619950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 620050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 620150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 620250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 620350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (iter.next(fp)) { 620450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = FALSE; 620550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t id = fp.getField(); 620650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t start = fp.getBeginIndex(); 620750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t limit = fp.getEndIndex(); 620850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 620950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // is there a logln using printf? 621050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buf[128]; 621150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit); 621250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(buf); 621350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 621450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 621550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (found[i]) { 621650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 621750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 621850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (values[i*3] == id && 621950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+1] == start && 622050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+2] == limit) { 622150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = ok = TRUE; 622250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 622350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 622650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok); 622750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 622950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // check that all were found 623050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = TRUE; 623150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 623250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!found[i]) { 623350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ok = FALSE; 623450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]); 623550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 623650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 623750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("no expected values were missing", ok); 623850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 623950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 624050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit, 624150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 624250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 624350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField()); 624450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex()); 624550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex()); 624650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 624750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 624850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() { 624950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // bug 7372 625050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 625150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter1; 625250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter2; 625350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition pos; 625450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 625550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status); 625650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 625750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 625850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double num = 1234.56; 625950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str1; 626050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str2; 626150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 626250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"self==", iter1 == iter1); 626350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2); 626450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 626550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str1, &iter1, status); 626650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2); 626750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, &iter2, status); 626850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2); 626950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter1.next(pos); 627050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2); 627150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter2.next(pos); 627250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2); 627350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 627450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // should format ok with no iterator 627550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str2.remove(); 627650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, NULL, status); 627750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertEquals("null fpiter", str1, str2); 627850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 627950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 628050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 628150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 628250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() { 628350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale locale("en_US"); 628450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6285b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 628650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 628750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double val = 12345.67; 628850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 628950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 629050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_CURRENCY_FIELD, 0, 1, 6292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_GROUPING_SEPARATOR_FIELD, 3, 4, 6293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 7, 6294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8, 6295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 8, 10, 629650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 629750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected)); 629850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 629950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 630050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 630150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 630250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 630350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 630450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 630650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 630750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result); 630950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 631050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6311103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 631250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 631350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6314103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result); 631550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 631650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 631750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6318b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status); 631950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho val = -0.0000123; 632050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 632150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_SIGN_FIELD, 0, 1, 6323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 2, 6324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3, 6325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 3, 5, 6326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SYMBOL_FIELD, 5, 6, 6327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SIGN_FIELD, 6, 7, 6328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_FIELD, 7, 8 632950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 633050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected)); 633150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 633250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 633350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 633450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 633550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 633650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 633750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6338103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 633950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 634050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6341103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result); 634250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 634350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 634550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 634650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6347103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result); 634850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 634950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 635050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 635150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho fflush(stderr); 635250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 635350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 635450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) { 635550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (attrId) { 6356103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_INTEGER_FIELD: return "integer"; 6357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_FRACTION_FIELD: return "fraction"; 6358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator"; 6359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol"; 6360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign"; 6361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_FIELD: return "exponent"; 6362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator"; 6363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_CURRENCY_FIELD: return "currency"; 6364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERCENT_FIELD: return "percent"; 6365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERMILL_FIELD: return "permille"; 6366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_SIGN_FIELD: return "sign"; 636750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: return ""; 636850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 636950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 637050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 637150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 637250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Test formatting & parsing of big decimals. 637350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// API test, not a comprehensive test. 637450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// See DecimalFormatTest/DataDrivenTests 637550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 637650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \ 637750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho __FILE__, __LINE__, u_errorName(status));} 637850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \ 637950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);} 638050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 638150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) { 638250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // This function lets ASSERT_EQUALS("literal", UnicodeString) work. 638350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString us1(s1); 638450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return us1 != s2; 638550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 638650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 638750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() { 638850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 638950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 639050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f("12.345678999987654321E666", status); 639150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 639250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho StringPiece s = f.getDecimalNumber(status); 639350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 639450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1.2345678999987654321E+667", s); 639550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //printf("%s\n", s.data()); 639650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 639750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 639850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 639950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 640050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f1("this is not a number", status); 640150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status); 640250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 640350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 640450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 640550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 640650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f; 640750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("123.45", status); 640850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 640950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kDouble, f.getType()); 641050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble()); 641150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble(status)); 641250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 641350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("123.45", f.getDecimalNumber(status)); 641450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 641550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 641650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("4.5678E7", status); 641750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t n; 641850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho n = f.getLong(); 641950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(45678000, n); 642050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 642150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 642250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("-123", status); 642350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 642450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kLong, f.getType()); 642550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong()); 642650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong(status)); 642750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 642850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("-123", f.getDecimalNumber(status)); 642950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 643150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 643250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("1234567890123", status); // Number too big for 32 bits 643350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kInt64, f.getType()); 643550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64()); 643650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64(status)); 643750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status)); 643950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 644050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 644150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 644250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 644350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 644527f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 644627f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 644727f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 644827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 644927f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("244444444444444444444444444444444444446.4"); 645027f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(num, formattedResult, NULL, status); 645127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 645227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult); 645327f654740f2a26ad62a5c155af9199af9e69b889claireho //std::string ss; std::cout << formattedResult.toUTF8String(ss); 645427f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 645527f654740f2a26ad62a5c155af9199af9e69b889claireho } 645650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 645750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 645850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 645950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check formatting a DigitList. DigitList is internal, but this is 646050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // a critical interface that must work. 646150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6462b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 646327f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 646427f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 646527f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 646627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 646727f654740f2a26ad62a5c155af9199af9e69b889claireho DigitList dl; 646827f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("123.4566666666666666666666666666666666621E+40"); 646927f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 647027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 647127f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, NULL, status); 647227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 647327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult); 647427f654740f2a26ad62a5c155af9199af9e69b889claireho 647527f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 647627f654740f2a26ad62a5c155af9199af9e69b889claireho num.set("666.666"); 647727f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 647827f654740f2a26ad62a5c155af9199af9e69b889claireho FieldPosition pos(NumberFormat::FRACTION_FIELD); 647927f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 648027f654740f2a26ad62a5c155af9199af9e69b889claireho formattedResult.remove(); 648127f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, pos, status); 648227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 648327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("666.666", formattedResult); 648427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(4, pos.getBeginIndex()); 648527f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(7, pos.getEndIndex()); 648627f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 648727f654740f2a26ad62a5c155af9199af9e69b889claireho } 648850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 648950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 649050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 649150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check a parse with a formatter with a multiplier. 649250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6493b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status); 649427f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 649527f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 649627f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 649727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.84%"; 649827f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 649927f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 650027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 650127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data())); 650227f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 650327f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 650427f654740f2a26ad62a5c155af9199af9e69b889claireho } 650550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 650650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 650754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC) 650854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* 650954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod(). 651054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * See #9463 651154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 651250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 651350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check that a parse returns a decimal number with full accuracy 651450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 651627f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 651727f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 651827f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 651927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.002200044400088880000070000"; 652027f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 652127f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 652227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 652327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data())); 652427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(1.00220004440008888, result.getDouble()); 652527f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 652627f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 652727f654740f2a26ad62a5c155af9199af9e69b889claireho } 652850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 652954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 653050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 653150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 653250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 653327f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() { 653427f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 653527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString text1, text2; 653627f654740f2a26ad62a5c155af9199af9e69b889claireho double value = 99.12345; 653727f654740f2a26ad62a5c155af9199af9e69b889claireho 653827f654740f2a26ad62a5c155af9199af9e69b889claireho // Create currenct instance 653927f654740f2a26ad62a5c155af9199af9e69b889claireho NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status); 654027f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmt == NULL) { 654127f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 654227f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 654327f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text1); 654427f654740f2a26ad62a5c155af9199af9e69b889claireho 654527f654740f2a26ad62a5c155af9199af9e69b889claireho // Reset the same currency and format the test value again 654627f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->setCurrency(fmt->getCurrency(), status); 654727f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 654827f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text2); 654927f654740f2a26ad62a5c155af9199af9e69b889claireho 655027f654740f2a26ad62a5c155af9199af9e69b889claireho if (text1 != text2) { 655127f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"NumberFormat::format() should return the same result - text1=" 655227f654740f2a26ad62a5c155af9199af9e69b889claireho + text1 + " text2=" + text2); 655327f654740f2a26ad62a5c155af9199af9e69b889claireho } 655427f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmt; 655527f654740f2a26ad62a5c155af9199af9e69b889claireho } 655627f654740f2a26ad62a5c155af9199af9e69b889claireho} 655727f654740f2a26ad62a5c155af9199af9e69b889claireho 655827f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() { 655927f654740f2a26ad62a5c155af9199af9e69b889claireho 656027f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 656127f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 656227f654740f2a26ad62a5c155af9199af9e69b889claireho ParsePosition parsePos(0); 656327f654740f2a26ad62a5c155af9199af9e69b889claireho 656427f654740f2a26ad62a5c155af9199af9e69b889claireho // set the exponent symbol 656527f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 656627f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status); 656727f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)) { 656827f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)"); 656927f654740f2a26ad62a5c155af9199af9e69b889claireho return; 657027f654740f2a26ad62a5c155af9199af9e69b889claireho } 6571b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 657227f654740f2a26ad62a5c155af9199af9e69b889claireho // create format instance 657327f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 657427f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat fmt("#####", symbols, status); 6575b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)) { 657627f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); 657727f654740f2a26ad62a5c155af9199af9e69b889claireho } 6578b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 657927f654740f2a26ad62a5c155af9199af9e69b889claireho // parse the text 6580b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt.parse("5.06e-27", result, parsePos); 658127f654740f2a26ad62a5c155af9199af9e69b889claireho if(result.getType() != Formattable::kDouble && 6582b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble() != 5.06E-27 && 6583b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho parsePos.getIndex() != 8 658427f654740f2a26ad62a5c155af9199af9e69b889claireho ) 658527f654740f2a26ad62a5c155af9199af9e69b889claireho { 6586b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("ERROR: parse failed - expected 5.06E-27, 8 - returned %d, %i", 6587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble(), parsePos.getIndex()); 658827f654740f2a26ad62a5c155af9199af9e69b889claireho } 658927f654740f2a26ad62a5c155af9199af9e69b889claireho} 659027f654740f2a26ad62a5c155af9199af9e69b889claireho 6591b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() { 6592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test that number formats are properly inherited from es_419 */ 6594b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* These could be subject to change if the CLDR data changes */ 6595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* parentLocaleTests[][2]= { 6596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* locale ID */ /* expected */ 6597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_CO", "1.250,75" }, 6598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_CR", "1.250,75" }, 6599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES", "1.250,75" }, 6600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_GQ", "1.250,75" }, 6601b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_MX", "1,250.75" }, 6602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_US", "1,250.75" }, 6603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_VE", "1.250,75" }, 6604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 6605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString s; 6607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(int i=0; i < (int)(sizeof(parentLocaleTests)/sizeof(parentLocaleTests[i])); i++){ 6609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 6610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *localeID = parentLocaleTests[i][0]; 6611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString expected(parentLocaleTests[i][1], -1, US_INV); 6612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho expected = expected.unescape(); 6613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char loc[256]={0}; 6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uloc_canonicalize(localeID, loc, 256, &status); 6615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status); 6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)){ 6617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status)); 6618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 6619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s.remove(); 6621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt->format(1250.75, s); 6622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(s!=expected){ 6623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln(UnicodeString("FAIL: Expected: ")+expected 6624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString(" Got: ") + s 6625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 6626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)){ 6628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"FAIL: Status " + (int32_t)status); 6629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete fmt; 6631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 6634103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 6636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API. 6637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 6638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() { 6639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 6640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status); 6641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CHECK_DATA(status, "NumberingSystem::getAvailableNames()") 6642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t nsCount = availableNumberingSystems->count(status); 6644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( nsCount < 36 ) { 6645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 36, got %d",nsCount); 6646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* A relatively simple test of the API. We call getAvailableNames() and cycle through */ 6649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* each name returned, attempting to create a numbering system based on that name and */ 6650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* verifying that the name returned from the resulting numbering system is the same */ 6651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* one that we initially thought. */ 6652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t len; 6654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for ( int32_t i = 0 ; i < nsCount ; i++ ) { 6655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *nsname = availableNumberingSystems->next(&len,status); 6656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status); 6657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( uprv_strcmp(nsname,ns->getName()) ) { 6658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: Numbering system name didn't match for name = %s\n",nsname); 6659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete ns; 6662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete availableNumberingSystems; 6665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid 6668103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void) 6669103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 6670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(pattern,"#",1); 6671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(pattern,"#",1); 6672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(infstr,"INF",3); 6674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(infstr,"INF",3); 6675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(nanstr,"NAN",3); 6677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(nanstr,"NAN",3); 6678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar outputbuf[50] = {0}; 6680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 6681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status); 6682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 6683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: error in unum_open() - %s", u_errorName(status)); 6684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 6685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status); 6688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status); 6689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 6690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: error setting symbols"); 6691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double inf = uprv_getInfinity(); 6694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN); 6696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0); 6697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UFieldPosition position = { 0, 0, 0}; 6699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_formatDouble(fmt,inf,outputbuf,50,&position,&status); 6700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( u_strcmp(infstr, outputbuf)) { 6702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf); 6703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_close(fmt); 6706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h" 6709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() { 6711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49 671254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n", 6713103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 671454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) { 671554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 671654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) { 671754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("Note: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is %d. Decrease the #define? sizeof(DecimalFormat)=%d\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE, sizeof(DecimalFormat)); 671854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6719103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 672054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped."); 6721103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 6722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 672354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // get some additional case 672454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 672554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 672654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000",""),status); 672754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = 1; 672854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "0001"; 672954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 673054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 673154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 673254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 673354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")); 673454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 673554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")); 673654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6737103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 673854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 673954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 674054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 674154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MIN; // -9223372036854775808L; 674254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 674354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 674454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 674554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 674654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 674754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "-9223372036854775808"; 674854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 674954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 675054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 675154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 675254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 675354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 675454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 675554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6756103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 675754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 675854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 675954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 676054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MAX; // -9223372036854775808L; 676154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 676254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 676354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 676454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 676554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 676654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "9223372036854775807"; 676754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 676854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 676954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 677054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 677154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 677254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 677354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 677454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6775103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 677654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 677754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 677854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 677954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = 0; 678054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 678154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 678254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 678354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 678454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 678554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "0000000000000000000"; 678654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 678754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 678854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 678954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 679054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 679154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 679254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 679354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6794103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 679554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 679654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 679754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 679854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MIN + 1; 679954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "-9223372036854775807"; 680054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 680154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 680254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 680354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 680454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 680554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 680654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 680754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 680954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 681054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 681154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 681254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) { 681354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) { 681454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 681554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 681654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) { 681754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 681854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 681954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 682054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 682154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 6822103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 682559d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) { 682659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": "); 682759d709d503bab6e2b61931737e662dd293b40578ccornelius 682859d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *u = f.toUFormattable(); 682959d709d503bab6e2b61931737e662dd293b40578ccornelius logln(); 683059d709d503bab6e2b61931737e662dd293b40578ccornelius if (u == NULL) { 683159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error: f.toUFormattable() retuned NULL."); 683259d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 683359d709d503bab6e2b61931737e662dd293b40578ccornelius } 683459d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: comparing Formattable with UFormattable", file, line); 683559d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + toString(f)); 683659d709d503bab6e2b61931737e662dd293b40578ccornelius 683759d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 683859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode valueStatus = U_ZERO_ERROR; 683959d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType expectUType = UFMT_COUNT; // invalid 684059d709d503bab6e2b61931737e662dd293b40578ccornelius 684159d709d503bab6e2b61931737e662dd293b40578ccornelius UBool triedExact = FALSE; // did we attempt an exact comparison? 684259d709d503bab6e2b61931737e662dd293b40578ccornelius UBool exactMatch = FALSE; // was the exact comparison true? 684359d709d503bab6e2b61931737e662dd293b40578ccornelius 684459d709d503bab6e2b61931737e662dd293b40578ccornelius switch( f.getType() ) { 684559d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDate: 684659d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DATE; 684759d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus)); 684859d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 684959d709d503bab6e2b61931737e662dd293b40578ccornelius break; 685059d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDouble: 685159d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DOUBLE; 685259d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus)); 685359d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 685459d709d503bab6e2b61931737e662dd293b40578ccornelius break; 685559d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kLong: 685659d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_LONG; 685759d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus)); 685859d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 685959d709d503bab6e2b61931737e662dd293b40578ccornelius break; 686059d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kString: 686159d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_STRING; 686259d709d503bab6e2b61931737e662dd293b40578ccornelius { 686359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str; 686459d709d503bab6e2b61931737e662dd293b40578ccornelius f.getString(str); 686559d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 686659d709d503bab6e2b61931737e662dd293b40578ccornelius const UChar* uch = ufmt_getUChars(u, &len, &valueStatus); 686759d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_SUCCESS(valueStatus)) { 686859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str2(uch, len); 686959d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue("UChar* NULL-terminated", uch[len]==0); 687059d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (str == str2); 687159d709d503bab6e2b61931737e662dd293b40578ccornelius } 687259d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 687359d709d503bab6e2b61931737e662dd293b40578ccornelius } 687459d709d503bab6e2b61931737e662dd293b40578ccornelius break; 687559d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kArray: 687659d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_ARRAY; 687759d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 687859d709d503bab6e2b61931737e662dd293b40578ccornelius { 687959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count = ufmt_getArrayLength(u, &valueStatus); 688059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count2; 688159d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable *array2 = f.getArray(count2); 688259d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = assertEquals(fileLine + " array count", count, count2); 688359d709d503bab6e2b61931737e662dd293b40578ccornelius 688459d709d503bab6e2b61931737e662dd293b40578ccornelius if(exactMatch) { 688559d709d503bab6e2b61931737e662dd293b40578ccornelius for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) { 688659d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus); 688759d709d503bab6e2b61931737e662dd293b40578ccornelius if(*Formattable::fromUFormattable(uu) != (array2[i])) { 688859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i, 688959d709d503bab6e2b61931737e662dd293b40578ccornelius (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i])); 689059d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 689159d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 689259d709d503bab6e2b61931737e662dd293b40578ccornelius if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) { 689359d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 689459d709d503bab6e2b61931737e662dd293b40578ccornelius } 689559d709d503bab6e2b61931737e662dd293b40578ccornelius } 689659d709d503bab6e2b61931737e662dd293b40578ccornelius } 689759d709d503bab6e2b61931737e662dd293b40578ccornelius } 689859d709d503bab6e2b61931737e662dd293b40578ccornelius } 689959d709d503bab6e2b61931737e662dd293b40578ccornelius break; 690059d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kInt64: 690159d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_INT64; 690259d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus)); 690359d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 690459d709d503bab6e2b61931737e662dd293b40578ccornelius break; 690559d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kObject: 690659d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_OBJECT; 690759d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus)); 690859d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 690959d709d503bab6e2b61931737e662dd293b40578ccornelius break; 691059d709d503bab6e2b61931737e662dd293b40578ccornelius } 691159d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType uType = ufmt_getType(u, &status); 691259d709d503bab6e2b61931737e662dd293b40578ccornelius 691359d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(status)) { 691459d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status)); 691559d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 691659d709d503bab6e2b61931737e662dd293b40578ccornelius } 691759d709d503bab6e2b61931737e662dd293b40578ccornelius 691859d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != expectUType) { 691959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType); 692059d709d503bab6e2b61931737e662dd293b40578ccornelius } 692159d709d503bab6e2b61931737e662dd293b40578ccornelius 692259d709d503bab6e2b61931737e662dd293b40578ccornelius if(triedExact) { 692359d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(valueStatus)) { 692459d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus)); 692559d709d503bab6e2b61931737e662dd293b40578ccornelius } else if(!exactMatch) { 692659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: failed exact match for the Formattable type", file, line); 692759d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 692859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: exact match OK", file, line); 692959d709d503bab6e2b61931737e662dd293b40578ccornelius } 693059d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 693159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: note, did not attempt exact match for this formattable type", file, line); 693259d709d503bab6e2b61931737e662dd293b40578ccornelius } 693359d709d503bab6e2b61931737e662dd293b40578ccornelius 693459d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u)) 693559d709d503bab6e2b61931737e662dd293b40578ccornelius && f.isNumeric()) { 693659d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode convStatus = U_ZERO_ERROR; 693759d709d503bab6e2b61931737e662dd293b40578ccornelius 693859d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != UFMT_INT64) { // may fail to compare 693959d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus)); 694059d709d503bab6e2b61931737e662dd293b40578ccornelius } 694159d709d503bab6e2b61931737e662dd293b40578ccornelius 694259d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) { 694359d709d503bab6e2b61931737e662dd293b40578ccornelius StringPiece fDecNum = f.getDecimalNumber(convStatus); 694459d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1 694559d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 694659d709d503bab6e2b61931737e662dd293b40578ccornelius const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus); 694759d709d503bab6e2b61931737e662dd293b40578ccornelius#else 694859d709d503bab6e2b61931737e662dd293b40578ccornelius // copy version 694959d709d503bab6e2b61931737e662dd293b40578ccornelius char decNumChars[200]; 695059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus); 695159d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 695259d709d503bab6e2b61931737e662dd293b40578ccornelius 695359d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) { 695459d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + decNumChars); 695559d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars length==", len, fDecNum.length()); 695659d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data()); 695759d709d503bab6e2b61931737e662dd293b40578ccornelius } 695859d709d503bab6e2b61931737e662dd293b40578ccornelius 695959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionF = U_ZERO_ERROR; 696059d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t l = f.getInt64(int64ConversionF); 696159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionU = U_ZERO_ERROR; 696259d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t r = ufmt_getInt64(u, &int64ConversionU); 696359d709d503bab6e2b61931737e662dd293b40578ccornelius 696459d709d503bab6e2b61931737e662dd293b40578ccornelius if( (l==r) 696559d709d503bab6e2b61931737e662dd293b40578ccornelius && ( uType != UFMT_INT64 ) // int64 better not overflow 696659d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionU) 696759d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) { 696859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: OK: 64 bit overflow", file, line); 696959d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 697059d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " as int64 ==", l, r); 697159d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF); 697259d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU); 697359d709d503bab6e2b61931737e662dd293b40578ccornelius } 697459d709d503bab6e2b61931737e662dd293b40578ccornelius } 697559d709d503bab6e2b61931737e662dd293b40578ccornelius } 697659d709d503bab6e2b61931737e662dd293b40578ccornelius return exactMatch || !triedExact; 697759d709d503bab6e2b61931737e662dd293b40578ccornelius} 697859d709d503bab6e2b61931737e662dd293b40578ccornelius 697959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) { 698059d709d503bab6e2b61931737e662dd293b40578ccornelius { 698159d709d503bab6e2b61931737e662dd293b40578ccornelius // test that a default formattable is equal to Formattable() 698259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 698359d709d503bab6e2b61931737e662dd293b40578ccornelius LocalUFormattablePointer defaultUFormattable(ufmt_open(&status)); 698459d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("calling umt_open", status); 698559d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable defaultFormattable; 698659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 698759d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 698859d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 698959d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 699059d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 699159d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 699259d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable", 699359d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 699459d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable())))); 699559d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable", 699659d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 699759d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultFormattable.toUFormattable()))); 699859d709d503bab6e2b61931737e662dd293b40578ccornelius assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()", 699959d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 700059d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultUFormattable.getAlias()))); 700159d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable); 700259d709d503bab6e2b61931737e662dd293b40578ccornelius } 700359d709d503bab6e2b61931737e662dd293b40578ccornelius // test some random Formattables 700459d709d503bab6e2b61931737e662dd293b40578ccornelius { 700559d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(ucal_getNow(), Formattable::kIsDate); 700659d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 700759d709d503bab6e2b61931737e662dd293b40578ccornelius } 700859d709d503bab6e2b61931737e662dd293b40578ccornelius { 700959d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((double)1.61803398874989484820); // golden ratio 701059d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 701159d709d503bab6e2b61931737e662dd293b40578ccornelius } 701259d709d503bab6e2b61931737e662dd293b40578ccornelius { 701359d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon 701459d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 701559d709d503bab6e2b61931737e662dd293b40578ccornelius } 701659d709d503bab6e2b61931737e662dd293b40578ccornelius { 701759d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/ 701859d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 701959d709d503bab6e2b61931737e662dd293b40578ccornelius } 702059d709d503bab6e2b61931737e662dd293b40578ccornelius { 702159d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f("Hello world."); // should be invariant? 702259d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 702359d709d503bab6e2b61931737e662dd293b40578ccornelius } 702459d709d503bab6e2b61931737e662dd293b40578ccornelius { 702559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 702659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg 702759d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a StringPiece", status2); 702859d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 702959d709d503bab6e2b61931737e662dd293b40578ccornelius } 703059d709d503bab6e2b61931737e662dd293b40578ccornelius { 703159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 703259d709d503bab6e2b61931737e662dd293b40578ccornelius UObject *obj = new Locale(); 703359d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(obj); 703459d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a Formattable from a default constructed Locale()", status2); 703559d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 703659d709d503bab6e2b61931737e662dd293b40578ccornelius } 703759d709d503bab6e2b61931737e662dd293b40578ccornelius { 703859d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable array[] = { 703959d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable(ucal_getNow(), Formattable::kIsDate), 704059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((int32_t)4), 704159d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((double)1.234), 704259d709d503bab6e2b61931737e662dd293b40578ccornelius }; 704359d709d503bab6e2b61931737e662dd293b40578ccornelius 704459d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fa(array, 3); 704559d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, fa); 704659d709d503bab6e2b61931737e662dd293b40578ccornelius } 704759d709d503bab6e2b61931737e662dd293b40578ccornelius} 704859d709d503bab6e2b61931737e662dd293b40578ccornelius 704959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) { 705059d709d503bab6e2b61931737e662dd293b40578ccornelius double input[] = { 705159d709d503bab6e2b61931737e662dd293b40578ccornelius 0, 0, 705259d709d503bab6e2b61931737e662dd293b40578ccornelius 0.1, -0.1, 705359d709d503bab6e2b61931737e662dd293b40578ccornelius 123, -123, 705459d709d503bab6e2b61931737e662dd293b40578ccornelius 12345, -12345, 705559d709d503bab6e2b61931737e662dd293b40578ccornelius 123.45, -123.45, 705659d709d503bab6e2b61931737e662dd293b40578ccornelius 123.44501, -123.44501, 705759d709d503bab6e2b61931737e662dd293b40578ccornelius 0.001234, -0.001234, 705859d709d503bab6e2b61931737e662dd293b40578ccornelius 0.00000000123, -0.00000000123, 705959d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000000000000000123, -0.0000000000000000000123, 706059d709d503bab6e2b61931737e662dd293b40578ccornelius 1.2, -1.2, 706159d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000012344501, -0.0000000012344501, 706259d709d503bab6e2b61931737e662dd293b40578ccornelius 123445.01, -123445.01, 706359d709d503bab6e2b61931737e662dd293b40578ccornelius 12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0, 706459d709d503bab6e2b61931737e662dd293b40578ccornelius }; 706559d709d503bab6e2b61931737e662dd293b40578ccornelius const char* expected[] = { 706659d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00", "0.00", 706759d709d503bab6e2b61931737e662dd293b40578ccornelius "0.100", "-0.100", 706859d709d503bab6e2b61931737e662dd293b40578ccornelius "123", "-123", 706959d709d503bab6e2b61931737e662dd293b40578ccornelius "12345", "-12345", 707059d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 707159d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 707259d709d503bab6e2b61931737e662dd293b40578ccornelius "0.001234", "-0.001234", 707359d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00000000123", "-0.00000000123", 707459d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000000000000000123", "-0.0000000000000000000123", 707559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.20", "-1.20", 707659d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000012345", "-0.0000000012345", 707759d709d503bab6e2b61931737e662dd293b40578ccornelius "123450", "-123450", 707859d709d503bab6e2b61931737e662dd293b40578ccornelius "12345000000000000000000000000000000", "-12345000000000000000000000000000000", 707959d709d503bab6e2b61931737e662dd293b40578ccornelius }; 708059d709d503bab6e2b61931737e662dd293b40578ccornelius 708159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 708259d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 708359d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 708459d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 708559d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status,"NumberFormat::createInstance") 708659d709d503bab6e2b61931737e662dd293b40578ccornelius 708759d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 708859d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 708959d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(5); 709059d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setGroupingUsed(false); 709159d709d503bab6e2b61931737e662dd293b40578ccornelius 709259d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 709359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult; 709459d709d503bab6e2b61931737e662dd293b40578ccornelius for (unsigned int i = 0; i < sizeof(input)/sizeof(double); ++i) { 709559d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(input[i], result); 709659d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult(expected[i]); 709759d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != expectedResult) { 709859d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result); 709959d709d503bab6e2b61931737e662dd293b40578ccornelius } 710059d709d503bab6e2b61931737e662dd293b40578ccornelius result.remove(); 710159d709d503bab6e2b61931737e662dd293b40578ccornelius } 710259d709d503bab6e2b61931737e662dd293b40578ccornelius} 710359d709d503bab6e2b61931737e662dd293b40578ccornelius 710459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() { 710559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 710659d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 710759d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 710859d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 710959d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 711059d709d503bab6e2b61931737e662dd293b40578ccornelius 711159d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 711259d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(3); 711359d709d503bab6e2b61931737e662dd293b40578ccornelius 711459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 711559d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(0.0, result); 711659d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != "0") { 711759d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: 0, got " + result); 711859d709d503bab6e2b61931737e662dd293b40578ccornelius } 711959d709d503bab6e2b61931737e662dd293b40578ccornelius} 712059d709d503bab6e2b61931737e662dd293b40578ccornelius 712159d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() { 712259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 712359d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 712459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 712559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 712659d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 712759d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status)); 712859d709d503bab6e2b61931737e662dd293b40578ccornelius return; 712959d709d503bab6e2b61931737e662dd293b40578ccornelius } 713059d709d503bab6e2b61931737e662dd293b40578ccornelius 713159d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 713259d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 713359d709d503bab6e2b61931737e662dd293b40578ccornelius } 713459d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 713559d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 713659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 713759d709d503bab6e2b61931737e662dd293b40578ccornelius } 713859d709d503bab6e2b61931737e662dd293b40578ccornelius 713959d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 714059d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 714159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 714259d709d503bab6e2b61931737e662dd293b40578ccornelius } 714359d709d503bab6e2b61931737e662dd293b40578ccornelius 714459d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 714559d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 714659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 714759d709d503bab6e2b61931737e662dd293b40578ccornelius } 714859d709d503bab6e2b61931737e662dd293b40578ccornelius 714959d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 715059d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(6); 715159d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 715259d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 715359d709d503bab6e2b61931737e662dd293b40578ccornelius } 715459d709d503bab6e2b61931737e662dd293b40578ccornelius 715559d709d503bab6e2b61931737e662dd293b40578ccornelius} 715659d709d503bab6e2b61931737e662dd293b40578ccornelius 715759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() { 715859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 715959d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status); 716059d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 716159d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 716259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 716359d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 716459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u200e-0,5"); 716559d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 716659d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 716759d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 716859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Expected -0,5 to parse for Farsi."); 716959d709d503bab6e2b61931737e662dd293b40578ccornelius } 717059d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 717159d709d503bab6e2b61931737e662dd293b40578ccornelius} 717259d709d503bab6e2b61931737e662dd293b40578ccornelius 717359d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() { 717459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 717559d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status); 717659d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 717759d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 717859d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 717959d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 718059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u208B0.5"); 718159d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 718259d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 718359d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 718459d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Expected ") + value + UnicodeString(" to parse.")); 718559d709d503bab6e2b61931737e662dd293b40578ccornelius } 718659d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 718759d709d503bab6e2b61931737e662dd293b40578ccornelius} 718859d709d503bab6e2b61931737e662dd293b40578ccornelius 718959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() { 719059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 719159d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols custom(Locale::getUS(), status); 719259d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormatSymbols constructor"); 719359d709d503bab6e2b61931737e662dd293b40578ccornelius 719459d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*"); 719559d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^"); 719659d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":"); 719759d709d503bab6e2b61931737e662dd293b40578ccornelius 719859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString pat(" #,##0.00"); 719959d709d503bab6e2b61931737e662dd293b40578ccornelius pat.insert(0, (UChar)0x00A4); 720059d709d503bab6e2b61931737e662dd293b40578ccornelius 720159d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat fmt(pat, custom, status); 720259d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormat constructor"); 720359d709d503bab6e2b61931737e662dd293b40578ccornelius 720459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numstr("* 1^234:56"); 720559d709d503bab6e2b61931737e662dd293b40578ccornelius expect2(fmt, (Formattable)((double)1234.56), numstr); 720659d709d503bab6e2b61931737e662dd293b40578ccornelius} 720759d709d503bab6e2b61931737e662dd293b40578ccornelius 720859d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct { 720959d709d503bab6e2b61931737e662dd293b40578ccornelius const char * locale; 721059d709d503bab6e2b61931737e662dd293b40578ccornelius UBool lenient; 721159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numString; 721259d709d503bab6e2b61931737e662dd293b40578ccornelius double value; 721359d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem; 721459d709d503bab6e2b61931737e662dd293b40578ccornelius 721559d709d503bab6e2b61931737e662dd293b40578ccornelius 721659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() { 721759d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem items[] = { 721859d709d503bab6e2b61931737e662dd293b40578ccornelius // locale lenient numString value 721959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("12"), 12 }, 722059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("12"), 12 }, 722159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("-23"), -23 }, 722259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("-23"), -23 }, 722359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("- 23"), -23 }, 722459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 722559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 722659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 722759d709d503bab6e2b61931737e662dd293b40578ccornelius 722859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 722959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 723059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 723159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 723259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 723359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 723459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 723559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 723659d709d503bab6e2b61931737e662dd293b40578ccornelius 723759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 723859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 723959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 724059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 724159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 724259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 724359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 724459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 724559d709d503bab6e2b61931737e662dd293b40578ccornelius 724659d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("12"), 12 }, 724759d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("12"), 12 }, 724859d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("-23"), -23 }, 724959d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("-23"), -23 }, 725059d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("- 23"), -23 }, 725159d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 725259d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 725359d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 725459d709d503bab6e2b61931737e662dd293b40578ccornelius 725559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 725659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 725759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 725859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 725959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 726059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 726159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 726259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 726359d709d503bab6e2b61931737e662dd293b40578ccornelius 726459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("12"), 12 }, 726559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("12"), 12 }, 726659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("-23"), -23 }, 726759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("-23"), -23 }, 726859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("- 23"), -23 }, 726959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 727059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 727159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 727259d709d503bab6e2b61931737e662dd293b40578ccornelius 727359d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 727459d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 727559d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 727659d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 727759d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"), -67 }, 727859d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 727959d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 728059d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"), -67 }, 728159d709d503bab6e2b61931737e662dd293b40578ccornelius 728259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 728359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 728459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 728559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 728659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 728759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 728859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 728959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 729059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 729159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 729259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"), -67 }, 729359d709d503bab6e2b61931737e662dd293b40578ccornelius // terminator 729459d709d503bab6e2b61931737e662dd293b40578ccornelius { NULL, 0, UnicodeString(""), 0 }, 729559d709d503bab6e2b61931737e662dd293b40578ccornelius }; 729659d709d503bab6e2b61931737e662dd293b40578ccornelius 729759d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem * itemPtr; 729859d709d503bab6e2b61931737e662dd293b40578ccornelius for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) { 729959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 730059d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status); 730159d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 730259d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->setLenient(itemPtr->lenient); 730359d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fmtobj; 730459d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 730559d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->parse(itemPtr->numString, fmtobj, ppos); 730659d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == itemPtr->numString.length()) { 730759d709d503bab6e2b61931737e662dd293b40578ccornelius double parsedValue = fmtobj.getDouble(status); 730859d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status) || parsedValue != itemPtr->value) { 730959d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue); 731059d709d503bab6e2b61931737e662dd293b40578ccornelius } 731159d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 731259d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex()); 731359d709d503bab6e2b61931737e662dd293b40578ccornelius } 731459d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 731559d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status)); 731659d709d503bab6e2b61931737e662dd293b40578ccornelius } 731759d709d503bab6e2b61931737e662dd293b40578ccornelius delete numfmt; 731859d709d503bab6e2b61931737e662dd293b40578ccornelius } 731959d709d503bab6e2b61931737e662dd293b40578ccornelius} 732059d709d503bab6e2b61931737e662dd293b40578ccornelius 7321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 7322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode mode; 7323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double value; 7324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expected; 7325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data; 7326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 732795bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keepvoid NumberFormatTest::TestFastPathConsistent11524() { 732895bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep UErrorCode status = U_ZERO_ERROR; 732995bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep NumberFormat *fmt = NumberFormat::createInstance("en", status); 733095bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep fmt->setMaximumIntegerDigits(INT32_MIN); 733195bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep UnicodeString appendTo; 733295bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep assertEquals("", "0", fmt->format(123, appendTo)); 733395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep appendTo.remove(); 733495bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep assertEquals("", "0", fmt->format(12345, appendTo)); 733595bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep} 733695bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep 7337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0. 7339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() { 7340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const Test10419Data items[] = { 7341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundCeiling, 1.488, "2"}, 7342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundDown, 1.588, "1"}, 7343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundFloor, 1.888, "1"}, 7344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfDown, 1.5, "1"}, 7345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfEven, 2.5, "2"}, 7346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfUp, 2.5, "3"}, 7347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundUp, 1.5, "2"}, 7348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 7349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status)); 7351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Failure creating DecimalFormat %s", u_errorName(status)); 7353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; i < (int32_t) (sizeof(items) / sizeof(items[0])); ++i) { 7356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setRoundingMode(items[i].mode); 7357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setMaximumFractionDigits(0); 7358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 7359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (items[i].expected != decfmt->format(items[i].value, actual)) { 7360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Expected " + items[i].expected + ", got " + actual); 7361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() { 7366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt is now 'a' 7367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("'I''ll'*a###.##", status); 7369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fmt.getPadCharacterString() != UnicodeString("a")) { 7376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Padding character should be 'a'."); 7377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt ought to be '*' since that is the default and no 7381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // explicit padding char is specified in the new pattern. 7382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.applyPattern("AA#,##0.00ZZ", status); 7383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Oops this still prints 'a' even though we changed the pattern. 7385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fmt.getPadCharacterString() != UnicodeString("*")) { 7386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("applyPattern did not clear padding character."); 7387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() { 7391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat format("0.00E0", status); 7393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode roundingModes[] = { 7399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundCeiling, 7400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundDown, 7401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundFloor, 7402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfDown, 7403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfEven, 7404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfUp, 7405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundUp}; 7406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *descriptions[] = { 7407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Ceiling", 7408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Down", 7409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Floor", 7410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half down", 7411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half even", 7412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half up", 7413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round up"}; 7414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016}; 7417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3", 7420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3", 7423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"}; 7426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7429fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016}; 7437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3", 7440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3", 7441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3", 7442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3", 7443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"}; 7446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0 7456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {0.0, -0.0}; 7458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0"}; 7467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/ 7477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15}; 7480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25", 7483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25"}; 7489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15}; 7500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25", 7505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25"}; 7509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35}; 7520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25", 7523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25"}; 7529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35}; 7540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 7543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 7544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25", 7545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25"}; 7549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() { 7561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("0.00E0", status); 7563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!assertSuccess("Formt creation", status)) { 7564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString out; 7567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.format(-0.0, out); 7568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("format", "-0.00E0", out); 7569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding( 7572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat& format, 7573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const double *values, 7574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *expected, 7575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const DecimalFormat::ERoundingMode *roundingModes, 7576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *descriptions, 7577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t valueSize, 7578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t roundingModeSize) { 7579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; i < roundingModeSize; ++i) { 7580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setRoundingMode(roundingModes[i]); 7581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t j = 0; j < valueSize; j++) { 7582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString currentExpected(expected[i * valueSize + j]); 7583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius currentExpected = currentExpected.unescape(); 7584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 7585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.format(values[j], actual); 7586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (currentExpected != actual) { 7587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char buffer[256]; 7588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sprintf( 7589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius buffer, 7590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "For %s value %f, expected ", 7591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions[i], 7592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values[j]); 7593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln(UnicodeString(buffer) + currentExpected + ", got " + actual); 7594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() { 7600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING; 7602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)1234.5, "$1,234.50", TRUE, status); 7605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-1234.5, "($1,234.50)", TRUE, status); 7607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)0, "$0.00", TRUE, status); 7609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-0.2, "($0.20)", TRUE, status); 7611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 7612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status); 7613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 7614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status); 7615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("de_DE", style, status), 7616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status); 7617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186 7620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() { 7621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status); 7623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormatSymbols for root"); 7625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString pattern("#,##0.###"); 7628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status); 7629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7630fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormat using root symbols"); 7631fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7632fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7634fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone(); 7635fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32); 7636fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (*fmtClone == *fmtBase) { 7637fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth"); 7638fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7639fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtClone; 7640fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7641fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtBase; 7642fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7643fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid NumberFormatTest::TestCurrencyUsage() { 7645f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius double agent = 123.567; 7646f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7647f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UErrorCode status; 7648f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius DecimalFormat *fmt; 7649f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7650f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Digits 7651f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Note that as of CLDR 26: 7652f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // * TWD switches from 0 decimals to 2; PKR still has 0, so change test to that 7653f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // * CAD and all other currencies that rounded to .05 no longer do 7654f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7655f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_PKR("en_US@currency=PKR"); 7656f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7657f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7658f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7659f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7660f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CURRENCY, status); 7661f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CURRENCY", status, TRUE) == FALSE) { 7662f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7663f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7664f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7665f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original; 7666f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,original); 7667f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 1", UnicodeString("PKR124"), original); 7668f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7669f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // test the getter here 7670f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 7671f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test usage getter - standard", curUsage, UCURR_USAGE_STANDARD); 7672f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7673f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7674f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7675f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CASH_CURRENCY, status); 7676f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CASH", status, TRUE) == FALSE) { 7677f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7678f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7679f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7680f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7681f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // must be usage = cash 7682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 7683f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test usage getter - cash", curUsage, UCURR_USAGE_CASH); 7684f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7685f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_currency; 7686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,cash_currency); 7687f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 2", UnicodeString("PKR124"), cash_currency); 7688f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7690f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Rounding 7692f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7693f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_CAD("en_US@currency=CAD"); 7694f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7695f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7696f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7697f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 7698f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 7699f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7700f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7701f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original_rounding; 7703f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, original_rounding); 7704f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 3", UnicodeString("CA$123.57"), original_rounding); 7705f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7706f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7707f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 7708f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 7709f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7710f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7711f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7712f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7713f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_rounding_currency; 7714f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cash_rounding_currency); 7715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 4", UnicodeString("CA$123.57"), cash_rounding_currency); 7716f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7717f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7718f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Test the currency change 7720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7721f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const UChar CUR_PKR[] = {0x50, 0x4B, 0x52, 0}; 7722f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7723f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7724f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7725f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 7726f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 7727f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7730f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7731f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 7732f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 7733f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7734f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7735f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7736f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7737f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cur_original; 7738f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cur_original); 7739f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 5", UnicodeString("CA$123.57"), cur_original); 7740f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7741f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrency(CUR_PKR, status); 7742f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertSuccess("Set currency to PKR", status); 7743f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7744f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString PKR_changed; 7745f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, PKR_changed); 7746f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 6", UnicodeString("PKR124"), PKR_changed); 7747f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7748f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7749f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 7750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 7751