numfmtst.cpp revision 1b7d32f919554dda9c193b32188251337bc756f1
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT: 395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep * Copyright (c) 1997-2015, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Modification History: 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/15/99 helena Ported to HPUX 10/11 CC. 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "numfmtst.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 18b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/localpointer.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/measfmt.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "digitlst.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "textfile.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tokiter.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "charstr.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "putilimp.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "winnmtst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <float.h> 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 31b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <stdlib.h> 32b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cstring.h" 3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/numsys.h" 3454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "fmtableimp.h" 35b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 36b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_CACHE_DEBUG 1 3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "stdio.h" /* for sprintf */ 3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// #include "iostream" // for cout 39b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 40b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_DEBUG 1 41b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUR[] = {69,85,82,0}; // "EUR" 43b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD" 4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 4559d709d503bab6e2b61931737e662dd293b40578ccornelius 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class NumberFormatTest 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { errcheckln(status, UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 5127f654740f2a26ad62a5c155af9199af9e69b889claireho#define CHECK_DATA(status,str) if (U_FAILURE(status)) { dataerrln(UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_BEGIN; 568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencySign); 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrency); 588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParse); 598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding487); 608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestQuotes); 618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponential); 628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns); 638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // Upgrade to alphaWorks - liu 5/99 658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponent); 668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific); 678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPad); 688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns2); 698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSecondaryGrouping); 708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSurrogateSupport); 718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAPI); 728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyObject); 748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyPatterns); 758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius //TESTCASE_AUTO(TestDigitList); 768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestWhiteSpaceParsing); 778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestComplexCurrency); // This test removed because CLDR no longer uses choice formats in currency symbols. 788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRegCurrency); 798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSymbolsWithBadLocale); 808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAdoptDecimalFormatSymbols); 818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific2); 838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientificGrouping); 848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestInt64); 858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPerMill); 878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestIllegalPatterns); 888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCases); 898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyNames); 918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyAmount); 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyUnit); 938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCoverage); 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestJB3832); 958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHost); 968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHostClone); 978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormat); 988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding); 998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNonpositiveMultiplier); 1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNumberingSystems); 1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSpaceParsing); 1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestMultiCurrencySign); 1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormatForMixParsing); 1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimalFormatCurrencyParse); 1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyIsoPluralFormat); 1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyParsing); 1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParseCurrencyInUCurr); 1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatAttributes); 1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFieldPositionIterator); 1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimal); 1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFractionDigits); 1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponentParse); 1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExplicitParents); 1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestLenientParse); 1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAvailableNumberingSystems); 1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRoundingPattern); 1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(Test9087); 1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatFastpaths); 1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormattableSize); 12059d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestUFormattable); 12159d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestSignificantDigits); 12259d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestShowZero); 12359d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCompatibleCurrencies); 12459d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestBug9936); 12559d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithFaLocale); 12659d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithAlternateMinusSign); 12759d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCustomCurrencySignAndSeparator); 12859d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseSignsAndMarks); 129fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10419RoundingWith0FractionDigits); 130fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10468ApplyPattern); 131fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestRoundingScientific10542); 132fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestZeroScientific10547); 133fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestAccountingCurrency); 134fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestEquality); 135f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCurrencyUsage); 1361b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TESTCASE_AUTO(TestDoubleLimit11439); 13795bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep TESTCASE_AUTO(TestFastPathConsistent11524); 1388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_END; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 14050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test API (increase code coverage) 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestAPI(void) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test API"); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = NumberFormat::createInstance("root", status); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("unable to create format object - %s", u_errorName(status)); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test != NULL) { 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumIntegerDigits(10); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumIntegerDigits(2); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumFractionDigits(10); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumFractionDigits(2); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(bla, result, pos, status); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Yuck... Formatted a duck... As a number!"); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.remove(); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t ll = 12; 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(ll, result); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != "12.00"){ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("format int64_t error"); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ParsePosition ppos; 178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(test->parseCurrency("",ppos)); 179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // old test for (U_FAILURE(status)) was bogus here, method does not set status! 180103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (ppos.getIndex()) { 181103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed empty string as currency"); 18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 18350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 18450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete test; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18859d709d503bab6e2b61931737e662dd293b40578ccorneliusclass StubNumberFormat :public NumberFormat{ 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 19059d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat(){}; 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const { 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo.append((UChar)0x0033); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const { 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NumberFormat::format(number, appendTo, pos); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse(const UnicodeString& , 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& ) const {} 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse( const UnicodeString& , 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ) const {} 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID(void) const { 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char classID = 0; 21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (UClassID)&classID; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual Format* clone() const {return NULL;} 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCoverage(void){ 21859d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat stub; 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString agent("agent"); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t num = 4; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stub.format(num, agent, pos) != UnicodeString("agent3")){ 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)"); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test various patterns 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestPatterns(void) 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 2336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Could not construct DecimalFormatSymbols - %s", u_errorName(status)); return; } 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "#.#", "#.", ".#", "#" }; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* num[] = { "0", "0.", ".0", "0" }; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<pat_length; ++i) 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[i], sym, status); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; } 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newp; fmt.toPattern(newp); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(newp == newpat[i])) 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] + 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + newp + " seen instead"); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(s == num[i])) 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] + 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + s + " seen instead"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits()); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 26050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug 26150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug 26250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestDigitList(void) 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // API coverage for DigitList 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list1; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.append('1'); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.fDecimalAt = 1; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list2; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list2.set((int32_t)1); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (list1 != list2) { 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator!= or set failed "); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(list1 == list2)) { 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator== or set failed "); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test exponential pattern 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestExponential(void) 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 2916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; } 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// The following #if statements allow this test to be built and run on 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// platforms that do not have standard IEEE numerics. For example, 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// S/390 doubles have an exponent range of -78 to +75. For the 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following #if statements to work, float.h must define 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// DBL_MAX_10_EXP to be a compile-time constant. 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This section may be expanded as needed. 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if DBL_MAX_10_EXP > 300 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = (int32_t)(sizeof(val) / sizeof(val[0])); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valFormat[] = 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E300, -3.141593E-271, 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E300, -3.142E-271, 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif DBL_MAX_10_EXP > 70 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 }; 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = sizeof(val) / sizeof(val[0]); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* valFormat[] = 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71", 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72", 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072", 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]" 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E70, -3.141593E-71, 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E70, -3.142E-71, 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't test double conversion 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* val = 0; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = 0; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char** valFormat = 0; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* valParse = 0; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Warning: Skipping double conversion tests"); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lval[] = { 0, -1, 1, 123456789 }; 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lval_length = (int32_t)(sizeof(lval) / sizeof(lval[0])); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* lvalFormat[] = 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "-1E0", "1E0", "1.2346E8", 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E000", "-1E000", "1E000", "123.4568E006", 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "[1E0]", "1E0", "1.235E8" 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lvalParse[] = 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123456800, 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123500000, 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ival = 0, ilval = 0; 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t p=0; p<pat_length; ++p) 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[p], sym, status); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; } 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" + 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pattern) + "\""); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t v; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<val_length; ++v) 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s); 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + val[v] + " -format-> " + s); 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != valFormat[v+ival]) 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double a; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useEpsilon = FALSE; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong) 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getLong(); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (af.getType() == Formattable::kDouble) { 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getDouble(); 399103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // S/390 will show a failure like this: 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -3.141592652999999e-271 -format-> -3.1416E-271 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -parse-> -3.1416e-271 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| FAIL: Expected -3.141599999999999e-271 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // To compensate, we use an epsilon-based equality 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test on S/390 only. We don't want to do this in 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // general because it's less exacting. 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru useEpsilon = TRUE; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-numeric Formattable returned"); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Use epsilon comparison as necessary 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((useEpsilon && 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) || 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (!useEpsilon && a != valParse[v+ival])) 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]); 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)" should be (" + s.length() + " chars) -> " + valParse[v+ival]); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<lval_length; ++v) 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (*(NumberFormat*)&fmt).format(lval[v], s); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + lval[v] + "L -format-> " + s); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != lvalFormat[v+ilval]) 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong || 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru af.getType() == Formattable::kInt64) { 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t a = af.getLong(status); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a != lvalParse[v+ilval]) 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Double: " + af.getDouble() 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + ", Long: " + af.getLong()); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ival += val_length; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ilval += lval_length; 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientific2() { 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num = 12.34; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(TRUE); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$1.23E1"); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(FALSE); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientificGrouping() { 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("##0.00E0",status); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .01234, "12.3E-3"); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .1234, "123E-3"); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1.234, "1.23E0"); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 12.34, "12.3E0"); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 123.4, "123E0"); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1234., "1.23E3"); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void setFromString(DigitList& dl, const char* str) { 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char c; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool decimalSet = FALSE; 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.clear(); 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((c = *str++)) { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c == '-') { 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '+') { 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '.') { 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSet = TRUE; 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.append(c); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!decimalSet) { 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}*/ 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestInt64() { 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#.#E0",status); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setMaximumFractionDigits(20); 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)0, "0E0"); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)-1, "-1E0"); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)1, "1E0"); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9"); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9"); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18"); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18"); 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // also test digitlist 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* int64_t int64max = U_INT64_MAX; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64min = U_INT64_MIN; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64maxstr = "9223372036854775807"; 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64minstr = "-9223372036854775808"; 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fail("fail: "); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test max int64 value 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList dl; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64maxstr); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr + " didn't fit"); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of max int64 value (1 shy of min int64 value) 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr + " didn't fit"); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test min int64 value 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64minstr); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64minstr + " didn't fit"); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of min int 64 value (1 more than max int64 value) 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; // won't fit 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dl.fitsIntoInt64(FALSE)) { 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-(" + int64minstr + ") didn't fit"); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the handling of quotes 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestQuotes(void) 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString *pat; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status); 6056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 6076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 6086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a'fo''o'b#"); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status); 61250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString s; 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 61650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="afo'ob123")) 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected afo'ob123"); 61850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a''b#"); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(*pat, *sym, status); 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="a'b123")) 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected a'b123"); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns. 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrencySign(void) 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar currency = 0x00A4; 6456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 6466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 6476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 6486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 6496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append("#,##0.00;-"). 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append("#,##0.00"); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(pat, *sym, status); 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 65827f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "$1,234.56") dataerrln((UnicodeString)"FAIL: Expected $1,234.56"); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(- 1234.56, s); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 66227f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "-$1,234.56") dataerrln((UnicodeString)"FAIL: Expected -$1,234.56"); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00" 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append(currency). 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" #,##0.00;"). 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append(currency). 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" -#,##0.00"); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, *sym, status); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(1234.56, s); 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 67527f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD 1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD 1,234.56"); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(-1234.56, s); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 67927f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD -1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD -1,234.56"); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 6826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + u_errorName(status)); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 68450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); } 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::escape(UnicodeString& s) 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<s.length(); ++i) 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar c = s[(int32_t)i]; 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c <= (UChar)0x7F) buf += c; 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += (UChar)0x5c; buf += (UChar)0x55; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0xF000) >> 12); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x0F00) >> 8); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x00F0) >> 4); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString(c & 0x000F); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (s = buf); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* testCases[][2]= { 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* locale ID */ /* expected */ 71254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ca_ES_PREEURO", "\\u20A7\\u00A01.150" }, 713c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"de_LU_PREEURO", "1,150\\u00A0F" }, 714c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" }, 715b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_BE_PREEURO", "1.150,50\\u00A0BEF" }, 716fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 71754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"eu_ES_PREEURO", "\\u20A7\\u00A01.150" }, 718c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 719b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"it_IT_PREEURO", "ITL\\u00A01.150" }, 720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"pt_PT_PREEURO", "1,150$50\\u00A0\\u200B"}, // per cldrbug 7670 72127f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=JPY", "\\u00A51,150"}, 72227f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=jpy", "\\u00A51,150"}, 72327f654740f2a26ad62a5c155af9199af9e69b889claireho {"en-US-u-cu-jpy", "\\u00A51,150"} 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns. 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrency(void) 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createCurrencyInstance()"); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; currencyFmt->format(1.50, s); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre ici a..........." + s); 740c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0$"))) 741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$"); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status); 74659d709d503bab6e2b61931737e662dd293b40578ccornelius (void)len; // Suppress unused variable warning. 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en Allemagne a.." + s); 750f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!(s==CharsToUnicodeString("1,50\\u00A0DM"))) 751f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM"); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en France a....." + s); 758c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0F"))) 759c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F"); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 76350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int i=0; i < (int)(sizeof(testCases)/sizeof(testCases[i])); i++){ 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID = testCases[i][0]; 767c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString expected(testCases[i][1], -1, US_INV); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = expected.unescape(); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(localeID, loc, 256, &status); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Could not create currency formatter for locale %s",localeID); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 77950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 78050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 78950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the Currency object handling, new as of ICU 2.2. 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyObject() { 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 79750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* fmt = 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createCurrencyInstance(Locale::getUS(), ec); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 8016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getCurrencyInstance(US) - %s", u_errorName(ec)); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale null("", "", ""); 80750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, "$1,234.56"); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 8178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "$1,234.56"); 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getCurrencyInstance(FRANCE)"); 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 83050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 834f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 1234.56, CharsToUnicodeString("1 235 JPY")); // Yen 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 8378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "1 234,56 CHF"); // no more 0.05 rounding here, see cldrbug 5548 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "1 234,56 $US"); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 84750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do rudimentary testing of parsing. 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestParse(void) 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString arg("0"); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* format = new DecimalFormat("00", status); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; format->parse(arg, n, status); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"parse(" + arg + ") = " + n.getLong()); 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (n.getType() != Formattable::kLong || 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0"); 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 8656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errcheckln(status, (UnicodeString)"FAIL: Status " + u_errorName(status)); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(Exception e) { 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"Exception caught: " + e); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 87150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 874b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientAffixTestCases[] = { 875103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1)", 876103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1)", 877103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1 )", 878103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1 )" 879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientMinusTestCases[] = { 882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-5", 883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u22125", 884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u20105" 885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 887b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientCurrencyTestCases[] = { 888103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1,000", 889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1,000", 890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1000", 891103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1000", 892103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1 000.00", 893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1 000.00", 894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1\\u00A0000.00", 895103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "1000.00" 896b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 897b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 89859d709d503bab6e2b61931737e662dd293b40578ccornelius// changed from () to - per cldrbug 5674 899b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativeCurrencyTestCases[] = { 90059d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1,000", 90159d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1,000", 90259d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1000", 90359d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1000", 90459d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1 000.00", 90559d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1 000.00", 90659d709d503bab6e2b61931737e662dd293b40578ccornelius "- $ 1,000.00 ", 90759d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1\\u00A0000.00", 90859d709d503bab6e2b61931737e662dd293b40578ccornelius "-1000.00" 909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 910b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 911b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientPercentTestCases[] = { 912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25%", 913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25%", 914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25 %", 915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25 %", 916b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25\\u00A0%", 917b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25" 918b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 919b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 920b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativePercentTestCases[] = { 921b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25%", 922b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " -25%", 923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25%", 924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25 %", 925b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25 %", 926b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25 %", 927b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25\\u00A0%", 928b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25", 929b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25" 930b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 931b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 932b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *strictFailureTestCases[] = { 933b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " 1000", 934b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "10,00", 935b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1,000,.0" 936b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 937b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 938b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define ARRAY_SIZE(array) ((int32_t) (sizeof (array) / sizeof(array[0]))) 939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 941b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Test lenient parsing. 942b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 943b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid 944b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormatTest::TestLenientParse(void) 945b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 946b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *format = new DecimalFormat("(#,##0)", status); 948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Formattable n; 949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (format == NULL || U_FAILURE(status)) { 951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create DecimalFormat (#,##0) - %s", u_errorName(status)); 952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->setLenient(TRUE); 954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientAffixTestCases); t += 1) { 955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientAffixTestCases[t]); 956b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 957b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->parse(testCase, n, status); 958b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 959b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 960b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || 961b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1) { 962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\""); 963b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 964b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 965b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 966b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete format; 967b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 968b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 969b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale en_US("en_US"); 970b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale sv_SE("sv_SE"); 971b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 972b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *mFormat = NumberFormat::createInstance(sv_SE, UNUM_DECIMAL, status); 973b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 974b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 975b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (sv_SE, UNUM_DECIMAL) - %s", u_errorName(status)); 976b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 977b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 978b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) { 979b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 980b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 981b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 982b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 983b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 984b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 985b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 987b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 988b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 989b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 990b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 991b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 992b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat = NumberFormat::createInstance(en_US, UNUM_DECIMAL, status); 993b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 994b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 995b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_DECIMAL) - %s", u_errorName(status)); 996b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 998b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(lenientMinusTestCases); t += 1) { 999b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 1000b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1001b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 1002b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1003b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1004b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 1005b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 1006b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1007b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1008b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1009b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 1010b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1011b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1012b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *cFormat = NumberFormat::createInstance(en_US, UNUM_CURRENCY, status); 1013b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1014b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (cFormat == NULL || U_FAILURE(status)) { 1015b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_CURRENCY) - %s", u_errorName(status)); 1016b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1017b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->setLenient(TRUE); 1018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientCurrencyTestCases); t += 1) { 1019b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientCurrencyTestCases[t]); 1020b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1021b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1023b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1024b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1026b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\""); 1027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1028b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1031b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativeCurrencyTestCases); t += 1) { 1032b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativeCurrencyTestCases[t]); 1033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1035b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1036b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1037b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != -1000) { 1039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\""); 1040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete cFormat; 1045b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1046b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *pFormat = NumberFormat::createPercentInstance(en_US, status); 1048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (pFormat == NULL || U_FAILURE(status)) { 1050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat::createPercentInstance (en_US) - %s", u_errorName(status)); 1051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->setLenient(TRUE); 1053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientPercentTestCases); t += 1) { 1054b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientPercentTestCases[t]); 1055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != 0.25) { 1061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\""); 1062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE (lenientNegativePercentTestCases); t += 1) { 1067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativePercentTestCases[t]); 1068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != -0.25) { 1074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\""); 1075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete pFormat; 1080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1081b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1082b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Test cases that should fail with a strict parse and pass with a 1083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // lenient parse. 1084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *nFormat = NumberFormat::createInstance(en_US, status); 1085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1086b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (nFormat == NULL || U_FAILURE(status)) { 1087b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US) - %s", u_errorName(status)); 1088b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1089b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // first, make sure that they fail with a strict parse 1090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) { 1091b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (! U_FAILURE(status)) { 1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // then, make sure that they pass with a lenient parse 1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->setLenient(TRUE); 1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t t = 0; t < ARRAY_SIZE(strictFailureTestCases); t += 1) { 1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete nFormat; 1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// ------------------------------------- 1123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method. 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestRounding487(void) 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *nf = NumberFormat::createInstance(status); 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createInstance()"); 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00159999, 4, "0.0016"); 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00995, 4, "0.01"); 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.3995, 3, "12.4"); 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.4999, 0, "12"); 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, - 19.5, 0, "-20"); 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value. 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSecondaryGrouping(void) { 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols ct"); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat f("#,##,###", US, status); 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat ct"); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,34,56,789"); 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,##,###"); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.applyPattern("#,###", status); 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.setSecondaryGroupingSize(4); 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,3456,789"); 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,####,###"); 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status); 116827f654740f2a26ad62a5c155af9199af9e69b889claireho CHECK_DATA(status, "createInstance(hi_IN)"); 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = (int32_t)1876543210L; 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g->format(l, out); 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g; 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // expect "1,87,65,43,210", but with Hindi digits 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890123 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = TRUE; 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (out.length() != 14) { 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<out.length(); ++i) { 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool expectGroup = FALSE; 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (i) { 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectGroup = TRUE; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Later -- fix this to get the actual grouping 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // character from the resource bundle. 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isGroup = (out.charAt(i) == 0x002C); 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isGroup != expectGroup) { 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) { 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL Expected " + l + 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" + 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok " + l + 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"" + 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestWhiteSpaceParsing(void) { 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), ec); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("a b#0c ", US, ec); 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 12156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: Constructor - %s", u_errorName(ec)); 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currencies whose display name is a ChoiceFormat. 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestComplexCurrency() { 122750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// UErrorCode ec = U_ZERO_ERROR; 1229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Locale loc("kn", "IN", ""); 1230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec); 1231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// if (U_SUCCESS(ec)) { 1232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00")); 1233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Use .00392625 because that's 2^-8. Any value less than 0.005 is fine. 1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky 1235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00")); 1236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50")); 1237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00")); 1238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00")); 1239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } else { 1240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// errln("FAIL: getCurrencyInstance(kn_IN)"); 1241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } 1242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// delete fmt; 1243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 124750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected) 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf.setMaximumFractionDigits(maxFractionDigits); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; nf.format(x, out); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out); 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestExponent(void) { 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt1(UnicodeString("0.###E0"), US, status); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E0)"); 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status); 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E+0)"); 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt1, n, "1.234E3"); 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt2, n, "1.234E+3"); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt1, "1.234E+3", n); // Either format should parse "E+3" 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestScientific(void) { 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test pattern round-trip 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000", 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0.###E0;[0.###E0]" }; 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t PAT_length = (int32_t)(sizeof(PAT) / sizeof(PAT[0])); 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t DIGITS[] = { 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // min int, max int, min frac, max frac 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1, 0, 0, // "#E0" 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 4, // "0.####E0" 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2, 2, 3, 3, // "00.000E00" 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 3, 0, 4, // "##0.####E000" 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 3, // "0.###E0;[0.###E0]" 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<PAT_length; ++i) { 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(PAT[i]); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat df(pat, US, status); 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.toPattern(pat2); 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == pat2) { 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok Pattern rt \"") + 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL Pattern rt \"") + 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure digit counts match what we expect 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (df.getMinimumIntegerDigits() != DIGITS[4*i] || 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() != DIGITS[4*i+1] || 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() != DIGITS[4*i+2] || 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() != DIGITS[4*i+3]) { 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"" + pat + 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" min/max int; min/max frac = ") + 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumIntegerDigits() + "/" + 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() + ";" + 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() + "/" + 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() + ", expect " + 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i] + "/" + 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+1] + ";" + 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+2] + "/" + 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+3]); 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test the constructor for default locale. We have to 132950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // manually set the default locale, as there is no 133050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // guarantee that the default locale has the same 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // scientific format. 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale def = Locale::getDefault(); 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getUS(), status); 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(status), 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(def, status); 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345E4", status); 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1E4", status); 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getUS(), status), 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E3", status); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.00001, 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.35E3", status); 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12345, 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.345E3", status); 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status), 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1,2345678901E4", status); 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.####E0", US, status), 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789.12345e-9, 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "789.12E-9", status); 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 780.e-9, 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "780E-9", status); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat(".###E0", US, status), 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45678.0, 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".457E5", status); 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(".###E0", US, status), 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 0, 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".0E0", status); 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat[] { new DecimalFormat("#E0", US), 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("##E0", US), 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("####E0", US), 137650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("0E0", US), 137750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("00E0", US), 137850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("000E0", US), 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(45678000), 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new String[] { "4.5678E7", 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "45.678E6", 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "4567.8E4", 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "5E7", 138550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "46E6", 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "457E5", 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4.5678E7", status); 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##E0", US, status), 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "45.678E6", status); 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("####E0", US, status), 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4567.8E4", status); 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "5E7", status); 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("00E0", US, status), 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "46E6", status); 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("000E0", US, status), 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "457E5", status); 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("###E0", US, status), 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.0000123), "12.3E-6", 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.000123), "123E-6", 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.00123), "1.23E-3", 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.0123), "12.3E-3", 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.123), "123E-3", 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1.23), "1.23E0", 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(12.3), "12.3E0", 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(123), "123E0", 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1230), "1.23E3", 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0000123, "12.3E-6", status); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.000123, "123E-6", status); 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00123, "1.23E-3", status); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0123, "12.3E-3", status); 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.123, "123E-3", status); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.23, "1.23E0", status); 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12.3, "12.3E0", status); 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123.0, "123E0", status); 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230.0, "1.23E3", status); 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0.#E+00", US, status), 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.00012), "1.2E-04", 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(12000), "1.2E+04", 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00012, "1.2E-04", status); 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12000, "1.2E+04", status); 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPad(void) { 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, "^-1.3", status); 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0E0______ g-m/s^2", status); 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333.333E-3_ g-m/s^2", status); 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0______ g-m/s^2", status); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0.33333__ g-m/s^2", status); 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding before a sign 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)"; 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "xxxxxxxxxx(10.0)", status); 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"xxxxxxx(1,000.0)", status); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"xxx(1,000,000.0)", status); 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "xxxxxxxx(100.37)", status); 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "xxxxx(10,456.37)", status); 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "xx(1,120,456.37)", status); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "xxxxxxxxxxxx10.0", status); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"xxxxxxxxx1,000.0", status); 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"xxxxx1,000,000.0", status); 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "xxxxxxxxxx100.37", status); 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "xxxxxxx10,456.37", status); 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "xxxx1,120,456.37", status); 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "xx112,045,600.37", status); 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding between a sign and a number 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)"; 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "(10.0xxxxxxxxxx)", status); 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"(1,000.0xxxxxxx)", status); 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"(1,000,000.0xxx)", status); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "(100.37xxxxxxxx)", status); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "(10,456.37xxxxx)", status); 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "(1,120,456.37xx)", status); 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "10.0xxxxxxxxxxxx", status); 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"1,000.0xxxxxxxxx", status); 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"1,000,000.0xxxxx", status); 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "100.37xxxxxxxxxx", status); 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "10,456.37xxxxxxx", status); 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "1,120,456.37xxxx", status); 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "112,045,600.37xx", status); 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing the setPadCharacter(UnicodeString) and getPadCharacterString() 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString padString("P"); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString); 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter((UnicodeString)"^"); 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^"); 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //commented untill implementation is complete 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fmt.setPadCharacter((UnicodeString)"^^^"); 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^"); 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.remove(); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0061); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0302); 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000}; 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern(patternChars); 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString); 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPatterns2(void) { 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 158050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar hat = 0x005E; /*^*/ 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat); 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat); 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat); 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat); 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^$#", ILLEGAL); 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^$", ILLEGAL); 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix, 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, (UChar)0x0078 /*x*/); 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix, 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, (UChar)0x0078 /*x*/); 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix, 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10, (UChar)0x0061 /*a*/); 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern("AA#,##0.00ZZ", status); 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(hat); 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(10); 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforePrefix); 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "*^AA#,##0.00ZZ"); 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix); 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00*^ZZ"); 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterSuffix); 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00ZZ*^"); 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exp("AA*^#,##0.00ZZ", ""); 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(12); 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterPrefix); 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, exp); 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(13); 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^##,##0.00ZZ"); 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(14); 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 345678901234 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^###,##0.00ZZ"); 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(15); 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012345 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(16); 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123456 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^#,###,##0.00ZZ"); 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSurrogateSupport(void) { 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols custom(Locale::getUS(), status); 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal"); 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus"); 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus "); 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent"); 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternStr("*\\U00010000##.##", ""); 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", ""); 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), expStr, status); 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", custom, status), 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##.##", custom, status), 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, " minus 1decimal3", status); 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0exponent0 g-m/s^2", status); 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333decimal333exponent minus 3 g-m/s^2", status); 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0 g-m/s^2", status); 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0decimal33333 g-m/s^2", status); 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString zero((UChar32)0x10000); 167127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString one((UChar32)0x10001); 167227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString two((UChar32)0x10002); 167327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString five((UChar32)0x10005); 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); 167527f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, one); 167627f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kTwoDigitSymbol, two); 167727f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kFiveDigitSymbol, five); 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", ""); 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.000", custom, status), 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.25, expStr, status); 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30); 1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money"); 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator"); 1687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'"); 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", ""); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent"); 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = "'You''ve lost ' -0.00 %' of your money today'"; 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus You've lost minus 2000decimal00 percent of your money today", ""); 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyPatterns(void) { 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, locCount; 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* locs = NumberFormat::getAvailableLocales(locCount); 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<locCount; ++i) { 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec); 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec)); 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure currency formats do not have a variable number 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // of fraction digits 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min = nf->getMinimumFractionDigits(); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t max = nf->getMaximumFractionDigits(); 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != max) { 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a, b; 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.125, b); 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " min fraction digits != max fraction digits; " 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + escape(a) + 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; x 1.125 => " + escape(b)); 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure EURO currency formats have exactly 2 fraction digits 172727f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat* df = dynamic_cast<DecimalFormat*>(nf); 172827f654740f2a26ad62a5c155af9199af9e69b889claireho if (df != NULL) { 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, df->getCurrency()) == 0) { 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != 2 || max != 2) { 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a; 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is a EURO format but it does not have 2 fraction digits; " 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(a)); 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRegCurrency(void) { 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar USD[4]; 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", USD, 4, &status); 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar YEN[4]; 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("ja_JP", YEN, 4, &status); 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar TMP[4]; 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar QQQ[] = {0x51, 0x51, 0x51, 0}; 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 17556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Unable to get currency for locale, error %s", u_errorName(status)); 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status); 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status); 176150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", TMP, 4, &status); 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(YEN, TMP) != 0) { 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return YEN registered for en_US"); 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO"); 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 177150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status); 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fallbackLen) { 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: tried to fallback en_XX_BAR"); 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 177750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enkey, &status)) { 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enkey"); 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucurr_forLocale("en_US", TMP, 4, &status); 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return USD for en_US after unregister of en_US"); 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 178750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US"); 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 179250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_BLAH", TMP, 4, &status); 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: could not find USD for en_US_BLAH after unregister of en"); 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 179850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enUSEUROkey, &status)) { 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enUSEUROkey"); 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, TMP) != 0) { 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO"); 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyNames(void) { 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Do a basic check of getName() 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // USD { "US$", "US Dollar" } // 04/04/1792- 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/ 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/ 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/ 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/ 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isChoiceFormat; 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 18216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru const UBool possibleDataError = TRUE; 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 182350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // THE LOCALE DATA before diving into the code. 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(SYMBOL_NAME)", 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(LONG_NAME)", 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US Dollar"), 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 18346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1837c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en", 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en_CA", 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1848103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius assertEquals("USD.getName(SYMBOL_NAME) in en_AU", 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US$"), 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en_AU", 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 1855c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en_AU", 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 18586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USX.getName(LONG_NAME)", 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("USX"), 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USX, "en_US", 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 18646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 18656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_getName", ec); 186750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default or fallback warning is being returned. JB 4239. 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat, 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 187350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (es_ES fallback)", 18746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat, 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 187850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (zh_TW fallback)", 18796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat, 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 188350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (en_US default)", 188450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_USING_DEFAULT_WARNING == ec || U_USING_FALLBACK_WARNING == ec, TRUE); 188550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1886b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucurr_getName(CAD, "ti", UCURR_LONG_NAME, &isChoiceFormat, 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 1888b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho assertTrue("ucurr_getName (ti default)", 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 189050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default warning is being returned when falling back to root. JB 4536. 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat, 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 189450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (cy default to root)", 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 189650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO add more tests later 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyUnit(void){ 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD[] = {63, 63, 63, 0}; /*???*/ 1904fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD2[] = {63, 63, 65, 0}; /*???*/ 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu(USD, ec); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyUnit", ec); 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar * r = cu.getISOCurrency(); // who is the buffer owner ? 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("getISOCurrency()", USD, r); 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu2(cu); 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(cu2 == cu)){ 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit copy constructed object should be same"); 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone(); 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*cu3 == cu)){ 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit cloned object should be same"); 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1920fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad(BAD, ec); 1921fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 1922fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (cu.getIndex() == bad.getIndex()) { 1923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of different currencies should differ."); 1924fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1925fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad2(BAD2, ec); 1926fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 1927fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad2.getIndex() != bad.getIndex()) { 1928fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of unrecognized currencies should be the same."); 1929fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1930fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad == bad2) { 1931fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Different unrecognized currencies should not be equal."); 1932fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1933fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius bad = bad2; 1934fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad != bad2) { 1935fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Currency unit assignment should be the same."); 1936fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cu3; 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyAmount(void){ 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca(9, USD, ec); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyAmount", ec); 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca2(ca); 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount copy constructed object should be same"); 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ca2=ca; 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount assigned object should be same"); 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 195550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone(); 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*ca3 == ca)){ 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount cloned object should be same"); 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ca3; 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSymbolsWithBadLocale(void) { 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locDefault; 1965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius static const char *badLocales[] = { 1966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length < ULOC_FULLNAME_CAPACITY 1967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME", 1968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length > ULOC_FULLNAME_CAPACITY 1970103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME" 1971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; // expect U_USING_DEFAULT_WARNING for both 1972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unsigned int i; 1974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (i = 0; i < sizeof(badLocales) / sizeof(char*); i++) { 1975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName = badLocales[i]; 1976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale locBad(localeName); 1977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1978103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString intlCurrencySymbol((UChar)0xa4); 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1980103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius intlCurrencySymbol.append((UChar)0xa4); 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 1983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locBad, status); 1984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 1985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormatSymbols mySymbols(status); 1986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (status != U_USING_DEFAULT_WARNING) { 1987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols should return U_USING_DEFAULT_WARNING."); 1988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { 1990103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols does not have the right locale.", locBad.getName()); 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; 1993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { 1994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum); 1995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString)); 1996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (symbolString.length() == 0 1997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol 1998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) 1999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 2000103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); 2001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locDefault, status); 2006103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behave the same, except for memory ownership semantics. (No 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * version of this test on Java, since Java has only one method.) 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestAdoptDecimalFormatSymbols(void) { 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 20196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "Fail: DecimalFormatSymbols constructor - %s", u_errorName(ec)); 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(" #,##0.00"); 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.insert(0, (UChar)0x00A4); 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, sym, ec); 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "$ 2,350.75") { 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 203627f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: " + str + ", expected $ 2,350.75"); 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptDecimalFormatSymbols(sym); 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 205327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(pat, sym, ec); 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 206750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym2(Locale::getUS(), ec); 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.setDecimalFormatSymbols(sym2); 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.format(2350.75, str); 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 208127f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPerMill() { 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(ctou("###.###\\u2030"), ec); 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("DecimalFormat ct", ec)) return; 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###\\u2030", 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctou("485.7\\u2030"), fmt.format(0.4857, str)); 209250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), ec); 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m")); 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2("", sym, ec); 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.applyLocalizedPattern("###.###m", ec); 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("setup", ec)) return; 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###m", 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "485.7m", fmt2.format(0.4857, str)); 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generic test for patterns that should be legal/illegal. 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestIllegalPatterns() { 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test cases: 2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "-:" for illegal patterns 2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "+:" for legal patterns 2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* DATA[] = { 2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Unquoted special characters in the suffix are illegal 2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "-:000.000|###", 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "+:000.000'|###'", 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; DATA[i]; ++i) { 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat=DATA[i]; 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool valid = (*pat) == '+'; 2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat += 2; 2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, ec); // locale doesn't matter here 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec) == valid) { 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: pattern \"%s\": %s", 2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, u_errorName(ec)); 2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 21266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: pattern \"%s\" should have %s; got %s", 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, (valid?"succeeded":"failed"), 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* KEYWORDS[] = { 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*0*/ "ref=", // <reference pattern to parse numbers> 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*1*/ "loc=", // <locale for formats> 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*2*/ "f:", // <pattern or '-'> <number> <exp. string> 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*3*/ "fp:", // <pattern or '-'> <number> <exp. string> <exp. number> 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*4*/ "rt:", // <pattern or '-'> <(exp.) number> <(exp.) string> 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*5*/ "p:", // <pattern or '-'> <string> <exp. number> 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*6*/ "perr:", // <pattern or '-'> <invalid string> 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'> 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return an integer representing the next token from this 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iterator. The integer will be an index into the given list, or 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -1 if there are no more tokens, or -2 if the token is not on 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the list. 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t keywordIndex(const UnicodeString& tok) { 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; KEYWORDS[i]!=0; ++i) { 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok==KEYWORDS[i]) { 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a CurrencyAmount using the given NumberFormat, with 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the 'delim' character separating the number and the currency. 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void parseCurrencyAmount(const UnicodeString& str, 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NumberFormat& fmt, 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar delim, 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& result, 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ec) { 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num, cur; 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = str.indexOf(delim); 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(0, i, num); 2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(i+1, INT32_MAX, cur); 2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(num, n, ec); 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec)); 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCases() { 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TextFile reader("NumberFormatTestCases.txt", "UTF8", ec); 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 21856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't open NumberFormatTestCases.txt"); 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TokenIterator tokens(&reader); 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en", "US", ""); 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *ref = 0, *fmt = 0; 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *mfmt = 0; 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat, tok, mloc, str, out, where, currAmt; 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) { 2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru where = UnicodeString("(") + tokens.getLineNumber() + ") "; 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cmd = keywordIndex(tok); 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (cmd) { 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ref= <reference pattern> 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref = new DecimalFormat(tok, 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormatSymbols(Locale::getUS(), ec), ec); 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error constructing DecimalFormat"); 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto error; 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // loc= <locale> 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 221827f654740f2a26ad62a5c155af9199af9e69b889claireho loc = Locale::createFromName(CharString().appendInvariantChars(tok, ec).data()); 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: // f: 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: // fp: 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: // rt: 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: // p: 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = tok; 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec); 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec)); 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 2 || cmd == 3 || cmd == 4) { 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // f: <pattern or '-'> <number> <exp. string> 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fp: <pattern or '-'> <number> <exp. string> <exp. number> 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // rt: <pattern or '-'> <number> <string> 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num; 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".format(" + num + ")", 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, fmt->format(n, out.remove(), ec)); 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { // fp: 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd != 2) { // != f: 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, m, ec); 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 226350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // p: <pattern or '-'> <string to parse> <exp. number> 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expstr; 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(expstr, ec)) goto error; 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable exp, n; 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(expstr, exp, ec); 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, n, ec); 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exp, n); 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: // fpc: 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mloc = tok; 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt = MeasureFormat::createCurrencyFormat( 228527f654740f2a26ad62a5c155af9199af9e69b889claireho Locale::createFromName( 228627f654740f2a26ad62a5c155af9199af9e69b889claireho CharString().appendInvariantChars(mloc, ec).data()), ec); 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec)); 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2295f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (mfmt == NULL) { 2296f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("FAIL: " + where + "Loc \"" + mloc + "\": skip case using previous locale, no valid MeasureFormat"); 2297f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2298f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2299f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2300f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")", 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, mfmt->format(n, out.remove(), ec)); 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt->parseObject(str, m, ec); 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrency", ec)) { 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")", 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 2320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: source " + str); 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // perr: <pattern or '-'> <invalid string> 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Under construction"); 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: { 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // pat: <pattern> <exp. toPattern, or '-' or 'err'> 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testpat; 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exppat; 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(testpat, ec)) goto error; 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(exppat, ec)) goto error; 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool err = exppat == "err"; 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool existingPat = FALSE; 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testpat == "-") { 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid command \"pat: - err\""); 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru existingPat = TRUE; 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testpat = pat; 2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exppat == "-") exppat = testpat; 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* f = 0; 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec2 = U_ZERO_ERROR; 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (existingPat) { 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = fmt; 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = new DecimalFormat(testpat, ec2); 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec2)) { 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid pattern \"" + testpat + 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" was accepted"); 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + testpat + "\".toPattern()", 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exppat, f->toPattern(pat2)); 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + where + "Invalid pattern \"" + testpat + 2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Valid pattern \"" + testpat + 2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!existingPat) delete f; 2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } break; 2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case -1: 2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Unknown command \"" + tok + "\""); 2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error: 2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec)) { 2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Unexpected EOF"); 2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 23846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec)); 2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done: 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) { 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == b.getType()) { 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a == b; 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == Formattable::kLong) { 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kInt64) { 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getLong() == b.getLong(); 2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 240750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kDouble) { 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double) b.getLong(); 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kInt64) { 2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double)b.getInt64(); 2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kInt64) { 2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getLong(); 2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getDouble(); 2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, n, str, FALSE); 2428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, str, n); 2429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, n, str, FALSE); 2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, str, n); 2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n, 2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, 2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 244027f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 244127f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(*fmt, n, exp); 2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable num; 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, num, status); 2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 245327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status)); 2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (equalValue(num, n)) { 2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + str + "\" x " + 2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num)); 2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 246327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL \"") + str + "\" x " + 2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable num; 2472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(str, num, status); 2473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + str + "\""); 2475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (equalValue(num, n)) { 2478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln(UnicodeString("Ok \"") + str + " = " + 2479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num)); 2480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL \"") + str + " = " + 2482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n, 2487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw; 2489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru FieldPosition pos; 2490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n, saw, pos, status); 2492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw == exp) { 249450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(UnicodeString("Ok ") + toString(n) + 2495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\""); 2497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // We should be able to round-trip the formatted string => 2498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // number => string (but not the other way around: number 2499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // => string => number2, might have number2 != number): 2500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (rt) { 2501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable n2; 2502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(exp, n2, status); 2503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\""); 2505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw2; 2508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw2 != exp) { 2511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " => \"" + saw2 + "\""); 2513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 251650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL ") + toString(n) + 2517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 2519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n, 2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw; 2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n, saw, pos, status); 2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw == exp) { 2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok ") + toString(n) + " x " + 2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\""); 2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // We should be able to round-trip the formatted string => 2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // number => string (but not the other way around: number 2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // => string => number2, might have number2 != number): 2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rt) { 2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n2; 2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(exp, n2, status); 2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 254227f654740f2a26ad62a5c155af9199af9e69b889claireho errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status)); 2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw2; 2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw2 != exp) { 2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => \"" + saw2 + "\""); 2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 255427f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL ") + toString(n) + " x " + 2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n, 2561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString& exp, UBool rt, 2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 256327f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 256427f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(*fmt, n, exp, rt); 2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale, 2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double value, const UnicodeString& string) { 2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat& fmt = * (DecimalFormat*) &nf; 2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar DEFAULT_CURR[] = {45/*-*/,0}; 2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar curr[4]; 2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(curr, DEFAULT_CURR); 2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*locale.getLanguage() != 0) { 2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale(locale.getName(), curr, 4, &ec); 2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_forLocale", ec); 2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr, ec); 2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("DecimalFormat::setCurrency", ec); 2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr); //Deprecated variant, for coverage only 2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(value, s); 2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020); 2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Default display of the number yields "1234.5599999999999" 2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // instead of "1234.56". Use a formatter to fix this. 259150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* f = 2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createInstance(Locale::getUS(), ec); 2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v; 2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Oops; bad formatter. Use default op+= display. 2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru v = (UnicodeString)"" + value; 2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setMaximumFractionDigits(4); 2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setGroupingUsed(FALSE); 2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->format(value, v); 2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s == string) { 2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s)); 2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) + 2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + prettify(string)); 2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) { 2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pat); 2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == exp) { 2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\""); 2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\""); 2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos) { 2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, 0, (UnicodeString)""); 2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, UChar pad) { 2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, width, UnicodeString(pad)); 2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, const UnicodeString& pad) { 2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t apos = 0, awidth = 0; 2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString apadStr; 2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern(pat, status); 2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = fmt.getPadPosition(); 2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = fmt.getFormatWidth(); 2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr=fmt.getPadCharacterString(); 2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = -1; 2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = width; 2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr = pad; 2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (apos == pos && awidth == width && apadStr == pad) { 2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString infoStr; 2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos == ILLEGAL) { 2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr; 2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\" pos=" + apos + infoStr); 2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos + 2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " width=" + awidth + " pad=" + apadStr + 2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + pos + " " + width + " " + pad); 2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 265759d709d503bab6e2b61931737e662dd293b40578ccornelius 265859d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale - FIXME 265959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() { 266059d709d503bab6e2b61931737e662dd293b40578ccornelius/* 2661fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar JPY[] = {0x4A, 0x50, 0x59, 0}; 2662fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar CNY[] = {0x43, 0x4E, 0x59, 0}; 266359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 266459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmt( 266559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getUS(), status)); 266659d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 266759d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Could not create number format instance."); 266859d709d503bab6e2b61931737e662dd293b40578ccornelius return; 266959d709d503bab6e2b61931737e662dd293b40578ccornelius } 267059d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 267159d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\u00A51,235"); 267259d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__); 267359d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\uFFE51,235"); 267459d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 267559d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, CNY, 1235, "CN\\u00A51,235"); 267659d709d503bab6e2b61931737e662dd293b40578ccornelius 267759d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtTW( 267859d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status)); 267959d709d503bab6e2b61931737e662dd293b40578ccornelius 268059d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__); 268159d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\u00A51,235"); 268259d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__); 268359d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\uFFE51,235"); 268459d709d503bab6e2b61931737e662dd293b40578ccornelius 268559d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtJP( 268659d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getJapan(), status)); 268759d709d503bab6e2b61931737e662dd293b40578ccornelius 268859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__); 268959d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\u00A51,235"); 269059d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__); 269159d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\uFFE51,235"); 269259d709d503bab6e2b61931737e662dd293b40578ccornelius 269359d709d503bab6e2b61931737e662dd293b40578ccornelius // more.. 269459d709d503bab6e2b61931737e662dd293b40578ccornelius*/ 269559d709d503bab6e2b61931737e662dd293b40578ccornelius} 269659d709d503bab6e2b61931737e662dd293b40578ccornelius 269759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) { 269859d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 269959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString utext = ctou(text); 270059d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos)); 270159d709d503bab6e2b61931737e662dd293b40578ccornelius if (!ppos.getIndex()) { 270259d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Parse of ") + utext + " should have succeeded."); 270359d709d503bab6e2b61931737e662dd293b40578ccornelius return; 270459d709d503bab6e2b61931737e662dd293b40578ccornelius } 270559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 270659d709d503bab6e2b61931737e662dd293b40578ccornelius 270759d709d503bab6e2b61931737e662dd293b40578ccornelius char theInfo[100]; 270859d709d503bab6e2b61931737e662dd293b40578ccornelius sprintf(theInfo, "For locale %s, string \"%s\", currency ", 270959d709d503bab6e2b61931737e662dd293b40578ccornelius fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(), 271059d709d503bab6e2b61931737e662dd293b40578ccornelius text); 271159d709d503bab6e2b61931737e662dd293b40578ccornelius u_austrcpy(theInfo+uprv_strlen(theInfo), currency); 271259d709d503bab6e2b61931737e662dd293b40578ccornelius 271359d709d503bab6e2b61931737e662dd293b40578ccornelius char theOperation[100]; 271459d709d503bab6e2b61931737e662dd293b40578ccornelius 271559d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 271659d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check amount:"); 271759d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(theOperation, amount == currencyAmount->getNumber().getDouble(status)); 271859d709d503bab6e2b61931737e662dd293b40578ccornelius 271959d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 272059d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check currency:"); 272159d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(theOperation, currency, currencyAmount->getISOCurrency()); 272259d709d503bab6e2b61931737e662dd293b40578ccornelius} 272359d709d503bab6e2b61931737e662dd293b40578ccornelius 272459d709d503bab6e2b61931737e662dd293b40578ccornelius 2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){ 2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID = "pt_PT@currency=PTE"; 2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc(localeID); 2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0\\u200B")); // per cldrbug 7670 2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status); 2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 27336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status)); 2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 273850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 273950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost() 2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2750103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API 2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Win32NumberTest::testLocales(this); 2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2753b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale loc("en_US@compat=host"); 2754b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (UNumberFormatStyle k = UNUM_DECIMAL; 2755b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) { 2756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2757b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status)); 2758b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (!NumberFormat::isStyleSupported(k)) { 2759b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (status != U_UNSUPPORTED_ERROR) { 2760b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAIL: expected style %d to be unsupported - %s", 2761b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 2762b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2763b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 2764b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 2765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (full.isNull() || U_FAILURE(status)) { 2766b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("FAIL: Can't create number instance of style %d for host - %s", 2767b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 2768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString result1; 2771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable number(10.00); 2772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->format(number, result1, status); 2773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't format for host"); 2775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable formattable; 2778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->parse(result1, formattable, status); 2779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't parse for host"); 2781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone() 2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Verify that a cloned formatter gives the same results 2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and is useable after the original has been deleted. 2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This is mainly important on Windows. 2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en_US@compat=host"); 2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate now = Calendar::getNow(); 2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *full = NumberFormat::createInstance(loc, status); 2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (full == NULL || U_FAILURE(status)) { 27986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status)); 2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result1; 2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full->format(now, result1, status); 2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *fullClone = full->clone(); 2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete full; 2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full = NULL; 2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result2; 2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fullClone->format(now, result2, status); 2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: format failure."); 2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result1 != result2) { 2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Clone returned different result from non-clone."); 2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fullClone; 2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat() 2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test is here to increase code coverage. 2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *cloneObj; 2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable toFormat, result; 2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0}; 2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveDefaultLocale = Locale::getDefault(); 2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( Locale::getUK(), status ); 2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("couldn't set default Locale!"); 2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status); 2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( saveDefaultLocale, status ); 2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 28376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Status %s", u_errorName(status)); 2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj = (MeasureFormat *)measureObj->clone(); 2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cloneObj == NULL) { 2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone doesn't work"); 2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status)); 2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->format(toFormat, str, status); 2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->parseObject(str, result, status); 2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->format(toFormat, str, status); 2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->parseObject(str, result, status); 2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*measureObj != *cloneObj) { 2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Cloned object is not equal to the original object"); 2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete measureObj; 2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cloneObj; 2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_USELESS_COLLATOR_ERROR; 2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (MeasureFormat::createCurrencyFormat(status) != NULL) { 2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("createCurrencyFormat should have returned NULL."); 2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */ 2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() { 2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 28826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int roundingIncrements[]={1, 2, 5, 20, 50, 100}; 2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int testValues[]={0, 300}; 2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int j=0; j<2; j++) { 2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) { 2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingMode((DecimalFormat::ERoundingMode)mode); 2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int increment=0; increment<6; increment++) { 2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double base=testValues[j]; 2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double rInc=roundingIncrements[increment]; 2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rInc=1.000000000/rInc; 2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2901c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete df; 2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() { 2905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius struct { 2907103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString pattern; 2908103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double testCase; 2909103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString expected; 2910103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } tests[] = { 2911103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" }, 2912103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"#50", 1230, (UnicodeString)"1250" } 2913103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 2914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t numOfTests = (sizeof(tests)/sizeof(tests[0])); 2915103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString result; 2916103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 2918103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2919103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 2920103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 2921103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2922103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2923103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t i = 0; i < numOfTests; i++) { 2924103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius result.remove(); 2925103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2926103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->applyPattern(tests[i].pattern, status); 2927103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2928103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status)); 2929103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2930103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2931103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->format(tests[i].testCase, result); 2932103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2933103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (result != tests[i].expected) { 2934103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected); 2935103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2936103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2937103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2938103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete df; 2939103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2940103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) { 2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingIncrement(increment); 2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double lastParsed=INT32_MIN; //Intger.MIN_VALUE 2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i=-iterations; i<=iterations;i++) { 2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double iValue=base+(increment*(i*0.1)); 2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double smallIncrement=0.00000001; 2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (iValue!=0) { 2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru smallIncrement*=iValue; 2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //we not only test the value, but some values in a small range around it 2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue-smallIncrement, lastParsed); 2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue, lastParsed); 2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue+smallIncrement, lastParsed); 2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) { 2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString formattedDecimal; 2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double parsed; 2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result; 2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->format(iValue, formattedDecimal, status); 2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error formatting number."); 2966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->parse(formattedDecimal, result, status); 2969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error parsing number."); 2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parsed=result.getDouble(); 2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastParsed>parsed) { 2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Rounding wrong direction! %d > %d", lastParsed, parsed); 2978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return lastParsed; 2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2983c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() { 2984c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2985c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 2986c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 2987c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormat df(UnicodeString("0"), US, status); 2988c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormat(0)"); 298950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2990c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test zero multiplier 2991c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2992c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t mult = df.getMultiplier(); 2993c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(0); 2994c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != mult) { 2995c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(0) did not ignore its zero input"); 2996c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 299750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2998c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test negative multiplier 299950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3000c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-1); 3001c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != -1) { 3002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(-1) ignored its negative input"); 3003c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 3004c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 300550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3006c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1122.123", -1122.123); 3007c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1122.123", 1122.123); 3008c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1.2", -1.2); 3009c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1.2", 1.2); 3010c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 301150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Note: the tests with the final parameter of FALSE will not round trip. 301250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The initial numeric value will format correctly, after the multiplier. 301350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Parsing the formatted text will be out-of-range for an int64, however. 301450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The expect() function could be modified to detect this and fall back 301550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // to looking at the decimal parsed value, but it doesn't. 301650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN, "9223372036854775808", FALSE); 301750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN+1, "9223372036854775807"); 301850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)-123, "123"); 301950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)123, "-123"); 3020c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, U_INT64_MAX-1, "-9223372036854775806"); 302150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MAX, "-9223372036854775807"); 3022c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3023c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-2); 3024c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806"); 302550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2), "-9223372036854775808"); 302650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE); 3027c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3028c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-7); 302950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE); 303050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7), "9223372036854775807"); 3031c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800"); 3032c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3033c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported 3034c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // (right now the big numbers get turned into doubles and lose tons of accuracy) 3035c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX)); 3036c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1)); 3037c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2))); 3038c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2))); 3039c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3040c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it 3041c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3042c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3043c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3044c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3045c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 3046c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 3048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * stringToParse; 3049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPos; 3050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex; 3051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool lenient; 3052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem; 3053c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 305450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() { 3056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the string to be parsed, parsed position, parsed error index 3058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const TestSpaceParsingItem DATA[] = { 3059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // TOTO: Update the following TODOs, some may be handled now 3060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, FALSE}, 3061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, FALSE}, 3062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, FALSE}, 3063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$ 124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 0, 0, FALSE}, // TODO: need to handle space correctly 3068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 0, 3, FALSE}, // TODO: need to handle space correctly 3069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // {"124 $", 5, -1, FALSE}, // TODO: OK or not, need currency spacing rule 3070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 0, 3, FALSE}, 3071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, TRUE}, 3072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, TRUE}, 3073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, TRUE}, 3074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 5, -1, TRUE}, 3075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 5, -1, TRUE}, 3076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 6, -1, TRUE}, 3077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124$", 4, -1, TRUE}, // TODO: need to handle trailing currency correctly 3078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 3, -1, TRUE}, 3079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124 $", 5, -1, TRUE}, // TODO: OK or not, need currency spacing rule 3080b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 4, -1, TRUE}, 3081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3083b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale locale("en_US"); 3084b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status); 3085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 3091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ParsePosition parsePosition(0); 3092b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse); 3093b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPosition = DATA[i].parsedPos; 3094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex = DATA[i].errorIndex; 3095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho foo->setLenient(DATA[i].lenient); 3096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru foo->parse(stringToBeParsed, result, parsePosition); 3098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getIndex() != parsedPosition || 3099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parsePosition.getErrorIndex() != errorIndex) { 3100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")"); 3101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getErrorIndex() == -1 && 310350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result.getType() == Formattable::kLong && 3104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != 124) { 3105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong()); 3106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 3112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword. 3113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 3114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 3115103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName; 3116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double value; 3117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool isRBNF; 3118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *expectedResult; 3119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem; 3120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() { 3122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem DATA[] = { 3124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, 3125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" }, 3126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" }, 312759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" }, 3128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35 3129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ar_MA", 1234.567, FALSE, "1.234,567" }, 3130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" }, 3132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" }, 3133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35 3134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" }, 313654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" }, 3137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { NULL, 0, FALSE, NULL } 3138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 3139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode ec; 314127f654740f2a26ad62a5c155af9199af9e69b889claireho 3142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem *item; 3143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (item = DATA; item->localeName != NULL; item++) { 3144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc = Locale::createFromName(item->localeName); 314650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3147fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *origFmt = NumberFormat::createInstance(loc,ec); 3148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(ec)) { 3149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec)); 3150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius continue; 3151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3152fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Clone to test ticket #10682 3153fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *fmt = (NumberFormat *) origFmt->clone(); 3154fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete origFmt; 3155fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (item->isRBNF) { 3158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 3160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt; 3163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Test bogus keyword value 3167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc4 = Locale::createFromName("en_US@numbers=foobar"); 3169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec); 3170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( ec != U_UNSUPPORTED_ERROR ) { 3171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR"); 3172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt4; 3173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 317527f654740f2a26ad62a5c155af9199af9e69b889claireho ec = U_ZERO_ERROR; 317650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns = NumberingSystem::createInstance(ec); 317750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(ec)) { 317850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec)); 317950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 318050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 318127f654740f2a26ad62a5c155af9199af9e69b889claireho if ( ns != NULL ) { 318227f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getDynamicClassID(); 318327f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getStaticClassID(); 318427f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 318527f654740f2a26ad62a5c155af9199af9e69b889claireho errln("FAIL: getInstance() returned NULL."); 318627f654740f2a26ad62a5c155af9199af9e69b889claireho } 318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 318850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns1 = new NumberingSystem(*ns); 318950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ns1 == NULL) { 319050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: NumberSystem copy constructor returned NULL."); 319150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 319250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 319350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns1; 319450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns; 3195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 319950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() { 3201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][6] = { 3202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the fields in the following test are: 320350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 320450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // currency pattern (with negative pattern), 3205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency number to be formatted, 3206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency symbol name, such as "$" for USD, 3207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency ISO name, such as "USD", 3208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using plural name, such as "US dollars". 3209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for US locale 321050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"}, 321150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"}, 321259d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"}, 3213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for CHINA locale 3214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"}, 3215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"}, 3216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"} 3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0}; 3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString doubleCurrencyStr(doubleCurrencySign); 3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0}; 3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString tripleCurrencyStr(tripleCurrencySign); 3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* locale = DATA[i][0]; 3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat = ctou(DATA[i][1]); 3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][2]); 3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status); 3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j=1; j<=3; ++j) { 3235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // j represents the number of currency sign in the pattern. 3236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (j == 2) { 3237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr); 3238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (j == 3) { 3239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr); 3240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status); 3243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED init DecimalFormat "); 3245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString s; 3249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ((NumberFormat*) fmt)->format(numberToBeFormat, s); 3250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][j+2] is the currency format result using 3257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 'j' number of currency sign. 3258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString currencyFormatResult = ctou(DATA[i][2+j]); 3259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (s.compare(currencyFormatResult)) { 3260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s); 3261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // mix style parsing 3263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int k=3; k<=5; ++k) { 3264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormat = ctou(DATA[i][k]); 3271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseRes; 3273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(oneCurrencyFormat, parseRes, status); 3274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kDouble && 327650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho parseRes.getDouble() != numberToBeFormat) || 3277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kLong && 3278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseRes.getLong() != numberToBeFormat)) { 3279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " + 3280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i + ", " + j + ", " + k); 3281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 329050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() { 3292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status); 3294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* formats[] = { 3299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1,234.56", // string to be parsed 3300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1,234.56", 3301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1,234.56", 3302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1,234.56 US dollars" 3303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 330427f654740f2a26ad62a5c155af9199af9e69b889claireho const CurrencyAmount* curramt = NULL; 3305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) { 3306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(formats[i]); 330727f654740f2a26ad62a5c155af9199af9e69b889claireho logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed); 3308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru curFmt->parseObject(stringToBeParsed, result, status); 3311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 331250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status)); 331350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if (result.getType() != Formattable::kObject || 331427f654740f2a26ad62a5c155af9199af9e69b889claireho (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL || 331527f654740f2a26ad62a5c155af9199af9e69b889claireho curramt->getNumber().getDouble() != 1234.56 || 331627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD) 331727f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 3318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number "); 331927f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getNumber().getDouble() != 1234.56) { 332027f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble()); 3321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 332227f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getISOCurrency() != ISO_CURRENCY_USD) { 332327f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency()); 3324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 333150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() { 3333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Locale.US 3334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status); 3336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat; 3341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currency = 0x00A4; 3342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 3343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00"); 3344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, sym, status); 3345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse"); 3348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][2] = { 3351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // string to be parsed, the parsed result (number) 335350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1.00", "1"}, 335450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1.00", "1"}, 335550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1.00 US dollar", "1"}, 335650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1,234.56", "1234.56"}, 335750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1,234.56", "1234.56"}, 335850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1,234.56 US dollar", "1234.56"}, 3359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 3361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(DATA[i][0]); 3362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double parsedResult = atof(DATA[i][1]); 3363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(stringToBeParsed, result, status); 3366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kDouble && 3368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getDouble() != parsedResult) || 3369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kLong && 3370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != parsedResult)) { 3371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL parse: Expected " + parsedResult); 3372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 337550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 3376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 337850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() { 3380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 338250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 338850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 338959d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"}, 3390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"}, 339159d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"}, 339259d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00\\u7F8E\\u5143"}, 339359d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1234.56", "USD", "US$\\u00A01,234.56", "USD\\u00A01,234.56", "1,234.56\\u7F8E\\u5143"}, 3394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"}, 3395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"}, 339659d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "CNY", "\\uFFE5\\u00A01.00", "CNY\\u00A01.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 339759d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1234.56", "CNY", "\\uFFE5\\u00A01,234.56", "CNY\\u00A01,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"}, 339859d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 339959d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "2", "RUB", "2,00\\u00A0\\u0440\\u0443\\u0431.", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 340059d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "5", "RUB", "5,00\\u00A0\\u0440\\u0443\\u0431.", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 3401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test locale without currency information 340250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"}, 3403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test choice format 340459d709d503bab6e2b61931737e662dd293b40578ccornelius {"es_AR", "1", "INR", "INR1,00", "INR1,00", "1,00 rupia india"}, 3405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 3406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3409b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 341150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) { 3413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 0; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 3414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNumberFormatStyle k = currencyStyles[kIndex]; 3415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 3421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 34236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 342727f654740f2a26ad62a5c155af9199af9e69b889claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 343450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 3437b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 3440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 3442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 3445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 344650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 3447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 3448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 3450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 3452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 3455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 3458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 3459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 3460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 346150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"FAIL: getCurrencyFormat of locale " + 3462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru localeString + " failed roundtripping the number"); 3463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 3464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble()); 3465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 3466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong()); 3467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 347150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 3476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() { 3477b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 347950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 3485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"}, 348659d709d503bab6e2b61931737e662dd293b40578ccornelius {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"}, 3487b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_AR", "1", "USD", "US$1,00", "USD1,00", "1,00 d\\u00f3lar estadounidense"}, 3488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"ar_EG", "1", "USD", "US$\\u00a0\\u0661\\u066b\\u0660\\u0660", "USD\\u00a0\\u0661\\u066b\\u0660\\u0660", "\\u0661\\u066b\\u0660\\u0660 \\u062f\\u0648\\u0644\\u0627\\u0631 \\u0623\\u0645\\u0631\\u064a\\u0643\\u064a"}, 348959d709d503bab6e2b61931737e662dd293b40578ccornelius {"fa_CA", "1", "USD", "\\u200e$\\u06f1\\u066b\\u06f0\\u06f0", "\\u200eUSD\\u06f1\\u066b\\u06f0\\u06f0", "\\u200e\\u062f\\u0644\\u0627\\u0631 \\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627\\u06f1\\u066b\\u06f0\\u06f0"}, 3490f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"he_IL", "1", "USD", "1.00\\u00a0$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"}, 349159d709d503bab6e2b61931737e662dd293b40578ccornelius {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"}, 3492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"}, 349359d709d503bab6e2b61931737e662dd293b40578ccornelius {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"}, 34941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00\\ubbf8\\uad6d \\ub2ec\\ub7ec"}, 34951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00\\u7c73\\u30c9\\u30eb"}, 349659d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_CN", "1", "CNY", "\\uFFE5\\u00a01.00", "CNY\\u00a01.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 349759d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 349859d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 349959d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"}, 35001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"}, 35011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"}, 350259d709d503bab6e2b61931737e662dd293b40578ccornelius {"ru_RU", "1", "RUB", "1,00\\u00A0\\u0440\\u0443\\u0431.", "1,00\\u00A0RUB", "1,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0439 \\u0440\\u0443\\u0431\\u043B\\u044C"} 3503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 350959d709d503bab6e2b61931737e662dd293b40578ccornelius static const char* currencyStyleNames[] = { 351059d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY", 351159d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_ISO", 351259d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_PLURAL" 351359d709d503bab6e2b61931737e662dd293b40578ccornelius }; 351450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 3516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0; 3517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) { 3518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printf("loop: %d\n", deadloop++); 3519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 352059d709d503bab6e2b61931737e662dd293b40578ccornelius for (uint32_t i=0; i< sizeof(DATA)/sizeof(DATA[0]); ++i) { /* i = test case # - should be i=0*/ 3521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 2; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 352259d709d503bab6e2b61931737e662dd293b40578ccornelius UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */ 3523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 352959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("#%d NumberFormat(%s, %s) Currency=%s\n", 353059d709d503bab6e2b61931737e662dd293b40578ccornelius i, localeString, currencyStyleNames[kIndex], 353159d709d503bab6e2b61931737e662dd293b40578ccornelius currencyISOCode); 353259d709d503bab6e2b61931737e662dd293b40578ccornelius 3533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 35356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 3539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 354650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 354959d709d503bab6e2b61931737e662dd293b40578ccornelius /* 3550b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 3553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 3559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 356050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 3562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 3564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 3566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 356959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("parse(%s)", DATA[i][j]); 3570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 3573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 3574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 3575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 357659d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] + 357759d709d503bab6e2b61931737e662dd293b40578ccornelius "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+". Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]"); 3578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 357959d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble()); 3580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 358159d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong()); 3582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 358359d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)" round-trip would be: " + strBuf); 3584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 358750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 3590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 3592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 3596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() { 3597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[] = { 3598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US DOLLAR", // case in-sensitive 3599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 3600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 3601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 3602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 3603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 360454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "A$1.00", 3605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 3606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 3607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 3608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 3609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 3610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 3611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFN1.00", 3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ALL1.00", 3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AMD1.00", 3614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ANG1.00", 3615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOA1.00", 3616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 3617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 3621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 3622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "ARS1.00", 3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 3624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 3625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 3626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 3627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARS1.00", 3628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 3629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 3630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AUD1.00", 3631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AWG1.00", 3632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 3633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 3634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZN1.00", 363559d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u20132002)1.00", 363659d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan afghani (1927\\u20132002)1.00", 3637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghani1.00", 3638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghanis1.00", 3639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Lek1.00", 3640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek1.00", 3641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek\\u00eb1.00", 3642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dinar1.00", 3643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinar1.00", 3644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinars1.00", 3645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peseta1.00", 3646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran peseta1.00", 3647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran pesetas1.00", 364859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u20131991)1.00", 364959d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u20131999)1.00", 3650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanza1.00", 365159d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u20132000)1.00", 365259d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanza (1977\\u20131991)1.00", 365359d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanza (1995\\u20131999)1.00", 3654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanza1.00", 365559d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanzas (1977\\u20131991)1.00", 365659d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanzas (1995\\u20131999)1.00", 3657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanzas1.00", 365859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanza (1990\\u20132000)1.00", 365959d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanzas (1990\\u20132000)1.00", 3660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austral1.00", 366159d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u20131985)1.00", 3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Peso1.00", 3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine austral1.00", 3664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine australs1.00", 366559d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine peso (1983\\u20131985)1.00", 3666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine peso1.00", 366759d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine pesos (1983\\u20131985)1.00", 3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine pesos1.00", 3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dram1.00", 3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian dram1.00", 3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian drams1.00", 3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Florin1.00", 3673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban florin1.00", 3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dollar1.00", 3675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollar1.00", 3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollars1.00", 3677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schilling1.00", 3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schilling1.00", 3679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schillings1.00", 368059d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u20132006)1.00", 3681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Manat1.00", 368259d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manat (1993\\u20132006)1.00", 3683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manat1.00", 368459d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manats (1993\\u20132006)1.00", 3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manats1.00", 3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAM1.00", 3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BBD1.00", 3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BDT1.00", 3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEF1.00", 3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGL1.00", 3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BHD1.00", 3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BIF1.00", 3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BMD1.00", 3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BND1.00", 3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOB1.00", 3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRL1.00", 3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BTN1.00", 3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BWP1.00", 3725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYR1.00", 3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZD1.00", 3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dollar1.00", 3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollar1.00", 3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollars1.00", 3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dinar1.00", 3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinar1.00", 3734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinars1.00", 3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Taka1.00", 3736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi taka1.00", 3737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi takas1.00", 3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dollar1.00", 3739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollar1.00", 3740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollars1.00", 374159d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian New Ruble (1994\\u20131999)1.00", 3742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Ruble1.00", 374359d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian new ruble (1994\\u20131999)1.00", 374459d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian new rubles (1994\\u20131999)1.00", 3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian ruble1.00", 3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian rubles1.00", 3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible)1.00", 3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial)1.00", 3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc1.00", 3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (convertible)1.00", 3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (financial)1.00", 3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc1.00", 3753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (convertible)1.00", 3754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (financial)1.00", 3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs1.00", 3756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dollar1.00", 3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollar1.00", 3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollars1.00", 3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dollar1.00", 3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollar1.00", 3761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollars1.00", 3762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultrum1.00", 3763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrum1.00", 3764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrums1.00", 3765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdol1.00", 3766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Peso1.00", 3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdol1.00", 3768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdols1.00", 3769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian peso1.00", 3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian pesos1.00", 3771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 3772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivianos1.00", 3774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mark1.00", 377559d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00", 3776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible mark1.00", 3777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible marks1.00", 377859d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinar (1992\\u20131994)1.00", 377959d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinars (1992\\u20131994)1.00", 3780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pula1.00", 3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pula1.00", 3782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pulas1.00", 378359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzado (1989\\u20131990)1.00", 378459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzado (1986\\u20131989)1.00", 378559d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u20131993)1.00", 378659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u20131986)1.00", 378759d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1993\\u20131994)1.00", 3788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Real1.00", 378959d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzado (1989\\u20131990)1.00", 379059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzados (1989\\u20131990)1.00", 379159d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzado (1986\\u20131989)1.00", 379259d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzados (1986\\u20131989)1.00", 379359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1990\\u20131993)1.00", 379459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiro (1967\\u20131986)1.00", 379559d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1993\\u20131994)1.00", 379659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1990\\u20131993)1.00", 379759d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiros (1967\\u20131986)1.00", 379859d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1993\\u20131994)1.00", 3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian real1.00", 3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian reals1.00", 38011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British Pound1.00", 38021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British pound1.00", 38031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British pounds1.00", 3804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dollar1.00", 3805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollar1.00", 3806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollars1.00", 3807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Lev1.00", 3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Lev1.00", 3809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Leva1.00", 3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard lev1.00", 3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard leva1.00", 3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian lev1.00", 3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kyat1.00", 3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyat1.00", 3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyats1.00", 3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Franc1.00", 3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian franc1.00", 3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian francs1.00", 3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA$1.00", 3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CAD1.00", 3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 38231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA Franc1.00", 38241b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA Franc1.00", 38251b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA franc1.00", 38261b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA franc1.00", 38271b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA francs1.00", 38281b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA francs1.00", 3829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Franc1.00", 3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP franc1.00", 3831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP francs1.00", 3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFPF1.00", 3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHF1.00", 3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 3837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 3838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 3840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLP1.00", 3841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CNY1.00", 3842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COP1.00", 3843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 3844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 3845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CRC1.00", 3846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 3847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 3849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 3851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 3852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CVE1.00", 3853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CYP1.00", 3854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZK1.00", 3855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Riel1.00", 3856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riel1.00", 3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riels1.00", 3858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dollar1.00", 3859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollar1.00", 3860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollars1.00", 3861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escudo1.00", 3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudo1.00", 3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudos1.00", 3864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dollar1.00", 3865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollar1.00", 3866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollars1.00", 3867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Peso1.00", 386827f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Account (UF)1.00", 3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean peso1.00", 3870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean pesos1.00", 387127f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean unit of account (UF)1.00", 387227f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean units of account (UF)1.00", 387327f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yuan1.00", 3874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chinese yuan1.00", 3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Peso1.00", 3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian peso1.00", 3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian pesos1.00", 3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian Franc1.00", 3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian franc1.00", 3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian francs1.00", 3881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Franc1.00", 3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese franc1.00", 3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese francs1.00", 3884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f3n1.00", 3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3n1.00", 3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3ns1.00", 3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dinar1.00", 3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kuna1.00", 3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinar1.00", 3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinars1.00", 3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kuna1.00", 3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kunas1.00", 3893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Peso1.00", 3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban peso1.00", 3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban pesos1.00", 3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Pound1.00", 3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pound1.00", 3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pounds1.00", 3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Koruna1.00", 3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic koruna1.00", 3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic korunas1.00", 3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Koruna1.00", 3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard koruna1.00", 3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard korunas1.00", 3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 3908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJF1.00", 3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DKK1.00", 3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DOP1.00", 3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZD1.00", 3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Krone1.00", 3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish krone1.00", 3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish kroner1.00", 3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mark1.00", 3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German mark1.00", 3918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German marks1.00", 3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Franc1.00", 3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian franc1.00", 3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian francs1.00", 3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Peso1.00", 3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican peso1.00", 3924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican pesos1.00", 3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC$1.00", 3926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 3933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 3934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 3935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 3936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 3937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 3938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 3939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 3940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESP1.00", 3941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ETB1.00", 3942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EUR1.00", 3943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dollar1.00", 3944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollar1.00", 3945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollars1.00", 3946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Mark1.00", 3947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German mark1.00", 3948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German marks1.00", 3949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucre1.00", 395027f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Value1.00", 3951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucre1.00", 3952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucres1.00", 395327f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian unit of constant value1.00", 395427f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian units of constant value1.00", 3955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Pound1.00", 3956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pound1.00", 3957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pounds1.00", 3958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f3n1.00", 3959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran col\\u00f3n1.00", 3960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran colones1.00", 3961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwele1.00", 3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean ekwele1.00", 3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakfa1.00", 3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfa1.00", 3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfas1.00", 3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroon1.00", 3967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroon1.00", 3968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroons1.00", 3969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Birr1.00", 3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birr1.00", 3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birrs1.00", 3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Euro1.00", 3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Unit1.00", 3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Unit1.00", 3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Unit1.00", 3976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC)1.00", 3977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD)1.00", 3978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite unit1.00", 3979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite units1.00", 3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency unit1.00", 3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency units1.00", 3982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary unit1.00", 3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary units1.00", 3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBC)1.00", 3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBD)1.00", 3986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBC)1.00", 3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBD)1.00", 3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJD1.00", 3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 3993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Pound1.00", 3996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pound1.00", 3997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pounds1.00", 3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dollar1.00", 3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollar1.00", 4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollars1.00", 4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markka1.00", 4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markka1.00", 4003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markkas1.00", 400450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "CHF1.00", 4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Franc1.00", 4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Franc1.00", 4007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Franc1.00", 4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-franc1.00", 4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-francs1.00", 4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French franc1.00", 4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French francs1.00", 4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold franc1.00", 4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold francs1.00", 4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GBP1.00", 4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEL1.00", 4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHS1.00", 4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNF1.00", 4026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GYD1.00", 4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalasi1.00", 4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasi1.00", 4040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasis1.00", 4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Larit1.00", 4042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lari1.00", 4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larit1.00", 4044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larits1.00", 4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian lari1.00", 4046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian laris1.00", 404759d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u20132007)1.00", 4048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Cedi1.00", 404959d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedi (1979\\u20132007)1.00", 4050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedi1.00", 405159d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedis (1979\\u20132007)1.00", 4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedis1.00", 4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Pound1.00", 4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pound1.00", 4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pounds1.00", 4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachma1.00", 4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachma1.00", 4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachmas1.00", 4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetzal1.00", 4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzal1.00", 4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzals1.00", 4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Franc1.00", 4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syli1.00", 4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean franc1.00", 4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean francs1.00", 4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean syli1.00", 4069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean sylis1.00", 4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Peso1.00", 4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau peso1.00", 4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau pesos1.00", 4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dollar1.00", 4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollar1.00", 4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollars1.00", 4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK$1.00", 4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HKD1.00", 4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HUF1.00", 4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourde1.00", 4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourde1.00", 4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourdes1.00", 4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempira1.00", 4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempira1.00", 4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempiras1.00", 4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dollar1.00", 4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollar1.00", 4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollars1.00", 4095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forint1.00", 4096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forint1.00", 4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forints1.00", 4098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IDR1.00", 4099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IEP1.00", 4100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILS1.00", 4103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "INR1.00", 4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQD1.00", 4105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IRR1.00", 4106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ITL1.00", 4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kr\\u00f3na1.00", 4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3na1.00", 4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3nur1.00", 4112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupee1.00", 4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupee1.00", 4114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupees1.00", 4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupiah1.00", 4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiah1.00", 4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiahs1.00", 4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Rial1.00", 4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rial1.00", 4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rials1.00", 4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dinar1.00", 4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinar1.00", 4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinars1.00", 4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Pound1.00", 4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pound1.00", 4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pounds1.00", 4127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Pound1.00", 4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli new sheqel1.00", 4129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pound1.00", 4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pounds1.00", 4131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lira1.00", 4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian lira1.00", 4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian liras1.00", 4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JMD1.00", 4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JOD1.00", 4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JPY1.00", 4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dollar1.00", 4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollar1.00", 4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollars1.00", 4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Yen1.00", 4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese yen1.00", 4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dinar1.00", 4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinar1.00", 4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinars1.00", 4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KES1.00", 4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KGS1.00", 4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KHR1.00", 4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KMF1.00", 4149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KRW1.00", 4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KWD1.00", 4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZT1.00", 415627f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Tenge1.00", 415727f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenge1.00", 415827f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenges1.00", 4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shilling1.00", 4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shilling1.00", 4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shillings1.00", 4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dinar1.00", 4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinar1.00", 4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinars1.00", 4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani Som1.00", 4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani som1.00", 4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani soms1.00", 4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LBP1.00", 4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LKR1.00", 4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LSL1.00", 4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LYD1.00", 4191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Kip1.00", 4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kip1.00", 4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kips1.00", 4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lats1.00", 4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Ruble1.00", 4196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian lats1.00", 4197103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "Latvian lati1.00", 4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian ruble1.00", 4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian rubles1.00", 4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Pound1.00", 4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pound1.00", 4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pounds1.00", 4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Loti1.00", 4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho loti1.00", 4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho lotis1.00", 4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dollar1.00", 4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollar1.00", 4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollars1.00", 4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dinar1.00", 4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinar1.00", 4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinars1.00", 4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Litas1.00", 4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talonas1.00", 4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litas1.00", 4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litai1.00", 4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonas1.00", 4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonases1.00", 4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Franc1.00", 4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Franc1.00", 4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Franc1.00", 4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible franc1.00", 4222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible francs1.00", 4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial franc1.00", 4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial francs1.00", 4225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian franc1.00", 4226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian francs1.00", 4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX$1.00", 4234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MKD1.00", 4239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MNT1.00", 4244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MRO1.00", 4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTL1.00", 4248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MWK1.00", 4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXN1.00", 4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MYR1.00", 4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZM1.00", 4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZN1.00", 4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Pataca1.00", 4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese pataca1.00", 4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese patacas1.00", 4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Denar1.00", 4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denar1.00", 4270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denari1.00", 4271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariaries1.00", 4272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Franc1.00", 4275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy franc1.00", 4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy francs1.00", 4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwachas1.00", 4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgit1.00", 4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgit1.00", 4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgits1.00", 4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiyaa1.00", 4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaa1.00", 4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaas1.00", 4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Franc1.00", 4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian franc1.00", 4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian francs1.00", 4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lira1.00", 4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Pound1.00", 4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pound1.00", 4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pounds1.00", 4295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiya1.00", 4296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiya1.00", 4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiyas1.00", 4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupee1.00", 4299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupee1.00", 4300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupees1.00", 4301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Peso1.00", 430259d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u20131992)1.00", 430327f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Unit1.00", 4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican peso1.00", 4305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican pesos1.00", 430659d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver peso (1861\\u20131992)1.00", 430759d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver pesos (1861\\u20131992)1.00", 430827f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment unit1.00", 430927f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment units1.00", 4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Leu1.00", 4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan leu1.00", 4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan lei1.00", 4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugrik1.00", 4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugrik1.00", 4315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugriks1.00", 4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirham1.00", 4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Franc1.00", 4318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirham1.00", 4319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirhams1.00", 4320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan franc1.00", 4321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan francs1.00", 4322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escudo1.00", 4323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metical1.00", 4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudo1.00", 4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudos1.00", 4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican metical1.00", 4327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican meticals1.00", 432859d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kyat1.00", 432959d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyat1.00", 433059d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyats1.00", 4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAD1.00", 4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NGN1.00", 4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIC1.00", 4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NOK1.00", 4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NPR1.00", 4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT$1.00", 4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZ$1.00", 4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZD1.00", 4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dollar1.00", 4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollar1.00", 4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollars1.00", 4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupee1.00", 4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupee1.00", 4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupees1.00", 4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilder1.00", 4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilder1.00", 4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilders1.00", 4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilder1.00", 4353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilder1.00", 4354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilders1.00", 4355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqel1.00", 4356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqels1.00", 4357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dollar1.00", 4358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollar1.00", 4359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollars1.00", 436027f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdoba1.00", 436159d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00", 436227f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdoba1.00", 436327f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdobas1.00", 436459d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00", 436559d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00", 4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Naira1.00", 4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian naira1.00", 4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian nairas1.00", 4369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Won1.00", 4370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Krone1.00", 4373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian krone1.00", 4374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian kroner1.00", 4375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OMR1.00", 437659d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican Metical (1980\\u20132006)1.00", 437759d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican metical (1980\\u20132006)1.00", 437859d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican meticals (1980\\u20132006)1.00", 437959d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Lei (1952\\u20132006)1.00", 438059d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u20132006)1.00", 438159d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian leu (1952\\u20132006)1.00", 438259d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u20132006)1.00", 438359d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinar (2002\\u20132006)1.00", 438459d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinars (2002\\u20132006)1.00", 438559d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u20132007)1.00", 438659d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u20131998)1.00", 438759d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinar (1992\\u20132007)1.00", 438859d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinars (1992\\u20132007)1.00", 438959d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pound (1957\\u20131998)1.00", 439059d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pounds (1957\\u20131998)1.00", 439159d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 439259d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Rial1.00", 4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rial1.00", 4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rials1.00", 4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PHP1.00", 4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PKR1.00", 4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLN1.00", 4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PYG1.00", 4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupee1.00", 4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupee1.00", 4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupees1.00", 4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balboa1.00", 4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboa1.00", 4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboas1.00", 4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kina1.00", 4423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guarani1.00", 4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guarani1.00", 4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guaranis1.00", 4428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Inti1.00", 4429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Nuevo Sol1.00", 443059d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u20131965)1.00", 4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian inti1.00", 4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian intis1.00", 4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian nuevo sol1.00", 4434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian nuevos soles1.00", 443559d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian sol (1863\\u20131965)1.00", 443659d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian soles (1863\\u20131965)1.00", 4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Peso1.00", 4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine peso1.00", 4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine pesos1.00", 4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 4441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 444259d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u20131995)1.00", 4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zloty1.00", 4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys1.00", 4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty (PLZ)1.00", 4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty1.00", 4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys (PLZ)1.00", 4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escudo1.00", 4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escudo1.00", 4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudo1.00", 4451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudos1.00", 4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudo1.00", 4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudos1.00", 4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QAR1.00", 4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Rial1.00", 4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rial1.00", 4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rials1.00", 4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN\\u00a51.00", 4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUB1.00", 4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUB1.00", 4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dollar1.00", 4477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollar1.00", 4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollars1.00", 4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Leu1.00", 4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian lei1.00", 4481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian leu1.00", 448259d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u20131998)1.00", 4483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Ruble1.00", 448459d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian ruble (1991\\u20131998)1.00", 4485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian ruble1.00", 448659d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian rubles (1991\\u20131998)1.00", 4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian rubles1.00", 4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Franc1.00", 4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan franc1.00", 4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan francs1.00", 4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SAR1.00", 4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SBD1.00", 4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SCR1.00", 4494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SEK1.00", 4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SGD1.00", 4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SKK1.00", 4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SOS1.00", 4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRG1.00", 4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "STD1.00", 4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SYP1.00", 4519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZL1.00", 4520f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Pound1.00", 4521f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pound1.00", 4522f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pounds1.00", 4523f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra1.00", 4524f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra1.00", 4525f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras1.00", 4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riyal1.00", 4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyal1.00", 4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyals1.00", 4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dinar1.00", 4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinar1.00", 4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinars1.00", 4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupee1.00", 4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupee1.00", 4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupees1.00", 4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leone1.00", 4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leone1.00", 4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leones1.00", 4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dollar1.00", 4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollar1.00", 4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollars1.00", 4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Koruna1.00", 4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak koruna1.00", 4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak korunas1.00", 4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tolar1.00", 4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolar1.00", 4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolars1.00", 4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dollar1.00", 4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollar1.00", 4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollars1.00", 4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shilling1.00", 4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shilling1.00", 4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shillings1.00", 4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial)1.00", 4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand1.00", 4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand (financial)1.00", 4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rands (financial)1.00", 4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Won1.00", 4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Rouble1.00", 4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet rouble1.00", 4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet roubles1.00", 4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account)1.00", 4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account)1.00", 4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta1.00", 4570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (A account)1.00", 4571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (convertible account)1.00", 4572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta1.00", 4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (A account)1.00", 4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (convertible account)1.00", 4575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas1.00", 4576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Rights1.00", 457727f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupee1.00", 457827f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupee1.00", 457927f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupees1.00", 4580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Pound1.00", 4581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pound1.00", 4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pounds1.00", 4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dollar1.00", 4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollar1.00", 4585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollars1.00", 458627f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilder1.00", 458727f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilder1.00", 458827f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilders1.00", 4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangeni1.00", 4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi lilangeni1.00", 4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi emalangeni1.00", 4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Krona1.00", 4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish krona1.00", 4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish kronor1.00", 4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Franc1.00", 4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss franc1.00", 4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss francs1.00", 4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Pound1.00", 4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pound1.00", 4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pounds1.00", 4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "THB1.00", 4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 4603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 4604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 4605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TOP1.00", 4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRL1.00", 4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TTD1.00", 4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TWD1.00", 4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZS1.00", 4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dollar1.00", 4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollar1.00", 4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollars1.00", 4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Ruble1.00", 4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somoni1.00", 4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani ruble1.00", 4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani rubles1.00", 4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somoni1.00", 4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somonis1.00", 4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shilling1.00", 4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shilling1.00", 4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shillings1.00", 4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Baht1.00", 4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escudo1.00", 4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudo1.00", 4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudos1.00", 4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u02bbanga1.00", 4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 4641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 4642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dollar1.00", 4643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollar1.00", 4644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollars1.00", 4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dinar1.00", 4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinar1.00", 4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinars1.00", 4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish lira1.00", 4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Manat1.00", 4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirham1.00", 4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirhams1.00", 4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAH1.00", 4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGX1.00", 4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day)1.00", 4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day)1.00", 4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar1.00", 4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (next day)1.00", 4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (same day)1.00", 4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (next day)1.00", 4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (same day)1.00", 4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 4676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 4678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 4680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYU1.00", 4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 4682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 468359d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u20131987)1.00", 4684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shilling1.00", 468559d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shilling (1966\\u20131987)1.00", 4686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shilling1.00", 468759d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shillings (1966\\u20131987)1.00", 4688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shillings1.00", 4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvnia1.00", 4690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanets1.00", 4691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnia1.00", 4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnias1.00", 4693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovanets1.00", 4694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovantsiv1.00", 469527f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Unit1.00", 4696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirham1.00", 469727f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currency1.00", 469859d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan Peso (1975\\u20131993)1.00", 4699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan Peso1.00", 470027f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan Peso (Indexed Units)1.00", 470159d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan peso (1975\\u20131993)1.00", 470227f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan peso (indexed units)1.00", 4703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan peso1.00", 470459d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan pesos (1975\\u20131993)1.00", 470527f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan pesos (indexed units)1.00", 4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan pesos1.00", 47071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani Som1.00", 47081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani som1.00", 47091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani som1.00", 4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEB1.00", 4711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEF1.00", 4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VND1.00", 4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VUV1.00", 4714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vatu1.00", 4715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatu1.00", 4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatus1.00", 4717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar1.00", 471859d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00", 4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvar1.00", 4720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvars1.00", 472159d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvar (1871\\u20132008)1.00", 472259d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvars (1871\\u20132008)1.00", 4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Dong1.00", 4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Euro1.00", 4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Franc1.00", 4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euro1.00", 4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euros1.00", 4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR franc1.00", 4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR francs1.00", 4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan Tala1.00", 4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 4749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 4750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XCD1.00", 4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 4753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 4754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 4755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 4756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPF1.00", 4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 4775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YER1.00", 4776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 4777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 4781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 4782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dinar1.00", 4783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Rial1.00", 4784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinar1.00", 4785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinars1.00", 4786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rial1.00", 4787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rials1.00", 478859d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Convertible Dinar (1990\\u20131992)1.00", 478959d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u20131990)1.00", 479059d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian New Dinar (1994\\u20132002)1.00", 479159d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinar (1990\\u20131992)1.00", 479259d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinars (1990\\u20131992)1.00", 479359d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinar (1966\\u20131990)1.00", 479459d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinars (1966\\u20131990)1.00", 479559d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinar (1994\\u20132002)1.00", 479659d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinars (1994\\u20132002)1.00", 4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAR1.00", 4800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 4801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 4802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 4803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 4804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 4805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 4806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZWD1.00", 480759d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u20131998)1.00", 480859d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean Zaire (1971\\u20131993)1.00", 480959d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaire (1993\\u20131998)1.00", 481059d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaires (1993\\u20131998)1.00", 481159d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaire (1971\\u20131993)1.00", 481259d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaires (1971\\u20131993)1.00", 4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwacha1.00", 4814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwacha1.00", 4815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwachas1.00", 481659d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u20132008)1.00", 481759d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollar (1980\\u20132008)1.00", 481859d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollars (1980\\u20132008)1.00", 4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euro1.00", 4820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euros1.00", 482159d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish lira (1922\\u20132005)1.00", 4822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "special drawing rights1.00", 482327f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value unit1.00", 482427f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value units1.00", 4825b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "unknown currency1.00", 4826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a31.00", 4827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a51.00", 4828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ab1.00", 4829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20aa1.00", 4830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ac1.00", 4831786288bd87363f3f86c1211ef7e1fb94aa9a40f7Fredrik Roubert "\\u20b91.00", 4832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 4833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following has extra text, should be parsed correctly too 4834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00 random", 4835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00 random", 4836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 4837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 4838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 4839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 484059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Afghan Afghanis (1927\\u20131992) random", 4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghanis random", 4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian Lek random", 4843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian lek random", 484450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "1.00 Albanian lek\\u00eb random", 4845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian Dinar random", 4846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinar random", 4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinars random", 4848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran Peseta random", 4849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran peseta random", 4850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran pesetas random", 485159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Kwanza (1977\\u20131990) random", 485259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random", 4853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan Kwanza random", 485459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan New Kwanza (1990\\u20132000) random", 485559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanza (1977\\u20131991) random", 485659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanza (1995\\u20131999) random", 4857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanza random", 485859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanzas (1977\\u20131991) random", 485959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanzas (1995\\u20131999) random", 4860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanzas random", 486159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanza (1990\\u20132000) random", 486259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanzas (1990\\u20132000) random", 4863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Austral random", 486459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine Peso (1983\\u20131985) random", 4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Peso random", 4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine austral random", 4867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine australs random", 486859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine peso (1983\\u20131985) random", 4869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine peso random", 487059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine pesos (1983\\u20131985) random", 4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine pesos random", 4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian Dram random", 4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian dram random", 4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian drams random", 4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban Florin random", 4876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban florin random", 4877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian Dollar random", 4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollar random", 4879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollars random", 4880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian Schilling random", 4881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schilling random", 4882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schillings random", 488359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani Manat (1993\\u20132006) random", 4884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani Manat random", 488559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manat (1993\\u20132006) random", 4886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manat random", 488759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manats (1993\\u20132006) random", 4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manats random", 4889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian Dollar random", 4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollar random", 4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollars random", 4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini Dinar random", 4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinar random", 4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinars random", 4895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi Taka random", 4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi taka random", 4897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi takas random", 4898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian Dollar random", 4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollar random", 4900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollars random", 490159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian New Ruble (1994\\u20131999) random", 4902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian Ruble random", 490359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian new ruble (1994\\u20131999) random", 490459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Belarusian new rubles (1994\\u20131999) random", 4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian ruble random", 4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian rubles random", 4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (convertible) random", 4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (financial) random", 4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc random", 4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (convertible) random", 4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (financial) random", 4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc random", 4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (convertible) random", 4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (financial) random", 4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs random", 4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize Dollar random", 4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollar random", 4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollars random", 4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan Dollar random", 4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollar random", 4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollars random", 4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese Ngultrum random", 4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrum random", 4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrums random", 4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Mvdol random", 4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Peso random", 4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdol random", 4928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdols random", 4929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian peso random", 4930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian pesos random", 4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 4932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 4933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Bolivianos random", 4934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina Convertible Mark random", 493559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random", 4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible mark random", 4937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible marks random", 493859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random", 493959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random", 4940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan Pula random", 4941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pula random", 4942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pulas random", 494359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzado (1989\\u20131990) random", 494459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzado (1986\\u20131989) random", 494559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1990\\u20131993) random", 494659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzeiro (1967\\u20131986) random", 494759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1993\\u20131994) random", 4948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian Real random", 494959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzado (1989\\u20131990) random", 495059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzados (1989\\u20131990) random", 495159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzado (1986\\u20131989) random", 495259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzados (1986\\u20131989) random", 495359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1990\\u20131993) random", 495459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiro (1967\\u20131986) random", 495559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1993\\u20131994) random", 495659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1990\\u20131993) random", 495759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiros (1967\\u20131986) random", 495859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1993\\u20131994) random", 4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian real random", 4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian reals random", 49611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British Pound random", 49621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British pound random", 49631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British pounds random", 4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei Dollar random", 4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollar random", 4966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollars random", 4967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Hard Lev random", 4968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Lev random", 4969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Leva random", 4970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard lev random", 4971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard leva random", 4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian lev random", 4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese Kyat random", 4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyat random", 4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyats random", 4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian Franc random", 4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian franc random", 4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian francs random", 4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian Riel random", 4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riel random", 4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riels random", 4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian Dollar random", 4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollar random", 4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollars random", 4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean Escudo random", 4986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudo random", 4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudos random", 4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands Dollar random", 4989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollar random", 4990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollars random", 4991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean Peso random", 499227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean Unit of Account (UF) random", 4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean peso random", 4994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean pesos random", 499527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean unit of account (UF) random", 499627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean units of account (UF) random", 499727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chinese Yuan random", 4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chinese yuan random", 4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian Peso random", 5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian peso random", 5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian pesos random", 5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian Franc random", 5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian franc random", 5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian francs random", 5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese Franc Congolais random", 5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese franc Congolais random", 5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese francs Congolais random", 5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican Col\\u00f3n random", 5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3n random", 5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3ns random", 5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Dinar random", 5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Kuna random", 5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinar random", 5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinars random", 5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kuna random", 5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kunas random", 5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban Peso random", 5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban peso random", 5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban pesos random", 5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot Pound random", 5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pound random", 5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pounds random", 5023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic Koruna random", 5024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic koruna random", 5025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic korunas random", 5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak Hard Koruna random", 5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard koruna random", 5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard korunas random", 5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish Krone random", 5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish krone random", 5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish kroner random", 5032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German Mark random", 5033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German mark random", 5034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German marks random", 5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian Franc random", 5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian franc random", 5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian francs random", 5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican Peso random", 5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican peso random", 5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican pesos random", 5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean Dollar random", 5042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollar random", 5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollars random", 5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German Mark random", 5045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German mark random", 5046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German marks random", 5047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian Sucre random", 504827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian Unit of Constant Value random", 5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucre random", 5050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucres random", 505127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian unit of constant value random", 505227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian units of constant value random", 5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian Pound random", 5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pound random", 5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pounds random", 5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran Col\\u00f3n random", 5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran col\\u00f3n random", 5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran colones random", 5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean Ekwele random", 5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean ekwele random", 5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean Nakfa random", 5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfa random", 5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfas random", 5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian Kroon random", 5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroon random", 5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroons random", 5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian Birr random", 5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birr random", 5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birrs random", 5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Composite Unit random", 5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Currency Unit random", 5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Monetary Unit random", 5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBC) random", 5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBD) random", 5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite unit random", 5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite units random", 5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency unit random", 5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency units random", 5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary unit random", 5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary units random", 5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBC) random", 5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBD) random", 5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBC) random", 5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBD) random", 5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands Pound random", 5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pound random", 5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pounds random", 5088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian Dollar random", 5089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollar random", 5090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollars random", 5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish Markka random", 5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markka random", 5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markkas random", 5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Franc random", 5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Gold Franc random", 5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-Franc random", 5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-franc random", 5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-francs random", 5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French franc random", 5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French francs random", 5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold franc random", 5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold francs random", 5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian Dalasi random", 5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasi random", 5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasis random", 5106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Kupon Larit random", 5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Lari random", 5108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larit random", 5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larits random", 5110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian lari random", 5111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian laris random", 511259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian Cedi (1979\\u20132007) random", 5113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian Cedi random", 511459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedi (1979\\u20132007) random", 5115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedi random", 511659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedis (1979\\u20132007) random", 5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedis random", 5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar Pound random", 5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pound random", 5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pounds random", 5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek Drachma random", 5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachma random", 5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachmas random", 5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan Quetzal random", 5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzal random", 5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzals random", 5129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Franc random", 5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Syli random", 5131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean franc random", 5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean francs random", 5133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean syli random", 5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean sylis random", 5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau Peso random", 5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau peso random", 5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau pesos random", 5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese Dollar random", 5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollar random", 5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollars random", 5141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian Gourde random", 5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourde random", 5143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourdes random", 5144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran Lempira random", 5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempira random", 5146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempiras random", 5147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong Dollar random", 5148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollar random", 5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollars random", 5150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian Forint random", 5151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forint random", 5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forints random", 5153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic Kr\\u00f3na random", 5154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3na random", 5155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3nur random", 5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian Rupee random", 5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupee random", 5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupees random", 5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian Rupiah random", 5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiah random", 5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiahs random", 5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian Rial random", 5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rial random", 5164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rials random", 5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi Dinar random", 5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinar random", 5167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinars random", 5168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish Pound random", 5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pound random", 5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pounds random", 5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli Pound random", 5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli new sheqel random", 5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pound random", 5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pounds random", 5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian Lira random", 5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian lira random", 5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian liras random", 5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican Dollar random", 5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollar random", 5180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollars random", 5181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese Yen random", 5182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese yen random", 5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian Dinar random", 5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinar random", 5185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinars random", 518627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani Tenge random", 518727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenge random", 518827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenges random", 5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan Shilling random", 5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shilling random", 5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shillings random", 5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti Dinar random", 5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinar random", 5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinars random", 5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani Som random", 5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani som random", 5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani soms random", 5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian Kip random", 5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kip random", 5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kips random", 5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Lats random", 5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Ruble random", 5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lats random", 5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lati random", 5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian ruble random", 5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian rubles random", 5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese Pound random", 5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pound random", 5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pounds random", 5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho Loti random", 5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho loti random", 5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho lotis random", 5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian Dollar random", 5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollar random", 5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollars random", 5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan Dinar random", 5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinar random", 5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinars random", 5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Litas random", 5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Talonas random", 5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litas random", 5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litai random", 5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonas random", 5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonases random", 5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Convertible Franc random", 5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg Financial Franc random", 5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Franc random", 5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible franc random", 5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible francs random", 5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial franc random", 5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial francs random", 5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian franc random", 5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian francs random", 5234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese Pataca random", 5235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese pataca random", 5236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese patacas random", 5237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian Denar random", 5238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denar random", 5239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denari random", 5240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariaries random", 5241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Franc random", 5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy franc random", 5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy francs random", 5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwachas random", 5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian Ringgit random", 5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgit random", 5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgits random", 5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian Rufiyaa random", 5253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaa random", 5254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaas random", 5255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian Franc random", 5256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian franc random", 5257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian francs random", 5258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Lira random", 5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Pound random", 5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese lira random", 5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese liras random", 5262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pound random", 5263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pounds random", 5264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian Ouguiya random", 5265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiya random", 5266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiyas random", 5267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian Rupee random", 5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupee random", 5269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupees random", 5270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican Peso random", 527159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican Silver Peso (1861\\u20131992) random", 527227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican Investment Unit random", 5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican peso random", 5274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican pesos random", 527559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver peso (1861\\u20131992) random", 527659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver pesos (1861\\u20131992) random", 527727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment unit random", 527827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment units random", 5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan Leu random", 5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan leu random", 5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan lei random", 5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian Tugrik random", 5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugrik random", 5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugriks random", 5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Dirham random", 5286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Franc random", 5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirham random", 5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirhams random", 5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan franc random", 5290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan francs random", 5291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Escudo random", 5292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Metical random", 5293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudo random", 5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudos random", 5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican metical random", 5296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican meticals random", 529759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar Kyat random", 529859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyat random", 529959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyats random", 5300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dollar random", 5301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollar random", 5302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollars random", 5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupee random", 5304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupee random", 5305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupees random", 5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilder random", 5307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilder random", 5308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilders random", 5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilder random", 5310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilder random", 5311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilders random", 5312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli New Sheqel random", 5313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli new sheqels random", 5314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dollar random", 5315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollar random", 5316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollars random", 531727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan C\\u00f3rdoba random", 531859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random", 531927f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 532027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 532159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random", 532259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random", 5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Naira random", 5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian naira random", 5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nairas random", 5326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Won random", 5327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Krone random", 5330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian krone random", 5331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kroner random", 533259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican Metical (1980\\u20132006) random", 533359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican metical (1980\\u20132006) random", 533459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican meticals (1980\\u20132006) random", 533559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Lei (1952\\u20132006) random", 533659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Leu (1952\\u20132006) random", 533759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian leu (1952\\u20132006) random", 533859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian Dinar (2002\\u20132006) random", 533959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinar (2002\\u20132006) random", 534059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinars (2002\\u20132006) random", 534159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Dinar (1992\\u20132007) random", 534259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Pound (1957\\u20131998) random", 534359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinar (1992\\u20132007) random", 534459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinars (1992\\u20132007) random", 534559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pound (1957\\u20131998) random", 534659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pounds (1957\\u20131998) random", 534759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 534859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 5349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani Rial random", 5350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rial random", 5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rials random", 5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani Rupee random", 5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupee random", 5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupees random", 5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian Balboa random", 5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboa random", 5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboas random", 5360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean Kina random", 5361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan Guarani random", 5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guarani random", 5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guaranis random", 5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian Inti random", 5367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian Nuevo Sol random", 536859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian Sol (1863\\u20131965) random", 5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian inti random", 5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian intis random", 5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian nuevo sol random", 5372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian nuevos soles random", 537359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian sol (1863\\u20131965) random", 537459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian soles (1863\\u20131965) random", 5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine Peso random", 5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine peso random", 5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine pesos random", 5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 5379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 538059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Polish Zloty (1950\\u20131995) random", 5381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish Zloty random", 5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys random", 5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty (PLZ) random", 5384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty random", 5385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys (PLZ) random", 5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Escudo random", 5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea Escudo random", 5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudo random", 5389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudos random", 5390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudo random", 5391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudos random", 5392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari Rial random", 5393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rial random", 5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rials random", 5395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian Dollar random", 5398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollar random", 5399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollars random", 5400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian Leu random", 5401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian lei random", 5402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian leu random", 540359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian Ruble (1991\\u20131998) random", 5404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian Ruble random", 540559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian ruble (1991\\u20131998) random", 5406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian ruble random", 540759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian rubles (1991\\u20131998) random", 5408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian rubles random", 5409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan Franc random", 5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan franc random", 5411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan francs random", 5412f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena Pound random", 5413f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pound random", 5414f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pounds random", 5415f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra random", 5416f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra random", 5417f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras random", 5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi Riyal random", 5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyal random", 5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyals random", 5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian Dinar random", 5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinar random", 5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinars random", 5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois Rupee random", 5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupee random", 5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupees random", 5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean Leone random", 5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leone random", 5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leones random", 5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore Dollar random", 5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollar random", 5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollars random", 5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak Koruna random", 5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak koruna random", 5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak korunas random", 5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian Tolar random", 5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolar random", 5438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolars random", 5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands Dollar random", 5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollar random", 5441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollars random", 5442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali Shilling random", 5443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shilling random", 5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shillings random", 5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand (financial) random", 5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand random", 5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand (financial) random", 5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rands (financial) random", 5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean Won random", 5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet Rouble random", 5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet rouble random", 5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet roubles random", 5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (A account) random", 5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (convertible account) random", 5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta random", 5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (A account) random", 5461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (convertible account) random", 5462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta random", 5463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (A account) random", 5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (convertible account) random", 5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas random", 5466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Special Drawing Rights random", 546727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan Rupee random", 546827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupee random", 546927f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupees random", 5470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese Pound random", 5471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pound random", 5472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pounds random", 5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese Dollar random", 5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollar random", 5475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollars random", 547627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese Guilder random", 547727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilder random", 547827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilders random", 5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi Lilangeni random", 5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi lilangeni random", 5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi emalangeni random", 5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish Krona random", 5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish krona random", 5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish kronor random", 5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss Franc random", 5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss franc random", 5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss francs random", 5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian Pound random", 5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pound random", 5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pounds random", 5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan Dollar random", 5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollar random", 5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollars random", 5494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Ruble random", 5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Somoni random", 5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani ruble random", 5497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani rubles random", 5498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somoni random", 5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somonis random", 5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian Shilling random", 5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shilling random", 5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shillings random", 5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai Baht random", 5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese Escudo random", 5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudo random", 5510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudos random", 5511f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago Dollar random", 5512f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollar random", 5513f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollars random", 5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian Dinar random", 5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinar random", 5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinars random", 5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish lira random", 5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani Manat random", 5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Next day) random", 5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Same day) random", 5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar random", 5526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (next day) random", 5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (same day) random", 5528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (next day) random", 5530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (same day) random", 5531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 553259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan Shilling (1966\\u20131987) random", 5533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan Shilling random", 553459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shilling (1966\\u20131987) random", 5535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shilling random", 553659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shillings (1966\\u20131987) random", 5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shillings random", 5538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Hryvnia random", 5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Karbovanets random", 5540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnia random", 5541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnias random", 5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovanets random", 5543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovantsiv random", 554427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian Real Value Unit random", 5545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 United Arab Emirates Dirham random", 554627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Unknown Currency random", 554759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan Peso (1975\\u20131993) random", 5548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan Peso random", 554927f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan Peso (Indexed Units) random", 555059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan peso (1975\\u20131993) random", 555127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan peso (indexed units) random", 5552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan peso random", 555359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan pesos (1975\\u20131993) random", 555427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan pesos (indexed units) random", 55551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani Som random", 55561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani som random", 55571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani som random", 5558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu Vatu random", 5559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatu random", 5560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatus random", 5561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan Bol\\u00edvar random", 556259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random", 5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvar random", 5564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvars random", 556559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random", 556659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random", 5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese Dong random", 5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Euro random", 5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Franc random", 5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euro random", 5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euros random", 5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR franc random", 5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR francs random", 5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan Tala random", 5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 5579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Dinar random", 5580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Rial random", 5581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinar random", 5582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinars random", 5583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rial random", 5584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rials random", 558559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random", 558659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random", 558759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian New Dinar (1994\\u20132002) random", 558859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinar (1990\\u20131992) random", 558959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinars (1990\\u20131992) random", 559059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinar (1966\\u20131990) random", 559159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinars (1966\\u20131990) random", 559259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinar (1994\\u20132002) random", 559359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinars (1994\\u20132002) random", 559459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean New Zaire (1993\\u20131998) random", 559559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean Zaire (1971\\u20131993) random", 559659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaire (1993\\u20131998) random", 559759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaires (1993\\u20131998) random", 559859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaire (1971\\u20131993) random", 559959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaires (1971\\u20131993) random", 5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian Kwacha random", 5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwacha random", 5602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwachas random", 560359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean Dollar (1980\\u20132008) random", 560459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollar (1980\\u20132008) random", 560559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollars (1980\\u20132008) random", 5606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euro random", 5607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euros random", 560859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish lira (1922\\u20132005) random", 5609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 special drawing rights random", 561027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value unit random", 561127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value units random", 5612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1.00 unknown currency random", 5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* WRONG_DATA[] = { 5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following are missing one last char in the currency name 5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "usd1.00", // case sensitive 5618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan Cordob", 5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dolla", 5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dolla", 5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupe", 5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupe", 5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilde", 5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilde", 5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilde", 5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilde", 5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli New Sheqe", 5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dolla", 5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dolla", 5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan cordob", 5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Nair", 5632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nair", 5633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Wo", 5634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean wo", 5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Kron", 5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kron", 5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dolla", 5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00", 5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "A1.00", 5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AD1.00", 5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AE1.00", 5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AF1.00", 5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AL1.00", 5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AM1.00", 5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AN1.00", 5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AO1.00", 5647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AR1.00", 5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AT1.00", 5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AU1.00", 5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AW1.00", 5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZ1.00", 5652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghan1.00", 565359d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u201320021.00", 5654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afl1.00", 5655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Le1.00", 5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dina1.00", 5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peset1.00", 5658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanz1.00", 565959d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u201319901.00", 566059d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u201319991.00", 566159d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u201320001.00", 5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austra1.00", 5663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Pes1.00", 566459d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u201319851.00", 5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dra1.00", 5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Flori1.00", 5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dolla1.00", 5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schillin1.00", 5669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Mana1.00", 567059d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u201320061.00", 5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "B1.00", 5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BA1.00", 5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BB1.00", 5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BE1.00", 5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BG1.00", 5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BH1.00", 5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BI1.00", 5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BM1.00", 5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BN1.00", 5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BO1.00", 5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BR1.00", 5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BS1.00", 5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BT1.00", 5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BU1.00", 5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BW1.00", 5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BY1.00", 5687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZ1.00", 5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dolla1.00", 5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dina1.00", 5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Tak1.00", 5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dolla1.00", 5692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bds1.00", 569359d709d503bab6e2b61931737e662dd293b40578ccornelius "Belarusian New Ruble (1994\\u201319991.00", 5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Rubl1.00", 5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Fran1.00", 5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible1.00", 5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial1.00", 5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dolla1.00", 5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dolla1.00", 5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultru1.00", 5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdo1.00", 5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Pes1.00", 5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivian1.00", 5704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mar1.00", 5705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Dina1.00", 5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pul1.00", 5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzad1.00", 5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzado Nov1.00", 5709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzeir1.00", 571059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u201319931.00", 571159d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u201319861.00", 5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Rea1.00", 5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "British Pound Sterlin1.00", 5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dolla1.00", 5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Le1.00", 5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Le1.00", 5717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kya1.00", 5718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Fran1.00", 5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "C1.00", 5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA1.00", 5721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CD1.00", 5722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Fran1.00", 5723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP1.00", 5724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CH1.00", 5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CL1.00", 5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN1.00", 5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CO1.00", 5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CS1.00", 5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CU1.00", 5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CV1.00", 5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CY1.00", 5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZ1.00", 5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Rie1.00", 5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dolla1.00", 5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escud1.00", 5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dolla1.00", 5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Pes1.00", 573827f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Accoun1.00", 573927f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yua1.00", 5740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Pes1.00", 5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comoro Fran1.00", 5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Fran1.00", 5743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f31.00", 5744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dina1.00", 5745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kun1.00", 5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Pes1.00", 5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Poun1.00", 5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Korun1.00", 5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Korun1.00", 5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "D1.00", 5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DD1.00", 5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DE1.00", 5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJ1.00", 5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DK1.00", 5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DO1.00", 5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZ1.00", 5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Kron1.00", 5758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mar1.00", 5759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Fran1.00", 5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dk1.00", 5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Pes1.00", 5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC1.00", 5763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EE1.00", 5764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EG1.00", 5765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EQ1.00", 5766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ER1.00", 5767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ES1.00", 5768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ET1.00", 5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EU1.00", 5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dolla1.00", 5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Ostmar1.00", 5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucr1.00", 577327f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Valu1.00", 5774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Poun1.00", 5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ekwel1.00", 5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f31.00", 5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwel1.00", 5778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakf1.00", 5779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Es1.00", 5780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroo1.00", 5781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Bir1.00", 5782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eur1.00", 5783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Uni1.00", 5784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Uni1.00", 5785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Uni1.00", 5786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC1.00", 5787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD1.00", 5788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "F1.00", 5789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FB1.00", 5790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FI1.00", 5791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJ1.00", 5792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FK1.00", 5793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FR1.00", 5794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Poun1.00", 5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fd1.00", 5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dolla1.00", 5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markk1.00", 5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fr1.00", 5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Fran1.00", 5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Fran1.00", 5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Fran1.00", 5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "G1.00", 5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GB1.00", 5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GE1.00", 5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GH1.00", 5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GI1.00", 5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GM1.00", 5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GN1.00", 5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQ1.00", 5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GR1.00", 5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GT1.00", 5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GW1.00", 5813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GY1.00", 5814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalas1.00", 5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Lari1.00", 5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lar1.00", 5817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Ced1.00", 581859d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u201320071.00", 5819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Poun1.00", 5820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gol1.00", 5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachm1.00", 5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetza1.00", 5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Fran1.00", 5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syl1.00", 5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Pes1.00", 5826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dolla1.00", 5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK1.00", 5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HN1.00", 5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HR1.00", 5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HT1.00", 5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HU1.00", 5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourd1.00", 5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempir1.00", 5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dolla1.00", 5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forin1.00", 5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "I1.00", 5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IE1.00", 5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IL1.00", 5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IN1.00", 5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQ1.00", 5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IR1.00", 5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IS1.00", 5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IT1.00", 5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kron1.00", 5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupe1.00", 5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupia1.00", 5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Ria1.00", 5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dina1.00", 5849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Poun1.00", 5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Poun1.00", 5851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lir1.00", 5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "J1.00", 5853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JM1.00", 5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JO1.00", 5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JP1.00", 5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dolla1.00", 5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Ye1.00", 5858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dina1.00", 5859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K S1.00", 5860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K1.00", 5861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KE1.00", 5862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KG1.00", 5863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KH1.00", 5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KP1.00", 5865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KR1.00", 5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KW1.00", 5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KY1.00", 5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZ1.00", 586927f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Teng1.00", 5870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shillin1.00", 5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dina1.00", 5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani So1.00", 5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LA1.00", 5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LB1.00", 5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LK1.00", 5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LR1.00", 5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LT1.00", 5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LU1.00", 5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LV1.00", 5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LY1.00", 5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Ki1.00", 5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lat1.00", 5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Rubl1.00", 5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Poun1.00", 5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Lot1.00", 5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dolla1.00", 5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dina1.00", 5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Lit1.00", 5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talona1.00", 5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Fran1.00", 5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Fran1.00", 5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Fran1.00", 5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MA1.00", 5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MD1.00", 5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDe1.00", 5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MEX1.00", 5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MG1.00", 5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ML1.00", 5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MM1.00", 5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MN1.00", 5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MO1.00", 5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MR1.00", 5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MT1.00", 5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MU1.00", 5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MV1.00", 5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MW1.00", 5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX1.00", 5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MY1.00", 5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZ1.00", 5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Patac1.00", 5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Dena1.00", 5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariar1.00", 5913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Fran1.00", 5914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwach1.00", 5915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgi1.00", 5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiya1.00", 5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Fran1.00", 5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malot1.00", 5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lir1.00", 5920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Poun1.00", 5921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiy1.00", 5922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupe1.00", 5923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Pes1.00", 592459d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u201319921.00", 592527f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Uni1.00", 5926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Le1.00", 5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugri1.00", 5928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirha1.00", 5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Fran1.00", 5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escud1.00", 5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metica1.00", 593259d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kya1.00", 5933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "N1.00", 5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NA1.00", 5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAf1.00", 5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NG1.00", 5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NI1.00", 5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NK1.00", 5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NL1.00", 5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NO1.00", 5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NP1.00", 5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT1.00", 5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dolla1.00", 5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupe1.00", 5945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilde1.00", 5946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilde1.00", 5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqe1.00", 5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dolla1.00", 594959d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00", 595027f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdob1.00", 5951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Nair1.00", 5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Wo1.00", 5953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Kron1.00", 5954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nr1.00", 5955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OM1.00", 5956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Old Mozambican Metica1.00", 595759d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u201320061.00", 595859d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u201320061.00", 595959d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u201320071.00", 596059d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u201319981.00", 596159d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u201320051.00", 5962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Ria1.00", 5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PA1.00", 5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PE1.00", 5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PG1.00", 5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PH1.00", 5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PK1.00", 5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PL1.00", 5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PT1.00", 5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PY1.00", 5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupe1.00", 5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladiu1.00", 5973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balbo1.00", 5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kin1.00", 5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guaran1.00", 5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Int1.00", 597759d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u201319651.00", 5978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Sol Nuev1.00", 5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Pes1.00", 5980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinu1.00", 5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zlot1.00", 598259d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u201319951.00", 5983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escud1.00", 5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escud1.00", 5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pr1.00", 5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QA1.00", 5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Ria1.00", 5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RD1.00", 5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RH1.00", 5990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Fund1.00", 5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RS1.00", 5992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RU1.00", 5993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RW1.00", 5994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rb1.00", 5995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dolla1.00", 5996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Le1.00", 5997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Rubl1.00", 599859d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u201319981.00", 5999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Fran1.00", 6000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "S1.00", 6001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SA1.00", 6002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SB1.00", 6003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SC1.00", 6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SD1.00", 6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SE1.00", 6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SG1.00", 6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SH1.00", 6008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SI1.00", 6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SK1.00", 6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL R1.00", 6011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL1.00", 6012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SO1.00", 6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ST1.00", 6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SU1.00", 6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SV1.00", 6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SY1.00", 6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZ1.00", 6018f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Poun1.00", 6019f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobr1.00", 6020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riya1.00", 6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dina1.00", 6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupe1.00", 6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sh1.00", 6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leon1.00", 6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silve1.00", 6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dolla1.00", 6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Korun1.00", 6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tola1.00", 6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dolla1.00", 6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shillin1.00", 6031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Ran1.00", 6032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial1.00", 6033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Wo1.00", 6034b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Roubl1.00", 6035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peset1.00", 6036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account1.00", 6037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account1.00", 6038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Right1.00", 603927f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupe1.00", 6040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Poun1.00", 6041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dolla1.00", 604227f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilde1.00", 6043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangen1.00", 6044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Kron1.00", 6045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Fran1.00", 6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Poun1.00", 6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "T S1.00", 6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TH1.00", 6049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJ1.00", 6050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TM1.00", 6051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TN1.00", 6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TO1.00", 6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TP1.00", 6054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TR1.00", 6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TT1.00", 6056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TW1.00", 6057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZ1.00", 6058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dolla1.00", 6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Rubl1.00", 6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somon1.00", 6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shillin1.00", 6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Cod1.00", 6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Bah1.00", 6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escud1.00", 6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u20bbang1.00", 6066f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dolla1.00", 6067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dina1.00", 6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lir1.00", 6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Mana1.00", 6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U S1.00", 6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U1.00", 6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UA1.00", 6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UG1.00", 6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dolla1.00", 6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day1.00", 6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day1.00", 6077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US1.00", 6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UY1.00", 6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZ1.00", 6080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shillin1.00", 608159d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u201319871.00", 6082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvni1.00", 6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanet1.00", 608427f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Uni1.00", 6085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirha1.00", 608627f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currenc1.00", 6087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ur1.00", 608859d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguay Peso (1975\\u201319931.00", 6089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguay Peso Uruguay1.00", 609027f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguay Peso (Indexed Units1.00", 60911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani So1.00", 6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "V1.00", 6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VE1.00", 6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VN1.00", 6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VU1.00", 6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vat1.00", 6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edva1.00", 6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar Fuert1.00", 6099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Don1.00", 61001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA Fran1.00", 61011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA Fran1.00", 6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Eur1.00", 6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Fran1.00", 6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WS1.00", 6105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoa Tal1.00", 6106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XA1.00", 6107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XB1.00", 6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XC1.00", 6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XD1.00", 6110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XE1.00", 6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XF1.00", 6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XO1.00", 6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XP1.00", 6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XR1.00", 6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XT1.00", 6116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XX1.00", 6117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YD1.00", 6118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YE1.00", 6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YU1.00", 6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dina1.00", 6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Ria1.00", 6122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yugoslavian Convertible Dina1.00", 612359d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u201319901.00", 612427f654740f2a26ad62a5c155af9199af9e69b889claireho "Yugoslavian New Dina1.00", 6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Z1.00", 6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZA1.00", 6127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZM1.00", 6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZR1.00", 6129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZW1.00", 613059d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u201319981.00", 6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zairean Zair1.00", 6132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwach1.00", 613359d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u201320081.00", 6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "dra1.00", 6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "lar1.00", 6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "le1.00", 6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "man1.00", 6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "so1.00", 6139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 6140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale("en_US"); 6142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 6143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(DATA[i]); 6144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 61466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( doubleVal != 1.0 ) { 6152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal); 6153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 6155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Failed to parse as currency: " + formatted); 61566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 61576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 61586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 61596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 61606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) { 6166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(WRONG_DATA[i]); 6167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 61696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6174103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal); 61756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 61766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 61776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 61786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 61796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 6184c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 618550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t); 618650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 618750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s; 618850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::string ss; 618950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::cout << s.toUTF8String(ss) 619050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount, 619150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 619250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool found[10]; 619350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition fp; 619450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 619550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (tupleCount > 10) { 619650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("internal error, tupleCount too large", FALSE); 619750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 619850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 619950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = FALSE; 620050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 620150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 620250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 620350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 620450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (iter.next(fp)) { 620550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = FALSE; 620650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t id = fp.getField(); 620750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t start = fp.getBeginIndex(); 620850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t limit = fp.getEndIndex(); 620950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 621050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // is there a logln using printf? 621150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buf[128]; 621250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit); 621350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(buf); 621450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 621550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 621650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (found[i]) { 621750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 621850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 621950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (values[i*3] == id && 622050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+1] == start && 622150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+2] == limit) { 622250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = ok = TRUE; 622350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 622450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 622750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok); 622850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 622950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 623050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // check that all were found 623150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = TRUE; 623250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 623350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!found[i]) { 623450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ok = FALSE; 623550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]); 623650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 623750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 623850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("no expected values were missing", ok); 623950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 624050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 624150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit, 624250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 624350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 624450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField()); 624550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex()); 624650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex()); 624750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 624850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 624950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() { 625050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // bug 7372 625150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 625250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter1; 625350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter2; 625450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition pos; 625550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 625650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status); 625750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 625850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 625950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double num = 1234.56; 626050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str1; 626150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str2; 626250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 626350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"self==", iter1 == iter1); 626450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2); 626550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 626650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str1, &iter1, status); 626750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2); 626850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, &iter2, status); 626950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2); 627050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter1.next(pos); 627150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2); 627250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter2.next(pos); 627350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2); 627450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 627550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // should format ok with no iterator 627650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str2.remove(); 627750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, NULL, status); 627850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertEquals("null fpiter", str1, str2); 627950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 628050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 628150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 628250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 628350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() { 628450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale locale("en_US"); 628550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6286b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 628750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 628850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double val = 12345.67; 628950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 629050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 629150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6292103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_CURRENCY_FIELD, 0, 1, 6293103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_GROUPING_SEPARATOR_FIELD, 3, 4, 6294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 7, 6295103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8, 6296103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 8, 10, 629750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 629850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected)); 629950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 630050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 630150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 630250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 630350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 630450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 630550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 630750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 630850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result); 631050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 631150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 631350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 631450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result); 631650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 631750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 631850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status); 632050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho val = -0.0000123; 632150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 632250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_SIGN_FIELD, 0, 1, 6324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 2, 6325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3, 6326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 3, 5, 6327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SYMBOL_FIELD, 5, 6, 6328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SIGN_FIELD, 6, 7, 6329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_FIELD, 7, 8 633050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 633150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected)); 633250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 633350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 633450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 633550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 633650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 633750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 633850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 634050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 634150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6342103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result); 634350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 634450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6345103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 634650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 634750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6348103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result); 634950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 635050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 635150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 635250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho fflush(stderr); 635350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 635450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 635550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) { 635650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (attrId) { 6357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_INTEGER_FIELD: return "integer"; 6358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_FRACTION_FIELD: return "fraction"; 6359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator"; 6360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol"; 6361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign"; 6362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_FIELD: return "exponent"; 6363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator"; 6364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_CURRENCY_FIELD: return "currency"; 6365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERCENT_FIELD: return "percent"; 6366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERMILL_FIELD: return "permille"; 6367103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_SIGN_FIELD: return "sign"; 636850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: return ""; 636950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 637050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 637150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 637250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 637350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Test formatting & parsing of big decimals. 637450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// API test, not a comprehensive test. 637550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// See DecimalFormatTest/DataDrivenTests 637650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 637750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \ 637850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho __FILE__, __LINE__, u_errorName(status));} 637950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \ 638050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);} 638150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 638250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) { 638350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // This function lets ASSERT_EQUALS("literal", UnicodeString) work. 638450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString us1(s1); 638550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return us1 != s2; 638650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 638750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 638850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() { 638950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 639050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 639150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f("12.345678999987654321E666", status); 639250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 639350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho StringPiece s = f.getDecimalNumber(status); 639450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 639550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1.2345678999987654321E+667", s); 639650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //printf("%s\n", s.data()); 639750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 639850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 639950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 640050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 640150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f1("this is not a number", status); 640250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status); 640350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 640450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 640550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 640650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 640750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f; 640850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("123.45", status); 640950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 641050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kDouble, f.getType()); 641150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble()); 641250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble(status)); 641350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 641450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("123.45", f.getDecimalNumber(status)); 641550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 641650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 641750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("4.5678E7", status); 641850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t n; 641950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho n = f.getLong(); 642050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(45678000, n); 642150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 642250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 642350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("-123", status); 642450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 642550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kLong, f.getType()); 642650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong()); 642750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong(status)); 642850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 642950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("-123", f.getDecimalNumber(status)); 643050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 643250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 643350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("1234567890123", status); // Number too big for 32 bits 643450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kInt64, f.getType()); 643650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64()); 643750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64(status)); 643850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 643950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status)); 644050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 644150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 644250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 644350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 644450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 644627f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 644727f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 644827f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 644927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 645027f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("244444444444444444444444444444444444446.4"); 645127f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(num, formattedResult, NULL, status); 645227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 645327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult); 645427f654740f2a26ad62a5c155af9199af9e69b889claireho //std::string ss; std::cout << formattedResult.toUTF8String(ss); 645527f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 645627f654740f2a26ad62a5c155af9199af9e69b889claireho } 645750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 645850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 645950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 646050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check formatting a DigitList. DigitList is internal, but this is 646150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // a critical interface that must work. 646250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6463b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 646427f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 646527f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 646627f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 646727f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 646827f654740f2a26ad62a5c155af9199af9e69b889claireho DigitList dl; 646927f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("123.4566666666666666666666666666666666621E+40"); 647027f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 647127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 647227f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, NULL, status); 647327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 647427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult); 647527f654740f2a26ad62a5c155af9199af9e69b889claireho 647627f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 647727f654740f2a26ad62a5c155af9199af9e69b889claireho num.set("666.666"); 647827f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 647927f654740f2a26ad62a5c155af9199af9e69b889claireho FieldPosition pos(NumberFormat::FRACTION_FIELD); 648027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 648127f654740f2a26ad62a5c155af9199af9e69b889claireho formattedResult.remove(); 648227f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, pos, status); 648327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 648427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("666.666", formattedResult); 648527f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(4, pos.getBeginIndex()); 648627f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(7, pos.getEndIndex()); 648727f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 648827f654740f2a26ad62a5c155af9199af9e69b889claireho } 648950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 649050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 649150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 649250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check a parse with a formatter with a multiplier. 649350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6494b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status); 649527f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 649627f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 649727f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 649827f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.84%"; 649927f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 650027f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 650127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 650227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data())); 650327f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 650427f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 650527f654740f2a26ad62a5c155af9199af9e69b889claireho } 650650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 650750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 650854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC) 650954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* 651054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod(). 651154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * See #9463 651254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 651350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 651450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check that a parse returns a decimal number with full accuracy 651550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 651727f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 651827f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 651927f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 652027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.002200044400088880000070000"; 652127f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 652227f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 652327f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 652427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data())); 652527f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(1.00220004440008888, result.getDouble()); 652627f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 652727f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 652827f654740f2a26ad62a5c155af9199af9e69b889claireho } 652950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 653054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 653150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 653250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 653350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 653427f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() { 653527f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 653627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString text1, text2; 653727f654740f2a26ad62a5c155af9199af9e69b889claireho double value = 99.12345; 653827f654740f2a26ad62a5c155af9199af9e69b889claireho 653927f654740f2a26ad62a5c155af9199af9e69b889claireho // Create currenct instance 654027f654740f2a26ad62a5c155af9199af9e69b889claireho NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status); 654127f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmt == NULL) { 654227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 654327f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 654427f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text1); 654527f654740f2a26ad62a5c155af9199af9e69b889claireho 654627f654740f2a26ad62a5c155af9199af9e69b889claireho // Reset the same currency and format the test value again 654727f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->setCurrency(fmt->getCurrency(), status); 654827f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 654927f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text2); 655027f654740f2a26ad62a5c155af9199af9e69b889claireho 655127f654740f2a26ad62a5c155af9199af9e69b889claireho if (text1 != text2) { 655227f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"NumberFormat::format() should return the same result - text1=" 655327f654740f2a26ad62a5c155af9199af9e69b889claireho + text1 + " text2=" + text2); 655427f654740f2a26ad62a5c155af9199af9e69b889claireho } 655527f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmt; 655627f654740f2a26ad62a5c155af9199af9e69b889claireho } 655727f654740f2a26ad62a5c155af9199af9e69b889claireho} 655827f654740f2a26ad62a5c155af9199af9e69b889claireho 655927f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() { 656027f654740f2a26ad62a5c155af9199af9e69b889claireho 656127f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 656227f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 656327f654740f2a26ad62a5c155af9199af9e69b889claireho ParsePosition parsePos(0); 656427f654740f2a26ad62a5c155af9199af9e69b889claireho 656527f654740f2a26ad62a5c155af9199af9e69b889claireho // set the exponent symbol 656627f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 656727f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status); 656827f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)) { 656927f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)"); 657027f654740f2a26ad62a5c155af9199af9e69b889claireho return; 657127f654740f2a26ad62a5c155af9199af9e69b889claireho } 6572b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 657327f654740f2a26ad62a5c155af9199af9e69b889claireho // create format instance 657427f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 657527f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat fmt("#####", symbols, status); 6576b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)) { 657727f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); 657827f654740f2a26ad62a5c155af9199af9e69b889claireho } 6579b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 658027f654740f2a26ad62a5c155af9199af9e69b889claireho // parse the text 6581b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt.parse("5.06e-27", result, parsePos); 658227f654740f2a26ad62a5c155af9199af9e69b889claireho if(result.getType() != Formattable::kDouble && 6583b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble() != 5.06E-27 && 6584b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho parsePos.getIndex() != 8 658527f654740f2a26ad62a5c155af9199af9e69b889claireho ) 658627f654740f2a26ad62a5c155af9199af9e69b889claireho { 6587b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("ERROR: parse failed - expected 5.06E-27, 8 - returned %d, %i", 6588b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble(), parsePos.getIndex()); 658927f654740f2a26ad62a5c155af9199af9e69b889claireho } 659027f654740f2a26ad62a5c155af9199af9e69b889claireho} 659127f654740f2a26ad62a5c155af9199af9e69b889claireho 6592b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() { 6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6594b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test that number formats are properly inherited from es_419 */ 6595b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* These could be subject to change if the CLDR data changes */ 6596b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* parentLocaleTests[][2]= { 6597b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* locale ID */ /* expected */ 6598b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_CO", "1.250,75" }, 6599b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_CR", "1.250,75" }, 6600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES", "1.250,75" }, 6601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_GQ", "1.250,75" }, 6602b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_MX", "1,250.75" }, 6603b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_US", "1,250.75" }, 6604b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_VE", "1.250,75" }, 6605b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 6606b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6607b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString s; 6608b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6609b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(int i=0; i < (int)(sizeof(parentLocaleTests)/sizeof(parentLocaleTests[i])); i++){ 6610b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 6611b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *localeID = parentLocaleTests[i][0]; 6612b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString expected(parentLocaleTests[i][1], -1, US_INV); 6613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho expected = expected.unescape(); 6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char loc[256]={0}; 6615b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uloc_canonicalize(localeID, loc, 256, &status); 6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status); 6617b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)){ 6618b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status)); 6619b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 6620b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6621b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s.remove(); 6622b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt->format(1250.75, s); 6623b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(s!=expected){ 6624b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln(UnicodeString("FAIL: Expected: ")+expected 6625b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString(" Got: ") + s 6626b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 6627b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6628b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)){ 6629b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"FAIL: Status " + (int32_t)status); 6630b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6631b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete fmt; 6632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 6633b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 6634b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 6635103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6636103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 6637103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API. 6638103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 6639103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() { 6640103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 6641103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status); 6642103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CHECK_DATA(status, "NumberingSystem::getAvailableNames()") 6643103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t nsCount = availableNumberingSystems->count(status); 6645103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( nsCount < 36 ) { 6646103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 36, got %d",nsCount); 6647103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6648103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6649103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* A relatively simple test of the API. We call getAvailableNames() and cycle through */ 6650103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* each name returned, attempting to create a numbering system based on that name and */ 6651103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* verifying that the name returned from the resulting numbering system is the same */ 6652103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* one that we initially thought. */ 6653103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6654103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t len; 6655103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for ( int32_t i = 0 ; i < nsCount ; i++ ) { 6656103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *nsname = availableNumberingSystems->next(&len,status); 6657103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status); 6658103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( uprv_strcmp(nsname,ns->getName()) ) { 6659103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: Numbering system name didn't match for name = %s\n",nsname); 6660103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6661103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6662103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete ns; 6663103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6664103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6665103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete availableNumberingSystems; 6666103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6667103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6668103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid 6669103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void) 6670103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 6671103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(pattern,"#",1); 6672103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(pattern,"#",1); 6673103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6674103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(infstr,"INF",3); 6675103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(infstr,"INF",3); 6676103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6677103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(nanstr,"NAN",3); 6678103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(nanstr,"NAN",3); 6679103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6680103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar outputbuf[50] = {0}; 6681103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 6682103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status); 6683103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 6684103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: error in unum_open() - %s", u_errorName(status)); 6685103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 6686103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6687103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6688103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status); 6689103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status); 6690103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 6691103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: error setting symbols"); 6692103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6693103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6694103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double inf = uprv_getInfinity(); 6695103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6696103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN); 6697103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0); 6698103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6699103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UFieldPosition position = { 0, 0, 0}; 6700103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_formatDouble(fmt,inf,outputbuf,50,&position,&status); 6701103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6702103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( u_strcmp(infstr, outputbuf)) { 6703103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf); 6704103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6705103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6706103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_close(fmt); 6707103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6708103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6709103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h" 6710103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 6711103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() { 6712103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49 671354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n", 6714103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 671554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) { 671654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 671754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) { 671854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("Note: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is %d. Decrease the #define? sizeof(DecimalFormat)=%d\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE, sizeof(DecimalFormat)); 671954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6720103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 672154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped."); 6722103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 6723103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 672454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // get some additional case 672554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 672654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 672754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000",""),status); 672854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = 1; 672954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "0001"; 673054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 673154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 673254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 673354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 673454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")); 673554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 673654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")); 673754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 673954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 674054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 674154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 674254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MIN; // -9223372036854775808L; 674354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 674454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 674554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 674654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 674754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 674854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "-9223372036854775808"; 674954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 675054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 675154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 675254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 675354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 675454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 675554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 675654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6757103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 675854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 675954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 676054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 676154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MAX; // -9223372036854775808L; 676254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 676354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 676454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 676554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 676654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 676754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "9223372036854775807"; 676854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 676954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 677054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 677154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 677254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 677354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 677454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 677554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6776103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 677754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 677854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 677954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 678054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = 0; 678154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // uint8_t bits[8]; 678254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // memcpy(bits,&long_number,8); 678354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // for(int i=0;i<8;i++) { 678454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // logln("bits: %02X", (unsigned int)bits[i]); 678554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // } 678654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "0000000000000000000"; 678754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 678854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 678954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 679054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 679154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 679254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 679354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 679454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6795103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 679654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 679754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 679854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 679954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int64_t long_number = U_INT64_MIN + 1; 680054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString expect = "-9223372036854775807"; 680154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UnicodeString result; 680254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius FieldPosition pos; 680354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius df.format(long_number, result, pos); 680454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)||expect!=result) { 680554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 680654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 680754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 680854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 6809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 681054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 681154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 681254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 681354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) { 681454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) { 681554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 681654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 681754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) { 681854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 681954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 682054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 682154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 682254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 6823103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6824103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 6825103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 682659d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) { 682759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": "); 682859d709d503bab6e2b61931737e662dd293b40578ccornelius 682959d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *u = f.toUFormattable(); 683059d709d503bab6e2b61931737e662dd293b40578ccornelius logln(); 683159d709d503bab6e2b61931737e662dd293b40578ccornelius if (u == NULL) { 683259d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error: f.toUFormattable() retuned NULL."); 683359d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 683459d709d503bab6e2b61931737e662dd293b40578ccornelius } 683559d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: comparing Formattable with UFormattable", file, line); 683659d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + toString(f)); 683759d709d503bab6e2b61931737e662dd293b40578ccornelius 683859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 683959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode valueStatus = U_ZERO_ERROR; 684059d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType expectUType = UFMT_COUNT; // invalid 684159d709d503bab6e2b61931737e662dd293b40578ccornelius 684259d709d503bab6e2b61931737e662dd293b40578ccornelius UBool triedExact = FALSE; // did we attempt an exact comparison? 684359d709d503bab6e2b61931737e662dd293b40578ccornelius UBool exactMatch = FALSE; // was the exact comparison true? 684459d709d503bab6e2b61931737e662dd293b40578ccornelius 684559d709d503bab6e2b61931737e662dd293b40578ccornelius switch( f.getType() ) { 684659d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDate: 684759d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DATE; 684859d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus)); 684959d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 685059d709d503bab6e2b61931737e662dd293b40578ccornelius break; 685159d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDouble: 685259d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DOUBLE; 685359d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus)); 685459d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 685559d709d503bab6e2b61931737e662dd293b40578ccornelius break; 685659d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kLong: 685759d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_LONG; 685859d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus)); 685959d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 686059d709d503bab6e2b61931737e662dd293b40578ccornelius break; 686159d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kString: 686259d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_STRING; 686359d709d503bab6e2b61931737e662dd293b40578ccornelius { 686459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str; 686559d709d503bab6e2b61931737e662dd293b40578ccornelius f.getString(str); 686659d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 686759d709d503bab6e2b61931737e662dd293b40578ccornelius const UChar* uch = ufmt_getUChars(u, &len, &valueStatus); 686859d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_SUCCESS(valueStatus)) { 686959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str2(uch, len); 687059d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue("UChar* NULL-terminated", uch[len]==0); 687159d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (str == str2); 687259d709d503bab6e2b61931737e662dd293b40578ccornelius } 687359d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 687459d709d503bab6e2b61931737e662dd293b40578ccornelius } 687559d709d503bab6e2b61931737e662dd293b40578ccornelius break; 687659d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kArray: 687759d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_ARRAY; 687859d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 687959d709d503bab6e2b61931737e662dd293b40578ccornelius { 688059d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count = ufmt_getArrayLength(u, &valueStatus); 688159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count2; 688259d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable *array2 = f.getArray(count2); 688359d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = assertEquals(fileLine + " array count", count, count2); 688459d709d503bab6e2b61931737e662dd293b40578ccornelius 688559d709d503bab6e2b61931737e662dd293b40578ccornelius if(exactMatch) { 688659d709d503bab6e2b61931737e662dd293b40578ccornelius for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) { 688759d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus); 688859d709d503bab6e2b61931737e662dd293b40578ccornelius if(*Formattable::fromUFormattable(uu) != (array2[i])) { 688959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i, 689059d709d503bab6e2b61931737e662dd293b40578ccornelius (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i])); 689159d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 689259d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 689359d709d503bab6e2b61931737e662dd293b40578ccornelius if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) { 689459d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 689559d709d503bab6e2b61931737e662dd293b40578ccornelius } 689659d709d503bab6e2b61931737e662dd293b40578ccornelius } 689759d709d503bab6e2b61931737e662dd293b40578ccornelius } 689859d709d503bab6e2b61931737e662dd293b40578ccornelius } 689959d709d503bab6e2b61931737e662dd293b40578ccornelius } 690059d709d503bab6e2b61931737e662dd293b40578ccornelius break; 690159d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kInt64: 690259d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_INT64; 690359d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus)); 690459d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 690559d709d503bab6e2b61931737e662dd293b40578ccornelius break; 690659d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kObject: 690759d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_OBJECT; 690859d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus)); 690959d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 691059d709d503bab6e2b61931737e662dd293b40578ccornelius break; 691159d709d503bab6e2b61931737e662dd293b40578ccornelius } 691259d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType uType = ufmt_getType(u, &status); 691359d709d503bab6e2b61931737e662dd293b40578ccornelius 691459d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(status)) { 691559d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status)); 691659d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 691759d709d503bab6e2b61931737e662dd293b40578ccornelius } 691859d709d503bab6e2b61931737e662dd293b40578ccornelius 691959d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != expectUType) { 692059d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType); 692159d709d503bab6e2b61931737e662dd293b40578ccornelius } 692259d709d503bab6e2b61931737e662dd293b40578ccornelius 692359d709d503bab6e2b61931737e662dd293b40578ccornelius if(triedExact) { 692459d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(valueStatus)) { 692559d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus)); 692659d709d503bab6e2b61931737e662dd293b40578ccornelius } else if(!exactMatch) { 692759d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: failed exact match for the Formattable type", file, line); 692859d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 692959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: exact match OK", file, line); 693059d709d503bab6e2b61931737e662dd293b40578ccornelius } 693159d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 693259d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: note, did not attempt exact match for this formattable type", file, line); 693359d709d503bab6e2b61931737e662dd293b40578ccornelius } 693459d709d503bab6e2b61931737e662dd293b40578ccornelius 693559d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u)) 693659d709d503bab6e2b61931737e662dd293b40578ccornelius && f.isNumeric()) { 693759d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode convStatus = U_ZERO_ERROR; 693859d709d503bab6e2b61931737e662dd293b40578ccornelius 693959d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != UFMT_INT64) { // may fail to compare 694059d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus)); 694159d709d503bab6e2b61931737e662dd293b40578ccornelius } 694259d709d503bab6e2b61931737e662dd293b40578ccornelius 694359d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) { 694459d709d503bab6e2b61931737e662dd293b40578ccornelius StringPiece fDecNum = f.getDecimalNumber(convStatus); 694559d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1 694659d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 694759d709d503bab6e2b61931737e662dd293b40578ccornelius const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus); 694859d709d503bab6e2b61931737e662dd293b40578ccornelius#else 694959d709d503bab6e2b61931737e662dd293b40578ccornelius // copy version 695059d709d503bab6e2b61931737e662dd293b40578ccornelius char decNumChars[200]; 695159d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus); 695259d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 695359d709d503bab6e2b61931737e662dd293b40578ccornelius 695459d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) { 695559d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + decNumChars); 695659d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars length==", len, fDecNum.length()); 695759d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data()); 695859d709d503bab6e2b61931737e662dd293b40578ccornelius } 695959d709d503bab6e2b61931737e662dd293b40578ccornelius 696059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionF = U_ZERO_ERROR; 696159d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t l = f.getInt64(int64ConversionF); 696259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionU = U_ZERO_ERROR; 696359d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t r = ufmt_getInt64(u, &int64ConversionU); 696459d709d503bab6e2b61931737e662dd293b40578ccornelius 696559d709d503bab6e2b61931737e662dd293b40578ccornelius if( (l==r) 696659d709d503bab6e2b61931737e662dd293b40578ccornelius && ( uType != UFMT_INT64 ) // int64 better not overflow 696759d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionU) 696859d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) { 696959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: OK: 64 bit overflow", file, line); 697059d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 697159d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " as int64 ==", l, r); 697259d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF); 697359d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU); 697459d709d503bab6e2b61931737e662dd293b40578ccornelius } 697559d709d503bab6e2b61931737e662dd293b40578ccornelius } 697659d709d503bab6e2b61931737e662dd293b40578ccornelius } 697759d709d503bab6e2b61931737e662dd293b40578ccornelius return exactMatch || !triedExact; 697859d709d503bab6e2b61931737e662dd293b40578ccornelius} 697959d709d503bab6e2b61931737e662dd293b40578ccornelius 698059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) { 698159d709d503bab6e2b61931737e662dd293b40578ccornelius { 698259d709d503bab6e2b61931737e662dd293b40578ccornelius // test that a default formattable is equal to Formattable() 698359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 698459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalUFormattablePointer defaultUFormattable(ufmt_open(&status)); 698559d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("calling umt_open", status); 698659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable defaultFormattable; 698759d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 698859d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 698959d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 699059d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 699159d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 699259d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 699359d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable", 699459d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 699559d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable())))); 699659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable", 699759d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 699859d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultFormattable.toUFormattable()))); 699959d709d503bab6e2b61931737e662dd293b40578ccornelius assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()", 700059d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 700159d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultUFormattable.getAlias()))); 700259d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable); 700359d709d503bab6e2b61931737e662dd293b40578ccornelius } 700459d709d503bab6e2b61931737e662dd293b40578ccornelius // test some random Formattables 700559d709d503bab6e2b61931737e662dd293b40578ccornelius { 700659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(ucal_getNow(), Formattable::kIsDate); 700759d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 700859d709d503bab6e2b61931737e662dd293b40578ccornelius } 700959d709d503bab6e2b61931737e662dd293b40578ccornelius { 701059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((double)1.61803398874989484820); // golden ratio 701159d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 701259d709d503bab6e2b61931737e662dd293b40578ccornelius } 701359d709d503bab6e2b61931737e662dd293b40578ccornelius { 701459d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon 701559d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 701659d709d503bab6e2b61931737e662dd293b40578ccornelius } 701759d709d503bab6e2b61931737e662dd293b40578ccornelius { 701859d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/ 701959d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 702059d709d503bab6e2b61931737e662dd293b40578ccornelius } 702159d709d503bab6e2b61931737e662dd293b40578ccornelius { 702259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f("Hello world."); // should be invariant? 702359d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 702459d709d503bab6e2b61931737e662dd293b40578ccornelius } 702559d709d503bab6e2b61931737e662dd293b40578ccornelius { 702659d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 702759d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg 702859d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a StringPiece", status2); 702959d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 703059d709d503bab6e2b61931737e662dd293b40578ccornelius } 703159d709d503bab6e2b61931737e662dd293b40578ccornelius { 703259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 703359d709d503bab6e2b61931737e662dd293b40578ccornelius UObject *obj = new Locale(); 703459d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(obj); 703559d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a Formattable from a default constructed Locale()", status2); 703659d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 703759d709d503bab6e2b61931737e662dd293b40578ccornelius } 703859d709d503bab6e2b61931737e662dd293b40578ccornelius { 703959d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable array[] = { 704059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable(ucal_getNow(), Formattable::kIsDate), 704159d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((int32_t)4), 704259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((double)1.234), 704359d709d503bab6e2b61931737e662dd293b40578ccornelius }; 704459d709d503bab6e2b61931737e662dd293b40578ccornelius 704559d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fa(array, 3); 704659d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, fa); 704759d709d503bab6e2b61931737e662dd293b40578ccornelius } 704859d709d503bab6e2b61931737e662dd293b40578ccornelius} 704959d709d503bab6e2b61931737e662dd293b40578ccornelius 705059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) { 705159d709d503bab6e2b61931737e662dd293b40578ccornelius double input[] = { 705259d709d503bab6e2b61931737e662dd293b40578ccornelius 0, 0, 705359d709d503bab6e2b61931737e662dd293b40578ccornelius 0.1, -0.1, 705459d709d503bab6e2b61931737e662dd293b40578ccornelius 123, -123, 705559d709d503bab6e2b61931737e662dd293b40578ccornelius 12345, -12345, 705659d709d503bab6e2b61931737e662dd293b40578ccornelius 123.45, -123.45, 705759d709d503bab6e2b61931737e662dd293b40578ccornelius 123.44501, -123.44501, 705859d709d503bab6e2b61931737e662dd293b40578ccornelius 0.001234, -0.001234, 705959d709d503bab6e2b61931737e662dd293b40578ccornelius 0.00000000123, -0.00000000123, 706059d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000000000000000123, -0.0000000000000000000123, 706159d709d503bab6e2b61931737e662dd293b40578ccornelius 1.2, -1.2, 706259d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000012344501, -0.0000000012344501, 706359d709d503bab6e2b61931737e662dd293b40578ccornelius 123445.01, -123445.01, 706459d709d503bab6e2b61931737e662dd293b40578ccornelius 12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0, 706559d709d503bab6e2b61931737e662dd293b40578ccornelius }; 706659d709d503bab6e2b61931737e662dd293b40578ccornelius const char* expected[] = { 706759d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00", "0.00", 706859d709d503bab6e2b61931737e662dd293b40578ccornelius "0.100", "-0.100", 706959d709d503bab6e2b61931737e662dd293b40578ccornelius "123", "-123", 707059d709d503bab6e2b61931737e662dd293b40578ccornelius "12345", "-12345", 707159d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 707259d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 707359d709d503bab6e2b61931737e662dd293b40578ccornelius "0.001234", "-0.001234", 707459d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00000000123", "-0.00000000123", 707559d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000000000000000123", "-0.0000000000000000000123", 707659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.20", "-1.20", 707759d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000012345", "-0.0000000012345", 707859d709d503bab6e2b61931737e662dd293b40578ccornelius "123450", "-123450", 707959d709d503bab6e2b61931737e662dd293b40578ccornelius "12345000000000000000000000000000000", "-12345000000000000000000000000000000", 708059d709d503bab6e2b61931737e662dd293b40578ccornelius }; 708159d709d503bab6e2b61931737e662dd293b40578ccornelius 708259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 708359d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 708459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 708559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 708659d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status,"NumberFormat::createInstance") 708759d709d503bab6e2b61931737e662dd293b40578ccornelius 708859d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 708959d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 709059d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(5); 709159d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setGroupingUsed(false); 709259d709d503bab6e2b61931737e662dd293b40578ccornelius 709359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 709459d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult; 709559d709d503bab6e2b61931737e662dd293b40578ccornelius for (unsigned int i = 0; i < sizeof(input)/sizeof(double); ++i) { 709659d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(input[i], result); 709759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult(expected[i]); 709859d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != expectedResult) { 709959d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result); 710059d709d503bab6e2b61931737e662dd293b40578ccornelius } 710159d709d503bab6e2b61931737e662dd293b40578ccornelius result.remove(); 710259d709d503bab6e2b61931737e662dd293b40578ccornelius } 710359d709d503bab6e2b61931737e662dd293b40578ccornelius} 710459d709d503bab6e2b61931737e662dd293b40578ccornelius 710559d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() { 710659d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 710759d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 710859d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 710959d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 711059d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 711159d709d503bab6e2b61931737e662dd293b40578ccornelius 711259d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 711359d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(3); 711459d709d503bab6e2b61931737e662dd293b40578ccornelius 711559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 711659d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(0.0, result); 711759d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != "0") { 711859d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: 0, got " + result); 711959d709d503bab6e2b61931737e662dd293b40578ccornelius } 712059d709d503bab6e2b61931737e662dd293b40578ccornelius} 712159d709d503bab6e2b61931737e662dd293b40578ccornelius 712259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() { 712359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 712459d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 712559d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 712659d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 712759d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 712859d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status)); 712959d709d503bab6e2b61931737e662dd293b40578ccornelius return; 713059d709d503bab6e2b61931737e662dd293b40578ccornelius } 713159d709d503bab6e2b61931737e662dd293b40578ccornelius 713259d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 713359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 713459d709d503bab6e2b61931737e662dd293b40578ccornelius } 713559d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 713659d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 713759d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 713859d709d503bab6e2b61931737e662dd293b40578ccornelius } 713959d709d503bab6e2b61931737e662dd293b40578ccornelius 714059d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 714159d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 714259d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 714359d709d503bab6e2b61931737e662dd293b40578ccornelius } 714459d709d503bab6e2b61931737e662dd293b40578ccornelius 714559d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 714659d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 714759d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 714859d709d503bab6e2b61931737e662dd293b40578ccornelius } 714959d709d503bab6e2b61931737e662dd293b40578ccornelius 715059d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 715159d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(6); 715259d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 715359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 715459d709d503bab6e2b61931737e662dd293b40578ccornelius } 715559d709d503bab6e2b61931737e662dd293b40578ccornelius 715659d709d503bab6e2b61931737e662dd293b40578ccornelius} 715759d709d503bab6e2b61931737e662dd293b40578ccornelius 715859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() { 715959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 716059d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status); 716159d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 716259d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 716359d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 716459d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 716559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u200e-0,5"); 716659d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 716759d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 716859d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 716959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Expected -0,5 to parse for Farsi."); 717059d709d503bab6e2b61931737e662dd293b40578ccornelius } 717159d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 717259d709d503bab6e2b61931737e662dd293b40578ccornelius} 717359d709d503bab6e2b61931737e662dd293b40578ccornelius 717459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() { 717559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 717659d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status); 717759d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 717859d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 717959d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 718059d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 718159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u208B0.5"); 718259d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 718359d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 718459d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 718559d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Expected ") + value + UnicodeString(" to parse.")); 718659d709d503bab6e2b61931737e662dd293b40578ccornelius } 718759d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 718859d709d503bab6e2b61931737e662dd293b40578ccornelius} 718959d709d503bab6e2b61931737e662dd293b40578ccornelius 719059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() { 719159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 719259d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols custom(Locale::getUS(), status); 719359d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormatSymbols constructor"); 719459d709d503bab6e2b61931737e662dd293b40578ccornelius 719559d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*"); 719659d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^"); 719759d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":"); 719859d709d503bab6e2b61931737e662dd293b40578ccornelius 719959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString pat(" #,##0.00"); 720059d709d503bab6e2b61931737e662dd293b40578ccornelius pat.insert(0, (UChar)0x00A4); 720159d709d503bab6e2b61931737e662dd293b40578ccornelius 720259d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat fmt(pat, custom, status); 720359d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormat constructor"); 720459d709d503bab6e2b61931737e662dd293b40578ccornelius 720559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numstr("* 1^234:56"); 720659d709d503bab6e2b61931737e662dd293b40578ccornelius expect2(fmt, (Formattable)((double)1234.56), numstr); 720759d709d503bab6e2b61931737e662dd293b40578ccornelius} 720859d709d503bab6e2b61931737e662dd293b40578ccornelius 720959d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct { 721059d709d503bab6e2b61931737e662dd293b40578ccornelius const char * locale; 721159d709d503bab6e2b61931737e662dd293b40578ccornelius UBool lenient; 721259d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numString; 721359d709d503bab6e2b61931737e662dd293b40578ccornelius double value; 721459d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem; 721559d709d503bab6e2b61931737e662dd293b40578ccornelius 721659d709d503bab6e2b61931737e662dd293b40578ccornelius 721759d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() { 721859d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem items[] = { 721959d709d503bab6e2b61931737e662dd293b40578ccornelius // locale lenient numString value 722059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("12"), 12 }, 722159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("12"), 12 }, 722259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("-23"), -23 }, 722359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("-23"), -23 }, 722459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("- 23"), -23 }, 722559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 722659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 722759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 722859d709d503bab6e2b61931737e662dd293b40578ccornelius 722959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 723059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 723159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 723259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 723359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 723459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 723559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 723659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 723759d709d503bab6e2b61931737e662dd293b40578ccornelius 723859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 723959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 724059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 724159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 724259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 724359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 724459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 724559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 724659d709d503bab6e2b61931737e662dd293b40578ccornelius 724759d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("12"), 12 }, 724859d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("12"), 12 }, 724959d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("-23"), -23 }, 725059d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("-23"), -23 }, 725159d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("- 23"), -23 }, 725259d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 725359d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 725459d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 725559d709d503bab6e2b61931737e662dd293b40578ccornelius 725659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 725759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 725859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 725959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 726059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 726159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 726259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 726359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 726459d709d503bab6e2b61931737e662dd293b40578ccornelius 726559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("12"), 12 }, 726659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("12"), 12 }, 726759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("-23"), -23 }, 726859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("-23"), -23 }, 726959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("- 23"), -23 }, 727059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 727159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 727259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 727359d709d503bab6e2b61931737e662dd293b40578ccornelius 727459d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 727559d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 727659d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 727759d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 727859d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"), -67 }, 727959d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 728059d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 728159d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"), -67 }, 728259d709d503bab6e2b61931737e662dd293b40578ccornelius 728359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 728459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 728559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 728659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 728759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 728859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 728959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 729059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 729159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 729259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 729359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"), -67 }, 729459d709d503bab6e2b61931737e662dd293b40578ccornelius // terminator 729559d709d503bab6e2b61931737e662dd293b40578ccornelius { NULL, 0, UnicodeString(""), 0 }, 729659d709d503bab6e2b61931737e662dd293b40578ccornelius }; 729759d709d503bab6e2b61931737e662dd293b40578ccornelius 729859d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem * itemPtr; 729959d709d503bab6e2b61931737e662dd293b40578ccornelius for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) { 730059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 730159d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status); 730259d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 730359d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->setLenient(itemPtr->lenient); 730459d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fmtobj; 730559d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 730659d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->parse(itemPtr->numString, fmtobj, ppos); 730759d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == itemPtr->numString.length()) { 730859d709d503bab6e2b61931737e662dd293b40578ccornelius double parsedValue = fmtobj.getDouble(status); 730959d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status) || parsedValue != itemPtr->value) { 731059d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue); 731159d709d503bab6e2b61931737e662dd293b40578ccornelius } 731259d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 731359d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex()); 731459d709d503bab6e2b61931737e662dd293b40578ccornelius } 731559d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 731659d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status)); 731759d709d503bab6e2b61931737e662dd293b40578ccornelius } 731859d709d503bab6e2b61931737e662dd293b40578ccornelius delete numfmt; 731959d709d503bab6e2b61931737e662dd293b40578ccornelius } 732059d709d503bab6e2b61931737e662dd293b40578ccornelius} 732159d709d503bab6e2b61931737e662dd293b40578ccornelius 7322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 7323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode mode; 7324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double value; 7325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expected; 7326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data; 7327fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7328fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7329fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0. 7330fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() { 7331fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const Test10419Data items[] = { 7332fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundCeiling, 1.488, "2"}, 7333fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundDown, 1.588, "1"}, 7334fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundFloor, 1.888, "1"}, 7335fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfDown, 1.5, "1"}, 7336fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfEven, 2.5, "2"}, 7337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfUp, 2.5, "3"}, 7338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundUp, 1.5, "2"}, 7339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 7340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status)); 7342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Failure creating DecimalFormat %s", u_errorName(status)); 7344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; i < (int32_t) (sizeof(items) / sizeof(items[0])); ++i) { 7347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setRoundingMode(items[i].mode); 7348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setMaximumFractionDigits(0); 7349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 7350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (items[i].expected != decfmt->format(items[i].value, actual)) { 7351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Expected " + items[i].expected + ", got " + actual); 7352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() { 7357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt is now 'a' 7358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("'I''ll'*a###.##", status); 7360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fmt.getPadCharacterString() != UnicodeString("a")) { 7367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Padding character should be 'a'."); 7368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt ought to be '*' since that is the default and no 7372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // explicit padding char is specified in the new pattern. 7373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.applyPattern("AA#,##0.00ZZ", status); 7374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Oops this still prints 'a' even though we changed the pattern. 7376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fmt.getPadCharacterString() != UnicodeString("*")) { 7377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("applyPattern did not clear padding character."); 7378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() { 7382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat format("0.00E0", status); 7384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode roundingModes[] = { 7390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundCeiling, 7391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundDown, 7392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundFloor, 7393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfDown, 7394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfEven, 7395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfUp, 7396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundUp}; 7397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *descriptions[] = { 7398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Ceiling", 7399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Down", 7400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Floor", 7401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half down", 7402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half even", 7403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half up", 7404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round up"}; 7405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016}; 7408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3", 7411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3", 7414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"}; 7417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016}; 7428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7429fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7430fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3", 7431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3", 7432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3", 7433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3", 7434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"}; 7437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7443fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7445fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7446fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0 7447fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7448fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {0.0, -0.0}; 7449fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7450fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7451fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7452fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7453fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7454fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7455fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7456fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0"}; 7458fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7459fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7460fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7461fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7462fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7463fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7464fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7465fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/ 7468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15}; 7471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25", 7474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25"}; 7480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15}; 7491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25", 7496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25"}; 7500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35}; 7511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25", 7514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7518fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25"}; 7520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7522fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7526fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7530fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35}; 7531fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7532fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7533fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 7534fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 7535fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25", 7536fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7537fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7538fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 7539fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25"}; 7540fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7541fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7542fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7543fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7544fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7545fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 7546fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(values) / sizeof(values[0])), 7547fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (int32_t) (sizeof(roundingModes) / sizeof(roundingModes[0]))); 7548fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7549fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7550fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7551fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() { 7552fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7553fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("0.00E0", status); 7554fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!assertSuccess("Formt creation", status)) { 7555fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7556fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7557fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString out; 7558fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.format(-0.0, out); 7559fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("format", "-0.00E0", out); 7560fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding( 7563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat& format, 7564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const double *values, 7565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *expected, 7566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const DecimalFormat::ERoundingMode *roundingModes, 7567fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *descriptions, 7568fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t valueSize, 7569fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t roundingModeSize) { 7570fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; i < roundingModeSize; ++i) { 7571fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setRoundingMode(roundingModes[i]); 7572fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t j = 0; j < valueSize; j++) { 7573fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString currentExpected(expected[i * valueSize + j]); 7574fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius currentExpected = currentExpected.unescape(); 7575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 7576fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.format(values[j], actual); 7577fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (currentExpected != actual) { 7578fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char buffer[256]; 7579fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sprintf( 7580fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius buffer, 7581fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "For %s value %f, expected ", 7582fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions[i], 7583fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values[j]); 7584fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln(UnicodeString(buffer) + currentExpected + ", got " + actual); 7585fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7586fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7587fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7588fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7589fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7590fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() { 7591fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7592fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING; 7593fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7594fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7595fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)1234.5, "$1,234.50", TRUE, status); 7596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7597fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-1234.5, "($1,234.50)", TRUE, status); 7598fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7599fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)0, "$0.00", TRUE, status); 7600fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 7601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-0.2, "($0.20)", TRUE, status); 7602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 7603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status); 7604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 7605fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status); 7606fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("de_DE", style, status), 7607fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (Formattable)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status); 7608fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7609fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7610fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186 7611fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() { 7612fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7613fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status); 7614fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7615fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormatSymbols for root"); 7616fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7617fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7618fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString pattern("#,##0.###"); 7619fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status); 7620fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7621fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormat using root symbols"); 7622fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7623fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7624fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7625fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone(); 7626fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32); 7627fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (*fmtClone == *fmtBase) { 7628fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth"); 7629fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7630fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtClone; 7631fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7632fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtBase; 7633fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7634fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7635f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid NumberFormatTest::TestCurrencyUsage() { 7636f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius double agent = 123.567; 7637f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7638f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UErrorCode status; 7639f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius DecimalFormat *fmt; 7640f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7641f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Digits 7642f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Note that as of CLDR 26: 7643f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // * TWD switches from 0 decimals to 2; PKR still has 0, so change test to that 7644f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // * CAD and all other currencies that rounded to .05 no longer do 7645f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7646f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_PKR("en_US@currency=PKR"); 7647f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7648f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7649f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7650f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7651f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CURRENCY, status); 7652f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CURRENCY", status, TRUE) == FALSE) { 7653f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7654f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7655f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7656f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original; 7657f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,original); 7658f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 1", UnicodeString("PKR124"), original); 7659f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7660f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // test the getter here 7661f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 7662f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test usage getter - standard", curUsage, UCURR_USAGE_STANDARD); 7663f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7664f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7665f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7666f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CASH_CURRENCY, status); 7667f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CASH", status, TRUE) == FALSE) { 7668f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7669f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7670f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7671f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7672f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // must be usage = cash 7673f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 7674f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test usage getter - cash", curUsage, UCURR_USAGE_CASH); 7675f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7676f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_currency; 7677f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,cash_currency); 7678f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 2", UnicodeString("PKR124"), cash_currency); 7679f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7680f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7681f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7682f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Rounding 7683f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7684f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_CAD("en_US@currency=CAD"); 7685f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7687f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7688f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 7689f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 7690f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7692f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7693f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original_rounding; 7694f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, original_rounding); 7695f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 3", UnicodeString("CA$123.57"), original_rounding); 7696f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7697f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7698f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 7699f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 7700f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7701f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7702f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7703f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7704f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_rounding_currency; 7705f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cash_rounding_currency); 7706f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 4", UnicodeString("CA$123.57"), cash_rounding_currency); 7707f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7708f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7709f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7710f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Test the currency change 7711f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 7712f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const UChar CUR_PKR[] = {0x50, 0x4B, 0x52, 0}; 7713f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 7714f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 7715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 7716f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 7717f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 7718f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7720f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 7721f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 7722f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 7723f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 7724f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 7725f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7726f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7727f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7728f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cur_original; 7729f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cur_original); 7730f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 5", UnicodeString("CA$123.57"), cur_original); 7731f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7732f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrency(CUR_PKR, status); 7733f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertSuccess("Set currency to PKR", status); 7734f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 7735f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString PKR_changed; 7736f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, PKR_changed); 7737f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 6", UnicodeString("PKR124"), PKR_changed); 7738f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 7739f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 7740f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 77411b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 77421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 77431b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Check the constant MAX_INT64_IN_DOUBLE. 77441b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// The value should convert to a double with no loss of precision. 77451b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// A failure may indicate a platform with a different double format, requiring 77461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// a revision to the constant. 77471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// 77481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Note that this is actually hard to test, because the language standard gives 77491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// compilers considerable flexibility to do unexpected things with rounding and 77501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// with overflow in simple int to/from float conversions. Some compilers will completely optimize 77511b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// away a simple round-trip conversion from int64_t -> double -> int64_t. 77521b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 77531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestDoubleLimit11439() { 77541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert char buf[50]; 77551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int64_t num = MAX_INT64_IN_DOUBLE-10; num<=MAX_INT64_IN_DOUBLE; num++) { 77561b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sprintf(buf, "%lld", (long long)num); 77571b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert double fNum = 0.0; 77581b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sscanf(buf, "%lf", &fNum); 77591b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int64_t rtNum = fNum; 77601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (num != rtNum) { 77611b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum); 77621b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 77631b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 77641b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 77651b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int64_t num = -MAX_INT64_IN_DOUBLE+10; num>=-MAX_INT64_IN_DOUBLE; num--) { 77661b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sprintf(buf, "%lld", (long long)num); 77671b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert double fNum = 0.0; 77681b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sscanf(buf, "%lf", &fNum); 77691b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int64_t rtNum = fNum; 77701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (num != rtNum) { 77711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum); 77721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 77731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 77741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 77751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 77761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 77771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestFastPathConsistent11524() { 77781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 77791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert NumberFormat *fmt = NumberFormat::createInstance("en", status); 77801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(status) || fmt == NULL) { 77811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Failed call to NumberFormat::createInstance() - %s", u_errorName(status)); 77821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 77831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 77841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert fmt->setMaximumIntegerDigits(INT32_MIN); 77851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString appendTo; 77861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert assertEquals("", "0", fmt->format(123, appendTo)); 77871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert appendTo.remove(); 77881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert assertEquals("", "0", fmt->format(12345, appendTo)); 77891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete fmt; 77901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 77911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 77921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 7793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 7794