numfmtst.cpp revision b0ac937921a2c196d8b9da665135bf6ba01a1ccf
143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/******************************************************************** 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * COPYRIGHT: 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Copyright (c) 1997-2009, International Business Machines Corporation and 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * others. All Rights Reserved. 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ********************************************************************/ 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/* Modification History: 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen* Date Name Description 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen* 07/15/99 helena Ported to HPUX 10/11 CC. 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen*/ 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/utypes.h" 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if !UCONFIG_NO_FORMATTING 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "numfmtst.h" 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/dcfmtsym.h" 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/decimfmt.h" 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/ucurr.h" 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/ustring.h" 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/measfmt.h" 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "unicode/curramt.h" 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "digitlst.h" 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "textfile.h" 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "tokiter.h" 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "charstr.h" 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "putilimp.h" 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "winnmtst.h" 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include <float.h> 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include <string.h> 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include <stdlib.h> 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "cstring.h" 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org//#define NUMFMTST_CACHE_DEBUG 1 3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifdef NUMFMTST_CACHE_DEBUG 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "stdio.h" 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif 375ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org 385ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org//#define NUMFMTST_DEBUG 1 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifdef NUMFMTST_DEBUG 40ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org#include "stdio.h" 41c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org#endif 42c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 4371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org 4471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgstatic const UChar EUR[] = {69,85,82,0}; // "EUR" 4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD" 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ***************************************************************************** 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// class NumberFormatTest 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ***************************************************************************** 5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define CHECK(status,str) if (U_FAILURE(status)) { errln(UnicodeString("FAIL: ") + str); return; } 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // if (exec) logln((UnicodeString)"TestSuite DateFormatTest"); 5843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen switch (index) { 5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(0,TestCurrencySign); 6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(1,TestCurrency); 6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(2,TestParse); 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(3,TestRounding487); 6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(4,TestQuotes); 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(5,TestExponential); 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(6,TestPatterns); 6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Upgrade to alphaWorks - liu 5/99 68a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org CASE(7,TestExponent); 69a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org CASE(8,TestScientific); 70a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org CASE(9,TestPad); 71a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org CASE(10,TestPatterns2); 72a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(11,TestSecondaryGrouping); 73a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(12,TestSurrogateSupport); 74496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org CASE(13,TestAPI); 75a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 76496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org CASE(14,TestCurrencyObject); 77a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(15,TestCurrencyPatterns); 78496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org //CASE(16,TestDigitList); 79a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(16,TestWhiteSpaceParsing); 80a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(17,TestComplexCurrency); // This test removed because CLDR no longer uses choice formats in currency symbols. 81c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CASE(18,TestRegCurrency); 82c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CASE(19,TestSymbolsWithBadLocale); 83a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(20,TestAdoptDecimalFormatSymbols); 84a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 85a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(21,TestScientific2); 86a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org CASE(22,TestScientificGrouping); 874a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org CASE(23,TestInt64); 887be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 894a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org CASE(24,TestPerMill); 904a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org CASE(25,TestIllegalPatterns); 9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(26,TestCases); 9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(27,TestCurrencyNames); 944a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org CASE(28,TestCurrencyAmount); 9543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(29,TestCurrencyUnit); 9643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(30,TestCoverage); 9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(31,TestJB3832); 9843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(32,TestHost); 995c838251403b0be9a882540f1922577abba4c872ager@chromium.org CASE(33,TestHostClone); 10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(34,TestCurrencyFormat); 10143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(35,TestRounding); 10243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CASE(36,TestNonpositiveMultiplier); 1031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(37,TestNumberingSystems); 1041456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(38,TestSpaceParsing); 1051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(39,TestMultiCurrencySign); 1061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(40,TestCurrencyFormatForMixParsing); 1071456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(41,TestDecimalFormatCurrencyParse); 1081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(42,TestCurrencyIsoPluralFormat); 1091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(43,TestCurrencyParsing); 1101456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org CASE(44,TestParseCurrencyInUCurr); 1111456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org default: name = ""; break; 1121456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org } 1131456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org} 1141456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 1151456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org// ------------------------------------- 1161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org 1171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org// Test API (increase code coverage) 1181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid 1191456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgNumberFormatTest::TestAPI(void) 1201456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org{ 1211456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org logln("Test API"); 12243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 12343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NumberFormat *test = NumberFormat::createInstance("root", status); 124496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org if(U_FAILURE(status)) { 125a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org errln("unable to create format object"); 126496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org } 127496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org if(test != NULL) { 128496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org test->setMinimumIntegerDigits(10); 129496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org test->setMaximumIntegerDigits(2); 130496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 131496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org test->setMinimumFractionDigits(10); 132496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org test->setMaximumFractionDigits(2); 133496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 134496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org UnicodeString result; 135496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org FieldPosition pos; 136496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers 137496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org test->format(bla, result, pos, status); 138496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org if(U_SUCCESS(status)) { 139a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org errln("Yuck... Formatted a duck... As a number!"); 140496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org } else { 141496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org status = U_ZERO_ERROR; 142496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org } 143496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org 144a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org result.remove(); 145a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org int64_t ll = 12; 146a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org test->format(ll, result); 147a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (result != "12.00"){ 148a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org errln("format int64_t error"); 14932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org } 150a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 1515323a9c29497eb5a52821d396990c6d75a37baf7jkummerow@chromium.org delete test; 1525323a9c29497eb5a52821d396990c6d75a37baf7jkummerow@chromium.org } 15332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 15432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 155a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgclass StubNumberForamt :public NumberFormat{ 156a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgpublic: 157a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org StubNumberForamt(){}; 158a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const { 159a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return appendTo; 160a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 161a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const { 162a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return appendTo.append((UChar)0x0033); 163a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 164a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const { 165a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return NumberFormat::format(number, appendTo, pos); 166a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 167a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const { 168a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return appendTo; 169a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 170a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual void parse(const UnicodeString& , 171a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org Formattable& , 172a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org ParsePosition& ) const {} 173a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual void parse( const UnicodeString& , 174a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org Formattable& , 175a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org UErrorCode& ) const {} 176a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual UClassID getDynamicClassID(void) const { 177a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org static char classID = 0; 178a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return (UClassID)&classID; 179a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 180a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org virtual Format* clone() const {return NULL;} 181a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org}; 182a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 183a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid 184a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgNumberFormatTest::TestCoverage(void){ 185a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org StubNumberForamt stub; 186a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org UnicodeString agent("agent"); 187a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org FieldPosition pos; 188a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org int64_t num = 4; 189a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (stub.format(num, agent, pos) != UnicodeString("agent3")){ 190a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)"); 191a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org }; 192a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org} 193a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 194a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org// Test various patterns 195a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid 196a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgNumberFormatTest::TestPatterns(void) 197a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org{ 198a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org UErrorCode status = U_ZERO_ERROR; 199a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DecimalFormatSymbols sym(Locale::getUS(), status); 200a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (U_FAILURE(status)) { errln("FAIL: Could not construct DecimalFormatSymbols"); return; } 201a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 202a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org const char* pat[] = { "#.#", "#.", ".#", "#" }; 203a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 204a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 205a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org const char* num[] = { "0", "0.", ".0", "0" }; 206a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org for (int32_t i=0; i<pat_length; ++i) 207a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org { 208a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org status = U_ZERO_ERROR; 209a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org DecimalFormat fmt(pat[i], sym, status); 210a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; } 211a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org UnicodeString newp; fmt.toPattern(newp); 212a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (!(newp == newpat[i])) 213a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] + 214a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org "; " + newp + " seen instead"); 215a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 216a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s); 217a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (!(s == num[i])) 218a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org { 21932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] + 220a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org "; " + s + " seen instead"); 221a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits()); 222a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 223a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 224a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org} 225a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 226a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org/* 227a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug 228a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug 229a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug 230a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org*/ 231a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org/* 232a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid 233a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgNumberFormatTest::TestDigitList(void) 234a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org{ 235a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org // API coverage for DigitList 236a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DigitList list1; 237a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org list1.append('1'); 238a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org list1.fDecimalAt = 1; 239a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DigitList list2; 240a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org list2.set((int32_t)1); 241a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (list1 != list2) { 242a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org errln("digitlist append, operator!= or set failed "); 243a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 244a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (!(list1 == list2)) { 24543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln("digitlist append, operator== or set failed "); 24643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 247a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org} 248a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org*/ 249a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org 250a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org// ------------------------------------- 25143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Test exponential pattern 253a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid 254a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgNumberFormatTest::TestExponential(void) 25543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 256a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org UErrorCode status = U_ZERO_ERROR; 257a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org DecimalFormatSymbols sym(Locale::getUS(), status); 258a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormatSymbols ct"); return; } 259a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t pat_length = (int32_t)(sizeof(pat) / sizeof(pat[0])); 26143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// The following #if statements allow this test to be built and run on 26343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// platforms that do not have standard IEEE numerics. For example, 26443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// S/390 doubles have an exponent range of -78 to +75. For the 26543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// following #if statements to work, float.h must define 26643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DBL_MAX_10_EXP to be a compile-time constant. 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// This section may be expanded as needed. 26943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 27043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if DBL_MAX_10_EXP > 300 27143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 272a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org int32_t val_length = (int32_t)(sizeof(val) / sizeof(val[0])); 273a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org const char* valFormat[] = 27443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 27543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 0.####E0 27643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 27743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 00.000E00 27843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 27943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // ##0.######E000 28043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 28143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 0.###E0;[0.###E0] 282a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 283a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org }; 28443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double valParse[] = 28543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 286a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 0.01234, 123460000, 1.23E300, -3.1416E-271, 287a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 0.01234, 123460000, 1.23E300, -3.1416E-271, 28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123456800, 1.23E300, -3.141593E-271, 28943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123500000, 1.23E300, -3.142E-271, 29043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 29143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#elif DBL_MAX_10_EXP > 70 29243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 }; 29343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t val_length = sizeof(val) / sizeof(val[0]); 29443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char* valFormat[] = 2955ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org { 2965ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org // 0.####E0 2975ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71", 2985ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org // 00.000E00 29943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72", 30043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // ##0.######E000 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072", 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 0.###E0;[0.###E0] 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]" 30443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 30543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double valParse[] = 30643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 30743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123460000, 1.23E70, -3.1416E-71, 30843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123460000, 1.23E70, -3.1416E-71, 30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123456800, 1.23E70, -3.141593E-71, 31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0.01234, 123500000, 1.23E70, -3.142E-71, 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 31243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#else 31343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Don't test double conversion 31443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double* val = 0; 31543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t val_length = 0; 31643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char** valFormat = 0; 31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double* valParse = 0; 31843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln("Warning: Skipping double conversion tests"); 31943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif 32043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t lval[] = { 0, -1, 1, 123456789 }; 32243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t lval_length = (int32_t)(sizeof(lval) / sizeof(lval[0])); 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* lvalFormat[] = 3245ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org { 32543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 0.####E0 32643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "0E0", "-1E0", "1E0", "1.2346E8", 32743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 00.000E00 32843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 32943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // ##0.######E000 33043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "0E000", "-1E000", "1E000", "123.4568E006", 33143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // 0.###E0;[0.###E0] 33243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "0E0", "[1E0]", "1E0", "1.235E8" 33343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen }; 334a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org int32_t lvalParse[] = 33543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 33637abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 0, -1, 1, 123460000, 33737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 0, -1, 1, 123460000, 33837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 0, -1, 1, 123456800, 33937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 0, -1, 1, 123500000, 34059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org }; 341236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org int32_t ival = 0, ilval = 0; 34259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org for (int32_t p=0; p<pat_length; ++p) 343236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org { 344a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org DecimalFormat fmt(pat[p], sym, status); 34559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; } 346a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org UnicodeString pattern; 34743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" + 34843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.toPattern(pattern) + "\""); 34937abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com int32_t v; 35037abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com for (v=0; v<val_length; ++v) 35143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 352236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s); 35343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" " + val[v] + " -format-> " + s); 35443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (s != valFormat[v+ival]) 3557304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]); 35643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 35743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ParsePosition pos(0); 35843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Formattable af; 35943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.parse(s, af, pos); 36043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen double a; 36143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UBool useEpsilon = FALSE; 36243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (af.getType() == Formattable::kLong) 36343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen a = af.getLong(); 36443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen else if (af.getType() == Formattable::kDouble) { 36543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen a = af.getDouble(); 366b9d7da12d4486aa0a9d6660de46d977198076e77sgjesse@chromium.org#if defined(OS390) || defined(OS400) 367b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org // S/390 will show a failure like this: 368b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org //| -3.141592652999999e-271 -format-> -3.1416E-271 3695c838251403b0be9a882540f1922577abba4c872ager@chromium.org //| -parse-> -3.1416e-271 3705c838251403b0be9a882540f1922577abba4c872ager@chromium.org //| FAIL: Expected -3.141599999999999e-271 37143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // To compensate, we use an epsilon-based equality 37243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // test on S/390 only. We don't want to do this in 37343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // general because it's less exacting. 37443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen useEpsilon = TRUE; 37543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif 376086aac6d6268988582d3b5b0aa8d24f61ddc1f1ffschneider@chromium.org } 377086aac6d6268988582d3b5b0aa8d24f61ddc1f1ffschneider@chromium.org else { 378086aac6d6268988582d3b5b0aa8d24f61ddc1f1ffschneider@chromium.org errln((UnicodeString)"FAIL: Non-numeric Formattable returned"); 37943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen continue; 380236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org } 38143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (pos.getIndex() == s.length()) 38243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 38343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" -parse-> " + a); 384236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org // Use epsilon comparison as necessary 38559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org if ((useEpsilon && 38643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) || 38743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (!useEpsilon && a != valParse[v+ival])) 38843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 38943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]); 39043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 39143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 39259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org else { 39343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 39443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)" should be (" + s.length() + " chars) -> " + valParse[v+ival]); 39543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 39643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 39743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (v=0; v<lval_length; ++v) 39859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org { 39943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString s; 40043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*(NumberFormat*)&fmt).format(lval[v], s); 40143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" " + lval[v] + "L -format-> " + s); 402236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org if (s != lvalFormat[v+ilval]) 40343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s); 40443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 40543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ParsePosition pos(0); 40643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Formattable af; 40743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.parse(s, af, pos); 40843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (af.getType() == Formattable::kLong || 409236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org af.getType() == Formattable::kInt64) { 41043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 41143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t a = af.getLong(status); 412a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (pos.getIndex() == s.length()) 413a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org { 414a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org logln((UnicodeString)" -parse-> " + a); 415a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (a != lvalParse[v+ilval]) 416a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]); 41743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 41843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen else 41943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 420c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 421c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com else 422c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s 423c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com + " Double: " + af.getDouble() 424c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com + ", Long: " + af.getLong()); 425c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 426c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ival += val_length; 42743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ilval += lval_length; 428c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 429c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 43043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 431ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgvoid 432ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.orgNumberFormatTest::TestScientific2() { 433ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org // jb 2552 434ddb913d619a6e602f53dd17b0fe71158ce66888dager@chromium.org UErrorCode status = U_ZERO_ERROR; 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status); 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_SUCCESS(status)) { 437236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org double num = 12.34; 43843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(*fmt, num, "$12.34"); 439c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com fmt->setScientificNotation(TRUE); 440c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expect(*fmt, num, "$1.23E1"); 441c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com fmt->setScientificNotation(FALSE); 442c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expect(*fmt, num, "$12.34"); 443c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 444c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com delete fmt; 44543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 446c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 447c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comvoid 44843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenNumberFormatTest::TestScientificGrouping() { 44943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // jb 2552 45043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 4517276f14ca716596e0a0d17539516370c1f453847kasper.lund DecimalFormat fmt("##0.00E0",status); 4527276f14ca716596e0a0d17539516370c1f453847kasper.lund if (U_SUCCESS(status)) { 4537276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, .01234, "12.3E-3"); 4547276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, .1234, "123E-3"); 4557276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, 1.234, "1.23E0"); 4567276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, 12.34, "12.3E0"); 4577276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, 123.4, "123E0"); 4587276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, 1234., "1.23E3"); 4597276f14ca716596e0a0d17539516370c1f453847kasper.lund } 4607276f14ca716596e0a0d17539516370c1f453847kasper.lund} 4617276f14ca716596e0a0d17539516370c1f453847kasper.lund 4627276f14ca716596e0a0d17539516370c1f453847kasper.lund/*static void setFromString(DigitList& dl, const char* str) { 4637276f14ca716596e0a0d17539516370c1f453847kasper.lund char c; 4647276f14ca716596e0a0d17539516370c1f453847kasper.lund UBool decimalSet = FALSE; 4657276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.clear(); 4667276f14ca716596e0a0d17539516370c1f453847kasper.lund while ((c = *str++)) { 467a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org if (c == '-') { 4687276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.fIsPositive = FALSE; 4697276f14ca716596e0a0d17539516370c1f453847kasper.lund } else if (c == '+') { 4707276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.fIsPositive = TRUE; 4717276f14ca716596e0a0d17539516370c1f453847kasper.lund } else if (c == '.') { 4727276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.fDecimalAt = dl.fCount; 4737276f14ca716596e0a0d17539516370c1f453847kasper.lund decimalSet = TRUE; 474a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org } else { 4757276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.append(c); 4767276f14ca716596e0a0d17539516370c1f453847kasper.lund } 4777276f14ca716596e0a0d17539516370c1f453847kasper.lund } 4787276f14ca716596e0a0d17539516370c1f453847kasper.lund if (!decimalSet) { 4797276f14ca716596e0a0d17539516370c1f453847kasper.lund dl.fDecimalAt = dl.fCount; 4807276f14ca716596e0a0d17539516370c1f453847kasper.lund } 4817276f14ca716596e0a0d17539516370c1f453847kasper.lund}*/ 4827276f14ca716596e0a0d17539516370c1f453847kasper.lund 4837276f14ca716596e0a0d17539516370c1f453847kasper.lundvoid 4847276f14ca716596e0a0d17539516370c1f453847kasper.lundNumberFormatTest::TestInt64() { 4857276f14ca716596e0a0d17539516370c1f453847kasper.lund UErrorCode status = U_ZERO_ERROR; 4867276f14ca716596e0a0d17539516370c1f453847kasper.lund DecimalFormat fmt("#.#E0",status); 4877276f14ca716596e0a0d17539516370c1f453847kasper.lund fmt.setMaximumFractionDigits(20); 4887276f14ca716596e0a0d17539516370c1f453847kasper.lund if (U_SUCCESS(status)) { 4897276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)0, "0E0"); 4907276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)-1, "-1E0"); 4917276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)1, "1E0"); 4927276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9"); 4937276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9"); 4947276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18"); 4957276f14ca716596e0a0d17539516370c1f453847kasper.lund expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18"); 4967276f14ca716596e0a0d17539516370c1f453847kasper.lund } 4977276f14ca716596e0a0d17539516370c1f453847kasper.lund 498a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org // also test digitlist 499a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org/* int64_t int64max = U_INT64_MAX; 5007276f14ca716596e0a0d17539516370c1f453847kasper.lund int64_t int64min = U_INT64_MIN; 5017276f14ca716596e0a0d17539516370c1f453847kasper.lund const char* int64maxstr = "9223372036854775807"; 5027276f14ca716596e0a0d17539516370c1f453847kasper.lund const char* int64minstr = "-9223372036854775808"; 5037276f14ca716596e0a0d17539516370c1f453847kasper.lund UnicodeString fail("fail: "); 5047276f14ca716596e0a0d17539516370c1f453847kasper.lund 505236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org // test max int64 value 50643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DigitList dl; 50743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen setFromString(dl, int64maxstr); 50843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 50943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!dl.fitsIntoInt64(FALSE)) { 51043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(fail + int64maxstr + " didn't fit"); 51143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 51243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int64_t int64Value = dl.getInt64(); 51343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (int64Value != int64max) { 51443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(fail + int64maxstr); 515c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 51643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen dl.set(int64Value); 517c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org int64Value = dl.getInt64(); 518c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (int64Value != int64max) { 519c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln(fail + int64maxstr); 520a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 52143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 522c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org // test negative of max int64 value (1 shy of min int64 value) 523c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org dl.fIsPositive = FALSE; 5249d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com { 5259d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com if (!dl.fitsIntoInt64(FALSE)) { 526f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org errln(fail + "-" + int64maxstr + " didn't fit"); 5279d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com } 5289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int64_t int64Value = dl.getInt64(); 529061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org if (int64Value != -int64max) { 530061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org errln(fail + "-" + int64maxstr); 531c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 532c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org dl.set(int64Value); 53343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int64Value = dl.getInt64(); 534c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (int64Value != -int64max) { 535c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln(fail + "-" + int64maxstr); 536c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 537c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 538c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org // test min int64 value 539c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org setFromString(dl, int64minstr); 540c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org { 541c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (!dl.fitsIntoInt64(FALSE)) { 542c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln(fail + "-" + int64minstr + " didn't fit"); 543c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 544061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org int64_t int64Value = dl.getInt64(); 545c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (int64Value != int64min) { 546c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln(fail + int64minstr); 54743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 54843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen dl.set(int64Value); 54943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int64Value = dl.getInt64(); 55083e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org if (int64Value != int64min) { 55143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(fail + int64minstr); 552c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 553c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org } 554c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org // test negative of min int 64 value (1 more than max int64 value) 555ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org dl.fIsPositive = TRUE; // won't fit 556c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org { 557c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (dl.fitsIntoInt64(FALSE)) { 558c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln(fail + "-(" + int64minstr + ") didn't fit"); 559c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org } 560c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org }*/ 561c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org} 562c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 563ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// ------------------------------------- 564ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 565c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org// Test the handling of quotes 566c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgvoid 567c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgNumberFormatTest::TestQuotes(void) 568c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org{ 56943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 57083e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org UnicodeString *pat; 57143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status); 572ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org pat = new UnicodeString("a'fo''o'b#"); 573c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status); 57443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString s; 57583e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org ((NumberFormat*)fmt)->format((int32_t)123, s); 57643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)"Pattern \"" + *pat + "\""); 577c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org logln((UnicodeString)" Format 123 -> " + escape(s)); 57843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!(s=="afo'ob123")) 57943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Expected afo'ob123"); 580ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 581c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org s.truncate(0); 582c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org delete fmt; 583c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org delete pat; 584c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 585c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org pat = new UnicodeString("a''b#"); 586c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org fmt = new DecimalFormat(*pat, *sym, status); 587c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org ((NumberFormat*)fmt)->format((int32_t)123, s); 588c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org logln((UnicodeString)"Pattern \"" + *pat + "\""); 589ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org logln((UnicodeString)" Format 123 -> " + escape(s)); 590c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org if (!(s=="a'b123")) 591c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org errln((UnicodeString)"FAIL: Expected a'b123"); 592c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org delete fmt; 593c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org delete pat; 594c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org delete sym; 595ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 596c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org 597c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org/** 598c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org * Test the handling of the currency symbol in patterns. 599c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org */ 600c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgvoid 601c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgNumberFormatTest::TestCurrencySign(void) 602c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org{ 603c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org UErrorCode status = U_ZERO_ERROR; 604c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status); 605c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org UnicodeString pat; 606c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org UChar currency = 0x00A4; 607c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org // "\xA4#,##0.00;-\xA4#,##0.00" 608c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org pat.append(currency).append("#,##0.00;-"). 609c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org append(currency).append("#,##0.00"); 610c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org DecimalFormat *fmt = new DecimalFormat(pat, *sym, status); 611c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s); 612c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.org pat.truncate(0); 613ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 614003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 615ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (s != "$1,234.56") errln((UnicodeString)"FAIL: Expected $1,234.56"); 61643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen s.truncate(0); 61743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ((NumberFormat*)fmt)->format(- 1234.56, s); 61843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 619ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org if (s != "-$1,234.56") errln((UnicodeString)"FAIL: Expected -$1,234.56"); 62043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete fmt; 6213e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org pat.truncate(0); 6223e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00" 6233e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org pat.append(currency).append(currency). 62443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen append(" #,##0.00;"). 6253e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org append(currency).append(currency). 6263e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org append(" -#,##0.00"); 6273e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org fmt = new DecimalFormat(pat, *sym, status); 6283e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org s.truncate(0); 6293e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org ((NumberFormat*)fmt)->format(1234.56, s); 63043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 63143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 63243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (s != "USD 1,234.56") errln((UnicodeString)"FAIL: Expected USD 1,234.56"); 63343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen s.truncate(0); 63443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ((NumberFormat*)fmt)->format(-1234.56, s); 63543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 63643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (s != "USD -1,234.56") errln((UnicodeString)"FAIL: Expected USD -1,234.56"); 63743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete fmt; 63843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete sym; 63943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 64043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 64143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ------------------------------------- 64343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 64443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenstatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); } 64543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 646c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgUnicodeString& 647c36ce6e8979bbbd43539f0a0effc87ea20dd65cckmillikin@chromium.orgNumberFormatTest::escape(UnicodeString& s) 6488e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org{ 64943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString buf; 65043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int32_t i=0; i<s.length(); ++i) 65143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen { 6523291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org UChar c = s[(int32_t)i]; 65343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (c <= (UChar)0x7F) buf += c; 65443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen else { 65543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen buf += (UChar)0x5c; buf += (UChar)0x55; 65643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen buf += toHexString((c & 0xF000) >> 12); 65743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen buf += toHexString((c & 0x0F00) >> 8); 65843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen buf += toHexString((c & 0x00F0) >> 4); 65989e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org buf += toHexString(c & 0x000F); 66089e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org } 66189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org } 66289e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org return (s = buf); 6633811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 664c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 66588aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org 66688aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org// ------------------------------------- 6673811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgstatic const char* testCases[][2]= { 6683811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org /* locale ID */ /* expected */ 6693811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org {"ca_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 670c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"de_LU_PREEURO", "1,150\\u00A0F" }, 671c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" }, 672c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"en_BE_PREEURO", "1.150,50\\u00A0BF" }, 673c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"es_ES_PREEURO", "\\u20A7\\u00A01.150" }, 674c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"eu_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 675c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 676c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org {"it_IT_PREEURO", "\\u20A4\\u00A01.150" }, 67788aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org {"pt_PT_PREEURO", "1,150$50\\u00A0Esc."}, 6783811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org {"en_US@currency=JPY", "\\u00A51,150"} 67943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}; 68043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 6814af710e493dc8583f3b7b7ce65127ad4e7c3f8a1ager@chromium.org * Test localized currency patterns. 682911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org */ 683911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.orgvoid 684911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.orgNumberFormatTest::TestCurrency(void) 68543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 6862356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org UErrorCode status = U_ZERO_ERROR; 6872356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status); 6882356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org if (U_FAILURE(status)) { 6892356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org dataerrln("Error calling NumberFormat::createCurrencyInstance()"); 690ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org return; 69189e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org } 692ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org 69343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString s; currencyFmt->format(1.50, s); 6942356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org logln((UnicodeString)"Un pauvre ici a..........." + s); 6952356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org if (!(s==CharsToUnicodeString("1,50\\u00A0$"))) 6962356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$"); 697a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org delete currencyFmt; 698a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org s.truncate(0); 6995f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org char loc[256]={0}; 7005f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status); 7015f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status); 7025f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org currencyFmt->format(1.50, s); 7035f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org logln((UnicodeString)"Un pauvre en Allemagne a.." + s); 7045f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org if (!(s==CharsToUnicodeString("1,50\\u00A0DM"))) 7055f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM"); 7065f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org delete currencyFmt; 7075f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org s.truncate(0); 708212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status); 709212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 710212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org currencyFmt->format(1.50, s); 711a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org logln((UnicodeString)"Un pauvre en France a....." + s); 71243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!(s==CharsToUnicodeString("1,50\\u00A0F"))) 71343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F"); 71443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete currencyFmt; 71543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_FAILURE(status)) 71643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln((UnicodeString)"FAIL: Status " + (int32_t)status); 71743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 71843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for(int i=0; i < (int)(sizeof(testCases)/sizeof(testCases[i])); i++){ 71943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen status = U_ZERO_ERROR; 72043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char *localeID = testCases[i][0]; 72143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString expected(testCases[i][1], -1, US_INV); 72243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expected = expected.unescape(); 72343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen s.truncate(0); 72443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen char loc[256]={0}; 7253291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org uloc_canonicalize(localeID, loc, 256, &status); 72643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 72743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if(U_FAILURE(status)){ 7283291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org errln("Could not create currency formatter for locale %s",localeID); 72943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen continue; 73043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 73143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen currencyFmt->format(1150.50, s); 73243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if(s!=expected){ 73343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(UnicodeString("FAIL: Expected: ")+expected 73443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen + UnicodeString(" Got: ") + s 73543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 73664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 7375ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org if (U_FAILURE(status)){ 7385ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org errln((UnicodeString)"FAIL: Status " + (int32_t)status); 73943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete currencyFmt; 74143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 74243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 74343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ------------------------------------- 74543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Test the Currency object handling, new as of ICU 2.2. 748a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org */ 74943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestCurrencyObject() { 75043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode ec = U_ZERO_ERROR; 75143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NumberFormat* fmt = 75243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NumberFormat::createCurrencyInstance(Locale::getUS(), ec); 75343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_FAILURE(ec)) { 755a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org errln("FAIL: getCurrencyInstance(US)"); 756a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org delete fmt; 757a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return; 75843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 759c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 76043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Locale null("", "", ""); 761c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 76243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, null, 1234.56, "$1,234.56"); 76343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale::getFrance(), 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro 76643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale::getJapan(), 76843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen 7693bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org 77043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale("fr", "CH", ""), 77143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, "Fr.1,234.55"); // 0.05 rounding 7723bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org 77343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale::getUS(), 77443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, "$1,234.56"); 77543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete fmt; 777c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec); 77843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_FAILURE(ec)) { 780c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com errln("FAIL: getCurrencyInstance(FRANCE)"); 78143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete fmt; 78243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 783c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 78443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 78543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); 786c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 78743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale::getJapan(), 78843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, CharsToUnicodeString("1 235 \\u00A5JP")); // Yen 78943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 790c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expectCurrency(*fmt, Locale("fr", "CH", ""), 791c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1234.56, "1 234,55 CHF"); // 0.05 rounding 792c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 79343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectCurrency(*fmt, Locale::getUS(), 79443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1234.56, "1 234,56 $US"); 795ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 796ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org expectCurrency(*fmt, Locale::getFrance(), 797ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro 7980c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org 7990c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org delete fmt; 800ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org} 8019dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com 8020c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org// ------------------------------------- 8037be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 8047be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org/** 8057be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org * Do rudimentary testing of parsing. 80643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 80743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid 80843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenNumberFormatTest::TestParse(void) 80943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 810c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com UErrorCode status = U_ZERO_ERROR; 81143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString arg("0"); 812c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com DecimalFormat* format = new DecimalFormat("00", status); 813c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com //try { 81443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Formattable n; format->parse(arg, n, status); 81543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)"parse(" + arg + ") = " + n.getLong()); 81643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (n.getType() != Formattable::kLong || 8172ec107fe650fe56eed094ca017940f26af46644bsgjesse@chromium.org n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0"); 818c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com delete format; 81943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 820c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com //} 82143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen //catch(Exception e) { 82243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // errln((UnicodeString)"Exception caught: " + e); 823c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com //} 824a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 825c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 826c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// ------------------------------------- 82737abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 82837abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com/** 829a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org * Test proper rounding by the format method. 83043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 83143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid 832c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comNumberFormatTest::TestRounding487(void) 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{ 834c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com UErrorCode status = U_ZERO_ERROR; 83543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NumberFormat *nf = NumberFormat::createInstance(status); 8364af710e493dc8583f3b7b7ce65127ad4e7c3f8a1ager@chromium.org if (U_FAILURE(status)) { 83743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen dataerrln("Error calling NumberFormat::createInstance()"); 83843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 8394a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org } 84043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen roundingTest(*nf, 0.00159999, 4, "0.0016"); 84243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen roundingTest(*nf, 0.00995, 4, "0.01"); 84343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen roundingTest(*nf, 12.3995, 3, "12.4"); 84543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 84643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen roundingTest(*nf, 12.4999, 0, "12"); 84743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen roundingTest(*nf, - 19.5, 0, "-20"); 8482abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org delete nf; 8492abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 850c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 8512abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org 8522abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org/** 85343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Test the functioning of the secondary grouping value. 85443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 85543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestSecondaryGrouping(void) { 85643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 85743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols US(Locale::getUS(), status); 85843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormatSymbols ct"); 8592abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org 8602abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org DecimalFormat f("#,##,###", US, status); 86143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormat ct"); 86243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 86343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(f, (int32_t)123456789L, "12,34,56,789"); 86443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectPat(f, "#,##,###"); 86543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen f.applyPattern("#,###", status); 86643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "applyPattern"); 867c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 86843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen f.setSecondaryGroupingSize(4); 86943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(f, (int32_t)123456789L, "12,3456,789"); 870c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expectPat(f, "#,####,###"); 87143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status); 87243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "createInstance(hi_IN)"); 87343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 87426c16f8ef35ec25d36420512a4ceaa74ea2e2b05vegorov@chromium.org UnicodeString out; 875e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org int32_t l = (int32_t)1876543210L; 876e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org g->format(l, out); 87743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen delete g; 87843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // expect "1,87,65,43,210", but with Hindi digits 879c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org // 01234567890123 88043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UBool ok = TRUE; 88143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (out.length() != 14) { 88243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ok = FALSE; 883c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } else { 88443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen for (int32_t i=0; i<out.length(); ++i) { 88543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UBool expectGroup = FALSE; 88643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen switch (i) { 887c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org case 1: 88843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case 4: 889c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com case 7: 89043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case 10: 89143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectGroup = TRUE; 89243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 893a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org } 89443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Later -- fix this to get the actual grouping 895c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // character from the resource bundle. 89643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UBool isGroup = (out.charAt(i) == 0x002C); 897c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (isGroup != expectGroup) { 89843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ok = FALSE; 89943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 90043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 90143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 902c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 90343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!ok) { 904b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org errln((UnicodeString)"FAIL Expected " + l + 90543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" + 906c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com escape(out) + "\""); 9071af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org } else { 90843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen logln((UnicodeString)"Ok " + l + 90943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen " x hi_IN -> \"" + 910c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com escape(out) + "\""); 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 912c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 913c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestWhiteSpaceParsing(void) { 91543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode ec = U_ZERO_ERROR; 91643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols US(Locale::getUS(), ec); 917a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org DecimalFormat fmt("a b#0c ", US, ec); 918c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (U_FAILURE(ec)) { 91943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln("FAIL: Constructor"); 92043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return; 92143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 92243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t n = 1234; 92343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(fmt, "a b1234c ", n); 92443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(fmt, "a b1234c ", n); 92543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 92643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 92743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 92843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Test currencies whose display name is a ChoiceFormat. 92943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 93043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestComplexCurrency() { 93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// UErrorCode ec = U_ZERO_ERROR; 93343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Locale loc("kn", "IN", ""); 93443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec); 93543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// if (U_SUCCESS(ec)) { 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00")); 93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Use .00392625 because that's 2^-8. Any value less than 0.005 is fine. 93843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00")); 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50")); 94143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00")); 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00")); 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// } else { 94443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// errln("FAIL: getCurrencyInstance(kn_IN)"); 94543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// } 94643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// delete fmt; 947236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 948fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org} 949c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 95043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ------------------------------------- 951fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 9528e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgvoid 953471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.orgNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected) 954471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org{ 95543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen nf.setMaximumFractionDigits(maxFractionDigits); 95643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString out; nf.format(x, out); 95783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out); 95883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected); 959236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} 960c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 96143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 962236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org * Upgrade to alphaWorks 96343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 96443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestExponent(void) { 96583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org UErrorCode status = U_ZERO_ERROR; 96683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org DecimalFormatSymbols US(Locale::getUS(), status); 96783a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org CHECK(status, "DecimalFormatSymbols constructor"); 9687304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org DecimalFormat fmt1(UnicodeString("0.###E0"), US, status); 9697304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org CHECK(status, "DecimalFormat(0.###E0)"); 97043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status); 97143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormat(0.###E+0)"); 97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t n = 1234; 973ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org expect2(fmt1, n, "1.234E3"); 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(fmt2, n, "1.234E+3"); 97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(fmt1, "1.234E+3", n); // Either format should parse "E+3" 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 977ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 978a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org/** 97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Upgrade to alphaWorks 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestScientific(void) { 98243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 98343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols US(Locale::getUS(), status); 98443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormatSymbols constructor"); 985ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 98643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Test pattern round-trip 98743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000", 98843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "0.###E0;[0.###E0]" }; 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t PAT_length = (int32_t)(sizeof(PAT) / sizeof(PAT[0])); 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t DIGITS[] = { 99143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // min int, max int, min frac, max frac 99243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 0, 1, 0, 0, // "#E0" 99343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1, 1, 0, 4, // "0.####E0" 99443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2, 2, 3, 3, // "00.000E00" 995086aac6d6268988582d3b5b0aa8d24f61ddc1f1ffschneider@chromium.org 1, 3, 0, 4, // "##0.####E000" 996061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org 1, 1, 0, 3, // "0.###E0;[0.###E0]" 9970c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org }; 998061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org for (int32_t i=0; i<PAT_length; ++i) { 99943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString pat(PAT[i]); 100043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormat df(pat, US, status); 1001eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org CHECK(status, "DecimalFormat constructor"); 1002eadaf2282ee421d7a63a21d71369b029105341ccager@chromium.org UnicodeString pat2; 10031b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org df.toPattern(pat2); 1004a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (pat == pat2) { 100564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org logln(UnicodeString("Ok Pattern rt \"") + 100664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org pat + "\" -> \"" + 100764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org pat2 + "\""); 100843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 100943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(UnicodeString("FAIL Pattern rt \"") + 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pat + "\" -> \"" + 101143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen pat2 + "\""); 101243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 101343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Make sure digit counts match what we expect 101443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (df.getMinimumIntegerDigits() != DIGITS[4*i] || 101543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMaximumIntegerDigits() != DIGITS[4*i+1] || 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMinimumFractionDigits() != DIGITS[4*i+2] || 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMaximumFractionDigits() != DIGITS[4*i+3]) { 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen errln(UnicodeString("FAIL \"" + pat + 101943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "\" min/max int; min/max frac = ") + 102043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMinimumIntegerDigits() + "/" + 102143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMaximumIntegerDigits() + ";" + 102243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMinimumFractionDigits() + "/" + 102343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen df.getMaximumFractionDigits() + ", expect " + 102443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DIGITS[4*i] + "/" + 102543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DIGITS[4*i+1] + ";" + 102643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DIGITS[4*i+2] + "/" + 102743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DIGITS[4*i+3]); 102843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 102943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 103043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 10323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org // Test the constructor for default locale. We have to 103343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // manually set the default locale, as there is no 103443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // guarantee that the default locale has the same 103543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // scientific format. 1036061ef74c9b8acd038edf4b4355c50d097c8a9683kasperl@chromium.org Locale def = Locale::getDefault(); 103743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Locale::setDefault(Locale::getUS(), status); 103843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(NumberFormat::createScientificInstance(status), 103943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12345.678901, 104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "1.2345678901E4", status); 10417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org Locale::setDefault(def, status); 104243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("#E0", US, status), 104443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12345.0, 104543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "1.2345E4", status); 104643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(new DecimalFormat("0E0", US, status), 104743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12345.0, 104846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org "1E4", status); 104943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(NumberFormat::createScientificInstance(Locale::getUS(), status), 1050c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 12345.678901, 105143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "1.2345678901E4", status); 1052ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org expect(new DecimalFormat("##0.###E0", US, status), 10537979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org 12345.0, 105443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.34E3", status); 105543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(new DecimalFormat("##0.###E0", US, status), 10561f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org 12345.00001, 105743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.35E3", status); 105843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("##0.####E0", US, status), 10591f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org (int32_t) 12345, 106043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen "12.345E3", status); 1061846fb74ad58083497b91fc4668a56fddb36fbd2esgjesse@chromium.org expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status), 1062fb144a0716afe7ab8bf245f2391a9e53b3db3c89fschneider@chromium.org 12345.678901, 1063ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org "1,2345678901E4", status); 106443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(new DecimalFormat("##0.####E0", US, status), 1065c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 789.12345e-9, 1066471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org "789.12E-9", status); 1067c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org expect2(new DecimalFormat("##0.####E0", US, status), 1068ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 780.e-9, 106964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org "780E-9", status); 10704acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org expect(new DecimalFormat(".###E0", US, status), 10714acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org 45678.0, 10724acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org ".457E5", status); 10734acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org expect2(new DecimalFormat(".###E0", US, status), 10744acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org (int32_t) 0, 10754acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org ".0E0", status); 10764acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org /* 10774acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org expect(new DecimalFormat[] { new DecimalFormat("#E0", US), 10784acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org new DecimalFormat("##E0", US), 10794acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org new DecimalFormat("####E0", US), 1080f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org new DecimalFormat("0E0", US), 10814121f23c2a08f8ef03858df1477b81a0450b94a0ulan@chromium.org new DecimalFormat("00E0", US), 10824af710e493dc8583f3b7b7ce65127ad4e7c3f8a1ager@chromium.org new DecimalFormat("000E0", US), 1083c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org }, 108433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org new Long(45678000), 1085c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org new String[] { "4.5678E7", 1086c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org "45.678E6", 1087c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org "4567.8E4", 10880c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org "5E7", 10890c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org "46E6", 10900c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org "457E5", 10910c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org } 10920c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org ); 109343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ! 109443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ! Unroll this test into individual tests below... 109543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ! 109643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 1097c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expect2(new DecimalFormat("#E0", US, status), 1098ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org (int32_t) 45678000, "4.5678E7", status); 1099c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expect2(new DecimalFormat("##E0", US, status), 1100c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com (int32_t) 45678000, "45.678E6", status); 1101ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org expect2(new DecimalFormat("####E0", US, status), 1102ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org (int32_t) 45678000, "4567.8E4", status); 11037979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org expect(new DecimalFormat("0E0", US, status), 1104c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com (int32_t) 45678000, "5E7", status); 11057979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org expect(new DecimalFormat("00E0", US, status), 110664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org (int32_t) 45678000, "46E6", status); 11077979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.org expect(new DecimalFormat("000E0", US, status), 1108a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org (int32_t) 45678000, "457E5", status); 1109ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org /* 1110c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org expect(new DecimalFormat("###E0", US, status), 1111ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org new Object[] { new Double(0.0000123), "12.3E-6", 1112ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org new Double(0.000123), "123E-6", 11135f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org new Double(0.00123), "1.23E-3", 1114c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org new Double(0.0123), "12.3E-3", 1115c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org new Double(0.123), "123E-3", 1116c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org new Double(1.23), "1.23E0", 11171f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.org new Double(12.3), "12.3E0", 1118c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com new Double(123), "123E0", 1119c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com new Double(1230), "1.23E3", 1120c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com }); 11215f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org ! 1122c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ! Unroll this test into individual tests below... 1123c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ! 1124c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com */ 1125d91075f76b836c2cfa4f4e4cc0fb31170df864ccerik.corry@gmail.com expect2(new DecimalFormat("###E0", US, status), 1126c20610af4f0ca150977ca140a1174f98ee46f5aafschneider@chromium.org 0.0000123, "12.3E-6", status); 11271af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org expect2(new DecimalFormat("###E0", US, status), 1128c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 0.000123, "123E-6", status); 11291af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org expect2(new DecimalFormat("###E0", US, status), 11301af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 0.00123, "1.23E-3", status); 11311af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org expect2(new DecimalFormat("###E0", US, status), 11321af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 0.0123, "12.3E-3", status); 11331af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org expect2(new DecimalFormat("###E0", US, status), 11341af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org 0.123, "123E-3", status); 11351af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org expect2(new DecimalFormat("###E0", US, status), 113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1.23, "1.23E0", status); 113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("###E0", US, status), 113843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12.3, "12.3E0", status); 113943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("###E0", US, status), 11404f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 123.0, "123E0", status); 11414f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org expect2(new DecimalFormat("###E0", US, status), 11424f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org 1230.0, "1.23E3", status); 114343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /* 114443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(new DecimalFormat("0.#E+00", US, status), 114543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen new Object[] { new Double(0.00012), "1.2E-04", 114643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen new Long(12000), "1.2E+04", 11472356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org }); 11482356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org ! 11492356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org ! Unroll this test into individual tests below... 115043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ! 115149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org */ 115249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org expect2(new DecimalFormat("0.#E+00", US, status), 115349edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org 0.00012, "1.2E-04", status); 115443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("0.#E+00", US, status), 1155a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org (int32_t) 12000, "1.2E+04", status); 1156a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 1157a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 1158a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org/** 1159236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org * Upgrade to alphaWorks 116043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 116143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestPad(void) { 116243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 116343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols US(Locale::getUS(), status); 116443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormatSymbols constructor"); 116543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 116643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat("*^##.##", US, status), 116743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(0), "^^^^0", status); 116864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org expect2(new DecimalFormat("*^##.##", US, status), 11692356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org -1.3, "^-1.3", status); 1170f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1171f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org int32_t(0), "0.0E0______ g-m/s^2", status); 11723a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 11733a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org 1.0/3, "333.333E-3_ g-m/s^2", status); 11743a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 11753a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.org int32_t(0), "0.0______ g-m/s^2", status); 117643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 117743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1.0/3, "0.33333__ g-m/s^2", status); 117843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1179c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // Test padding before a sign 1180c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)"; 1181c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com expect2(new DecimalFormat(formatStr, US, status), 118243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-10), "xxxxxxxxxx(10.0)", status); 118343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 118443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-1000),"xxxxxxx(1,000.0)", status); 118543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 118643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-1000000),"xxx(1,000,000.0)", status); 118743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 1188f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org -100.37, "xxxxxxxx(100.37)", status); 118943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 1190ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org -10456.37, "xxxxx(10,456.37)", status); 1191ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org expect2(new DecimalFormat(formatStr, US, status), 1192c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com -1120456.37, "xx(1,120,456.37)", status); 1193a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org expect2(new DecimalFormat(formatStr, US, status), 119443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen -112045600.37, "(112,045,600.37)", status); 119543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 119643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen -1252045600.37,"(1,252,045,600.37)", status); 119743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 119843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 119943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(10), "xxxxxxxxxxxx10.0", status); 120043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 120143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(1000),"xxxxxxxxx1,000.0", status); 120243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 120343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(1000000),"xxxxx1,000,000.0", status); 120443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 12058e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 100.37, "xxxxxxxxxx100.37", status); 12068e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org expect2(new DecimalFormat(formatStr, US, status), 1207471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org 10456.37, "xxxxxxx10,456.37", status); 120843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 1209a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 1120456.37, "xxxx1,120,456.37", status); 121043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr, US, status), 121137abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 112045600.37, "xx112,045,600.37", status); 121237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com expect2(new DecimalFormat(formatStr, US, status), 121337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 10252045600.37,"10,252,045,600.37", status); 121443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 121543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 121643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Test padding between a sign and a number 121743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)"; 121843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 121943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-10), "(10.0xxxxxxxxxx)", status); 122043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 122143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-1000),"(1,000.0xxxxxxx)", status); 122243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 122343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(-1000000),"(1,000,000.0xxx)", status); 122443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 122543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen -100.37, "(100.37xxxxxxxx)", status); 122643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 122743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen -10456.37, "(10,456.37xxxxx)", status); 122843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 122943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen -1120456.37, "(1,120,456.37xx)", status); 123043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 12317276f14ca716596e0a0d17539516370c1f453847kasper.lund -112045600.37, "(112,045,600.37)", status); 12327276f14ca716596e0a0d17539516370c1f453847kasper.lund expect2(new DecimalFormat(formatStr2, US, status), 12337276f14ca716596e0a0d17539516370c1f453847kasper.lund -1252045600.37,"(1,252,045,600.37)", status); 12347276f14ca716596e0a0d17539516370c1f453847kasper.lund 123583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org expect2(new DecimalFormat(formatStr2, US, status), 12367276f14ca716596e0a0d17539516370c1f453847kasper.lund int32_t(10), "10.0xxxxxxxxxxxx", status); 123743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 1238236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org int32_t(1000),"1,000.0xxxxxxxxx", status); 123943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 124043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int32_t(1000000),"1,000,000.0xxxxx", status); 124143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 124237abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 100.37, "100.37xxxxxxxxxx", status); 124337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com expect2(new DecimalFormat(formatStr2, US, status), 124437abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com 10456.37, "10,456.37xxxxxxx", status); 124537abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com expect2(new DecimalFormat(formatStr2, US, status), 1246f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 1120456.37, "1,120,456.37xxxx", status); 1247f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org expect2(new DecimalFormat(formatStr2, US, status), 124843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112045600.37, "112,045,600.37xx", status); 124943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expect2(new DecimalFormat(formatStr2, US, status), 125043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10252045600.37,"10,252,045,600.37", status); 125143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 125243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen //testing the setPadCharacter(UnicodeString) and getPadCharacterString() 125343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormat fmt("#", US, status); 125443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen CHECK(status, "DecimalFormat constructor"); 125543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString padString("P"); 125643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.setPadCharacter(padString); 125743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString); 125843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.setPadCharacter((UnicodeString)"^"); 125943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^"); 126043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen //commented untill implementation is complete 126143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen /* fmt.setPadCharacter((UnicodeString)"^^^"); 126243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^"); 126343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen padString.remove(); 126443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen padString.append((UChar)0x0061); 126543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen padString.append((UChar)0x0302); 126643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen fmt.setPadCharacter(padString); 126743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000}; 126843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UnicodeString pattern(patternChars); 126943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString); 127043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 127143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 127243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 127343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 127443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen/** 127543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Upgrade to alphaWorks 127643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen */ 127743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid NumberFormatTest::TestPatterns2(void) { 127843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UErrorCode status = U_ZERO_ERROR; 127943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen DecimalFormatSymbols US(Locale::getUS(), status); 12805ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org CHECK(status, "DecimalFormatSymbols constructor"); 1281 1282 DecimalFormat fmt("#", US, status); 1283 CHECK(status, "DecimalFormat constructor"); 1284 1285 UChar hat = 0x005E; /*^*/ 1286 1287 expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat); 1288 expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat); 1289 expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat); 1290 expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat); 1291 expectPad(fmt, "$*^$#", ILLEGAL); 1292 expectPad(fmt, "#$*^$", ILLEGAL); 1293 expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix, 1294 12, (UChar)0x0078 /*x*/); 1295 expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix, 1296 3, (UChar)0x0078 /*x*/); 1297 expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix, 1298 10, (UChar)0x0061 /*a*/); 1299 1300 fmt.applyPattern("AA#,##0.00ZZ", status); 1301 CHECK(status, "applyPattern"); 1302 fmt.setPadCharacter(hat); 1303 1304 fmt.setFormatWidth(10); 1305 1306 fmt.setPadPosition(DecimalFormat::kPadBeforePrefix); 1307 expectPat(fmt, "*^AA#,##0.00ZZ"); 1308 1309 fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix); 1310 expectPat(fmt, "AA#,##0.00*^ZZ"); 1311 1312 fmt.setPadPosition(DecimalFormat::kPadAfterSuffix); 1313 expectPat(fmt, "AA#,##0.00ZZ*^"); 1314 1315 // 12 3456789012 1316 UnicodeString exp("AA*^#,##0.00ZZ", ""); 1317 fmt.setFormatWidth(12); 1318 fmt.setPadPosition(DecimalFormat::kPadAfterPrefix); 1319 expectPat(fmt, exp); 1320 1321 fmt.setFormatWidth(13); 1322 // 12 34567890123 1323 expectPat(fmt, "AA*^##,##0.00ZZ"); 1324 1325 fmt.setFormatWidth(14); 1326 // 12 345678901234 1327 expectPat(fmt, "AA*^###,##0.00ZZ"); 1328 1329 fmt.setFormatWidth(15); 1330 // 12 3456789012345 1331 expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case 1332 1333 fmt.setFormatWidth(16); 1334 // 12 34567890123456 1335 expectPat(fmt, "AA*^#,###,##0.00ZZ"); 1336} 1337 1338void NumberFormatTest::TestSurrogateSupport(void) { 1339 UErrorCode status = U_ZERO_ERROR; 1340 DecimalFormatSymbols custom(Locale::getUS(), status); 1341 CHECK(status, "DecimalFormatSymbols constructor"); 1342 1343 custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal"); 1344 custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus"); 1345 custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus "); 1346 custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent"); 1347 1348 UnicodeString patternStr("*\\U00010000##.##", ""); 1349 patternStr = patternStr.unescape(); 1350 UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", ""); 1351 expStr = expStr.unescape(); 1352 expect2(new DecimalFormat(patternStr, custom, status), 1353 int32_t(0), expStr, status); 1354 1355 status = U_ZERO_ERROR; 1356 expect2(new DecimalFormat("*^##.##", custom, status), 1357 int32_t(0), "^^^^0", status); 1358 status = U_ZERO_ERROR; 1359 expect2(new DecimalFormat("##.##", custom, status), 1360 -1.3, " minus 1decimal3", status); 1361 status = U_ZERO_ERROR; 1362 expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1363 int32_t(0), "0decimal0exponent0 g-m/s^2", status); 1364 status = U_ZERO_ERROR; 1365 expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 1366 1.0/3, "333decimal333exponent minus 3 g-m/s^2", status); 1367 status = U_ZERO_ERROR; 1368 expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1369 int32_t(0), "0decimal0 g-m/s^2", status); 1370 status = U_ZERO_ERROR; 1371 expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 1372 1.0/3, "0decimal33333 g-m/s^2", status); 1373 1374 UnicodeString zero((UChar32)0x10000); 1375 custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); 1376 expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", ""); 1377 expStr = expStr.unescape(); 1378 status = U_ZERO_ERROR; 1379 expect2(new DecimalFormat("##0.000", custom, status), 1380 1.25, expStr, status); 1381 1382 custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30); 1383 custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money"); 1384 custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator"); 1385 patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'"); 1386 patternStr = patternStr.unescape(); 1387 expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", ""); 1388 status = U_ZERO_ERROR; 1389 expect2(new DecimalFormat(patternStr, custom, status), 1390 int32_t(-20), expStr, status); 1391 1392 custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent"); 1393 patternStr = "'You''ve lost ' -0.00 %' of your money today'"; 1394 patternStr = patternStr.unescape(); 1395 expStr = UnicodeString(" minus You've lost minus 2000decimal00 percent of your money today", ""); 1396 status = U_ZERO_ERROR; 1397 expect2(new DecimalFormat(patternStr, custom, status), 1398 int32_t(-20), expStr, status); 1399} 1400 1401void NumberFormatTest::TestCurrencyPatterns(void) { 1402 int32_t i, locCount; 1403 const Locale* locs = NumberFormat::getAvailableLocales(locCount); 1404 for (i=0; i<locCount; ++i) { 1405 UErrorCode ec = U_ZERO_ERROR; 1406 NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec); 1407 if (U_FAILURE(ec)) { 1408 errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec)); 1409 } else { 1410 // Make sure currency formats do not have a variable number 1411 // of fraction digits 1412 int32_t min = nf->getMinimumFractionDigits(); 1413 int32_t max = nf->getMaximumFractionDigits(); 1414 if (min != max) { 1415 UnicodeString a, b; 1416 nf->format(1.0, a); 1417 nf->format(1.125, b); 1418 errln((UnicodeString)"FAIL: " + locs[i].getName() + 1419 " min fraction digits != max fraction digits; " 1420 "x 1.0 => " + escape(a) + 1421 "; x 1.125 => " + escape(b)); 1422 } 1423 1424 // Make sure EURO currency formats have exactly 2 fraction digits 1425 if (nf->getDynamicClassID() == DecimalFormat::getStaticClassID()) { 1426 DecimalFormat* df = (DecimalFormat*) nf; 1427 if (u_strcmp(EUR, df->getCurrency()) == 0) { 1428 if (min != 2 || max != 2) { 1429 UnicodeString a; 1430 nf->format(1.0, a); 1431 errln((UnicodeString)"FAIL: " + locs[i].getName() + 1432 " is a EURO format but it does not have 2 fraction digits; " 1433 "x 1.0 => " + 1434 escape(a)); 1435 } 1436 } 1437 } 1438 } 1439 delete nf; 1440 } 1441} 1442 1443void NumberFormatTest::TestRegCurrency(void) { 1444#if !UCONFIG_NO_SERVICE 1445 UErrorCode status = U_ZERO_ERROR; 1446 UChar USD[4]; 1447 ucurr_forLocale("en_US", USD, 4, &status); 1448 UChar YEN[4]; 1449 ucurr_forLocale("ja_JP", YEN, 4, &status); 1450 UChar TMP[4]; 1451 static const UChar QQQ[] = {0x51, 0x51, 0x51, 0}; 1452 if(U_FAILURE(status)) { 1453 errln("Unable to get currency for locale, error %s", u_errorName(status)); 1454 return; 1455 } 1456 1457 UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status); 1458 UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status); 1459 1460 ucurr_forLocale("en_US", TMP, 4, &status); 1461 if (u_strcmp(YEN, TMP) != 0) { 1462 errln("FAIL: didn't return YEN registered for en_US"); 1463 } 1464 1465 ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1466 if (u_strcmp(QQQ, TMP) != 0) { 1467 errln("FAIL: didn't return QQQ for en_US_EURO"); 1468 } 1469 1470 int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status); 1471 if (fallbackLen) { 1472 errln("FAIL: tried to fallback en_XX_BAR"); 1473 } 1474 status = U_ZERO_ERROR; // reset 1475 1476 if (!ucurr_unregister(enkey, &status)) { 1477 errln("FAIL: couldn't unregister enkey"); 1478 } 1479 1480 ucurr_forLocale("en_US", TMP, 4, &status); 1481 if (u_strcmp(USD, TMP) != 0) { 1482 errln("FAIL: didn't return USD for en_US after unregister of en_US"); 1483 } 1484 status = U_ZERO_ERROR; // reset 1485 1486 ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1487 if (u_strcmp(QQQ, TMP) != 0) { 1488 errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US"); 1489 } 1490 1491 ucurr_forLocale("en_US_BLAH", TMP, 4, &status); 1492 if (u_strcmp(USD, TMP) != 0) { 1493 errln("FAIL: could not find USD for en_US_BLAH after unregister of en"); 1494 } 1495 status = U_ZERO_ERROR; // reset 1496 1497 if (!ucurr_unregister(enUSEUROkey, &status)) { 1498 errln("FAIL: couldn't unregister enUSEUROkey"); 1499 } 1500 1501 ucurr_forLocale("en_US_EURO", TMP, 4, &status); 1502 if (u_strcmp(EUR, TMP) != 0) { 1503 errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO"); 1504 } 1505 status = U_ZERO_ERROR; // reset 1506#endif 1507} 1508 1509void NumberFormatTest::TestCurrencyNames(void) { 1510 // Do a basic check of getName() 1511 // USD { "US$", "US Dollar" } // 04/04/1792- 1512 UErrorCode ec = U_ZERO_ERROR; 1513 static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/ 1514 static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/ 1515 static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/ 1516 static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/ 1517 UBool isChoiceFormat; 1518 int32_t len; 1519 // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 1520 // THE LOCALE DATA before diving into the code. 1521 assertEquals("USD.getName(SYMBOL_NAME)", 1522 UnicodeString("$"), 1523 UnicodeString(ucurr_getName(USD, "en", 1524 UCURR_SYMBOL_NAME, 1525 &isChoiceFormat, &len, &ec))); 1526 assertEquals("USD.getName(LONG_NAME)", 1527 UnicodeString("US Dollar"), 1528 UnicodeString(ucurr_getName(USD, "en", 1529 UCURR_LONG_NAME, 1530 &isChoiceFormat, &len, &ec))); 1531 assertEquals("CAD.getName(SYMBOL_NAME)", 1532 UnicodeString("CA$"), 1533 UnicodeString(ucurr_getName(CAD, "en", 1534 UCURR_SYMBOL_NAME, 1535 &isChoiceFormat, &len, &ec))); 1536 assertEquals("CAD.getName(SYMBOL_NAME)", 1537 UnicodeString("$"), 1538 UnicodeString(ucurr_getName(CAD, "en_CA", 1539 UCURR_SYMBOL_NAME, 1540 &isChoiceFormat, &len, &ec))); 1541 assertEquals("USD.getName(SYMBOL_NAME)", 1542 UnicodeString("US$"), 1543 UnicodeString(ucurr_getName(USD, "en_AU", 1544 UCURR_SYMBOL_NAME, 1545 &isChoiceFormat, &len, &ec))); 1546 assertEquals("CAD.getName(SYMBOL_NAME)", 1547 UnicodeString("CA$"), 1548 UnicodeString(ucurr_getName(CAD, "en_AU", 1549 UCURR_SYMBOL_NAME, 1550 &isChoiceFormat, &len, &ec))); 1551 assertEquals("USX.getName(LONG_NAME)", 1552 UnicodeString("USX"), 1553 UnicodeString(ucurr_getName(USX, "en_US", 1554 UCURR_LONG_NAME, 1555 &isChoiceFormat, &len, &ec))); 1556 assertSuccess("ucurr_getName", ec); 1557 1558 ec = U_ZERO_ERROR; 1559 1560 // Test that a default or fallback warning is being returned. JB 4239. 1561 ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat, 1562 &len, &ec); 1563 assertTrue("ucurr_getName (fallback)", 1564 U_USING_FALLBACK_WARNING == ec, TRUE); 1565 1566 ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat, 1567 &len, &ec); 1568 assertTrue("ucurr_getName (fallback)", 1569 U_USING_FALLBACK_WARNING == ec, TRUE); 1570 1571 ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat, 1572 &len, &ec); 1573 assertTrue("ucurr_getName (default)", 1574 U_USING_DEFAULT_WARNING == ec, TRUE); 1575 1576 ucurr_getName(CAD, "vi", UCURR_LONG_NAME, &isChoiceFormat, 1577 &len, &ec); 1578 assertTrue("ucurr_getName (default)", 1579 U_USING_DEFAULT_WARNING == ec, TRUE); 1580 1581 // Test that a default warning is being returned when falling back to root. JB 4536. 1582 ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat, 1583 &len, &ec); 1584 assertTrue("ucurr_getName (default to root)", 1585 U_USING_DEFAULT_WARNING == ec, TRUE); 1586 1587 // TODO add more tests later 1588} 1589 1590void NumberFormatTest::TestCurrencyUnit(void){ 1591 UErrorCode ec = U_ZERO_ERROR; 1592 static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1593 CurrencyUnit cu(USD, ec); 1594 assertSuccess("CurrencyUnit", ec); 1595 1596 const UChar * r = cu.getISOCurrency(); // who is the buffer owner ? 1597 assertEquals("getISOCurrency()", USD, r); 1598 1599 CurrencyUnit cu2(cu); 1600 if (!(cu2 == cu)){ 1601 errln("CurrencyUnit copy constructed object should be same"); 1602 } 1603 1604 CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone(); 1605 if (!(*cu3 == cu)){ 1606 errln("CurrencyUnit cloned object should be same"); 1607 } 1608 delete cu3; 1609} 1610 1611void NumberFormatTest::TestCurrencyAmount(void){ 1612 UErrorCode ec = U_ZERO_ERROR; 1613 static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 1614 CurrencyAmount ca(9, USD, ec); 1615 assertSuccess("CurrencyAmount", ec); 1616 1617 CurrencyAmount ca2(ca); 1618 if (!(ca2 == ca)){ 1619 errln("CurrencyAmount copy constructed object should be same"); 1620 } 1621 1622 ca2=ca; 1623 if (!(ca2 == ca)){ 1624 errln("CurrencyAmount assigned object should be same"); 1625 } 1626 1627 CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone(); 1628 if (!(*ca3 == ca)){ 1629 errln("CurrencyAmount cloned object should be same"); 1630 } 1631 delete ca3; 1632} 1633 1634void NumberFormatTest::TestSymbolsWithBadLocale(void) { 1635 Locale locDefault; 1636 Locale locBad("x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME"); 1637 UErrorCode status = U_ZERO_ERROR; 1638 UnicodeString intlCurrencySymbol((UChar)0xa4); 1639 1640 intlCurrencySymbol.append((UChar)0xa4); 1641 1642 logln("Current locale is %s", Locale::getDefault().getName()); 1643 Locale::setDefault(locBad, status); 1644 logln("Current locale is %s", Locale::getDefault().getName()); 1645 DecimalFormatSymbols mySymbols(status); 1646 if (status != U_USING_FALLBACK_WARNING) { 1647 errln("DecimalFormatSymbols should returned U_USING_FALLBACK_WARNING."); 1648 } 1649 if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { 1650 errln("DecimalFormatSymbols does not have the right locale."); 1651 } 1652 int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; 1653 for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { 1654 logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") 1655 + prettify(mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum))); 1656 1657 if (mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum).length() == 0 1658 && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol 1659 && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) 1660 { 1661 errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); 1662 } 1663 } 1664 status = U_ZERO_ERROR; 1665 Locale::setDefault(locDefault, status); 1666 logln("Current locale is %s", Locale::getDefault().getName()); 1667} 1668 1669/** 1670 * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols 1671 * behave the same, except for memory ownership semantics. (No 1672 * version of this test on Java, since Java has only one method.) 1673 */ 1674void NumberFormatTest::TestAdoptDecimalFormatSymbols(void) { 1675 UErrorCode ec = U_ZERO_ERROR; 1676 DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec); 1677 if (U_FAILURE(ec)) { 1678 errln("Fail: DecimalFormatSymbols constructor"); 1679 delete sym; 1680 return; 1681 } 1682 UnicodeString pat(" #,##0.00"); 1683 pat.insert(0, (UChar)0x00A4); 1684 DecimalFormat fmt(pat, sym, ec); 1685 if (U_FAILURE(ec)) { 1686 errln("Fail: DecimalFormat constructor"); 1687 return; 1688 } 1689 1690 UnicodeString str; 1691 fmt.format(2350.75, str); 1692 if (str == "$ 2,350.75") { 1693 logln(str); 1694 } else { 1695 errln("Fail: " + str + ", expected $ 2,350.75"); 1696 } 1697 1698 sym = new DecimalFormatSymbols(Locale::getUS(), ec); 1699 if (U_FAILURE(ec)) { 1700 errln("Fail: DecimalFormatSymbols constructor"); 1701 delete sym; 1702 return; 1703 } 1704 sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 1705 fmt.adoptDecimalFormatSymbols(sym); 1706 1707 str.truncate(0); 1708 fmt.format(2350.75, str); 1709 if (str == "Q 2,350.75") { 1710 logln(str); 1711 } else { 1712 errln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 1713 } 1714 1715 sym = new DecimalFormatSymbols(Locale::getUS(), ec); 1716 if (U_FAILURE(ec)) { 1717 errln("Fail: DecimalFormatSymbols constructor"); 1718 delete sym; 1719 return; 1720 } 1721 DecimalFormat fmt2(pat, sym, ec); 1722 if (U_FAILURE(ec)) { 1723 errln("Fail: DecimalFormat constructor"); 1724 return; 1725 } 1726 1727 DecimalFormatSymbols sym2(Locale::getUS(), ec); 1728 if (U_FAILURE(ec)) { 1729 errln("Fail: DecimalFormatSymbols constructor"); 1730 return; 1731 } 1732 sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 1733 fmt2.setDecimalFormatSymbols(sym2); 1734 1735 str.truncate(0); 1736 fmt2.format(2350.75, str); 1737 if (str == "Q 2,350.75") { 1738 logln(str); 1739 } else { 1740 errln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 1741 } 1742} 1743 1744void NumberFormatTest::TestPerMill() { 1745 UErrorCode ec = U_ZERO_ERROR; 1746 UnicodeString str; 1747 DecimalFormat fmt(ctou("###.###\\u2030"), ec); 1748 if (!assertSuccess("DecimalFormat ct", ec)) return; 1749 assertEquals("0.4857 x ###.###\\u2030", 1750 ctou("485.7\\u2030"), fmt.format(0.4857, str)); 1751 1752 DecimalFormatSymbols sym(Locale::getUS(), ec); 1753 sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m")); 1754 DecimalFormat fmt2("", sym, ec); 1755 fmt2.applyLocalizedPattern("###.###m", ec); 1756 if (!assertSuccess("setup", ec)) return; 1757 str.truncate(0); 1758 assertEquals("0.4857 x ###.###m", 1759 "485.7m", fmt2.format(0.4857, str)); 1760} 1761 1762/** 1763 * Generic test for patterns that should be legal/illegal. 1764 */ 1765void NumberFormatTest::TestIllegalPatterns() { 1766 // Test cases: 1767 // Prefix with "-:" for illegal patterns 1768 // Prefix with "+:" for legal patterns 1769 const char* DATA[] = { 1770 // Unquoted special characters in the suffix are illegal 1771 "-:000.000|###", 1772 "+:000.000'|###'", 1773 0 1774 }; 1775 for (int32_t i=0; DATA[i]; ++i) { 1776 const char* pat=DATA[i]; 1777 UBool valid = (*pat) == '+'; 1778 pat += 2; 1779 UErrorCode ec = U_ZERO_ERROR; 1780 DecimalFormat fmt(pat, ec); // locale doesn't matter here 1781 if (U_SUCCESS(ec) == valid) { 1782 logln("Ok: pattern \"%s\": %s", 1783 pat, u_errorName(ec)); 1784 } else { 1785 errln("FAIL: pattern \"%s\" should have %s; got %s", 1786 pat, (valid?"succeeded":"failed"), 1787 u_errorName(ec)); 1788 } 1789 } 1790} 1791 1792//---------------------------------------------------------------------- 1793 1794static const char* KEYWORDS[] = { 1795 /*0*/ "ref=", // <reference pattern to parse numbers> 1796 /*1*/ "loc=", // <locale for formats> 1797 /*2*/ "f:", // <pattern or '-'> <number> <exp. string> 1798 /*3*/ "fp:", // <pattern or '-'> <number> <exp. string> <exp. number> 1799 /*4*/ "rt:", // <pattern or '-'> <(exp.) number> <(exp.) string> 1800 /*5*/ "p:", // <pattern or '-'> <string> <exp. number> 1801 /*6*/ "perr:", // <pattern or '-'> <invalid string> 1802 /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'> 1803 /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt> 1804 0 1805}; 1806 1807/** 1808 * Return an integer representing the next token from this 1809 * iterator. The integer will be an index into the given list, or 1810 * -1 if there are no more tokens, or -2 if the token is not on 1811 * the list. 1812 */ 1813static int32_t keywordIndex(const UnicodeString& tok) { 1814 for (int32_t i=0; KEYWORDS[i]!=0; ++i) { 1815 if (tok==KEYWORDS[i]) { 1816 return i; 1817 } 1818 } 1819 return -1; 1820} 1821 1822/** 1823 * Parse a CurrencyAmount using the given NumberFormat, with 1824 * the 'delim' character separating the number and the currency. 1825 */ 1826static void parseCurrencyAmount(const UnicodeString& str, 1827 const NumberFormat& fmt, 1828 UChar delim, 1829 Formattable& result, 1830 UErrorCode& ec) { 1831 UnicodeString num, cur; 1832 int32_t i = str.indexOf(delim); 1833 str.extractBetween(0, i, num); 1834 str.extractBetween(i+1, INT32_MAX, cur); 1835 Formattable n; 1836 fmt.parse(num, n, ec); 1837 result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec)); 1838} 1839 1840void NumberFormatTest::TestCases() { 1841 UErrorCode ec = U_ZERO_ERROR; 1842 TextFile reader("NumberFormatTestCases.txt", "UTF8", ec); 1843 if (U_FAILURE(ec)) { 1844 dataerrln("[DATA] Couldn't open NumberFormatTestCases.txt"); 1845 return; 1846 } 1847 TokenIterator tokens(&reader); 1848 1849 Locale loc("en", "US", ""); 1850 DecimalFormat *ref = 0, *fmt = 0; 1851 MeasureFormat *mfmt = 0; 1852 UnicodeString pat, tok, mloc, str, out, where, currAmt; 1853 Formattable n; 1854 1855 for (;;) { 1856 ec = U_ZERO_ERROR; 1857 if (!tokens.next(tok, ec)) { 1858 break; 1859 } 1860 where = UnicodeString("(") + tokens.getLineNumber() + ") "; 1861 int32_t cmd = keywordIndex(tok); 1862 switch (cmd) { 1863 case 0: 1864 // ref= <reference pattern> 1865 if (!tokens.next(tok, ec)) goto error; 1866 delete ref; 1867 ref = new DecimalFormat(tok, 1868 new DecimalFormatSymbols(Locale::getUS(), ec), ec); 1869 if (U_FAILURE(ec)) { 1870 dataerrln("Error constructing DecimalFormat"); 1871 goto error; 1872 } 1873 break; 1874 case 1: 1875 // loc= <locale> 1876 if (!tokens.next(tok, ec)) goto error; 1877 loc = Locale::createFromName(CharString(tok)); 1878 break; 1879 case 2: // f: 1880 case 3: // fp: 1881 case 4: // rt: 1882 case 5: // p: 1883 if (!tokens.next(tok, ec)) goto error; 1884 if (tok != "-") { 1885 pat = tok; 1886 delete fmt; 1887 fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec); 1888 if (U_FAILURE(ec)) { 1889 errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec)); 1890 ec = U_ZERO_ERROR; 1891 if (!tokens.next(tok, ec)) goto error; 1892 if (!tokens.next(tok, ec)) goto error; 1893 if (cmd == 3) { 1894 if (!tokens.next(tok, ec)) goto error; 1895 } 1896 continue; 1897 } 1898 } 1899 if (cmd == 2 || cmd == 3 || cmd == 4) { 1900 // f: <pattern or '-'> <number> <exp. string> 1901 // fp: <pattern or '-'> <number> <exp. string> <exp. number> 1902 // rt: <pattern or '-'> <number> <string> 1903 UnicodeString num; 1904 if (!tokens.next(num, ec)) goto error; 1905 if (!tokens.next(str, ec)) goto error; 1906 ref->parse(num, n, ec); 1907 assertSuccess("parse", ec); 1908 assertEquals(where + "\"" + pat + "\".format(" + num + ")", 1909 str, fmt->format(n, out.remove(), ec)); 1910 assertSuccess("format", ec); 1911 if (cmd == 3) { // fp: 1912 if (!tokens.next(num, ec)) goto error; 1913 ref->parse(num, n, ec); 1914 assertSuccess("parse", ec); 1915 } 1916 if (cmd != 2) { // != f: 1917 Formattable m; 1918 fmt->parse(str, m, ec); 1919 assertSuccess("parse", ec); 1920 assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 1921 n, m); 1922 } 1923 } 1924 // p: <pattern or '-'> <string to parse> <exp. number> 1925 else { 1926 UnicodeString expstr; 1927 if (!tokens.next(str, ec)) goto error; 1928 if (!tokens.next(expstr, ec)) goto error; 1929 Formattable exp, n; 1930 ref->parse(expstr, exp, ec); 1931 assertSuccess("parse", ec); 1932 fmt->parse(str, n, ec); 1933 assertSuccess("parse", ec); 1934 assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 1935 exp, n); 1936 } 1937 break; 1938 case 8: // fpc: 1939 if (!tokens.next(tok, ec)) goto error; 1940 if (tok != "-") { 1941 mloc = tok; 1942 delete mfmt; 1943 mfmt = MeasureFormat::createCurrencyFormat( 1944 Locale::createFromName(CharString(mloc)), ec); 1945 if (U_FAILURE(ec)) { 1946 errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec)); 1947 ec = U_ZERO_ERROR; 1948 if (!tokens.next(tok, ec)) goto error; 1949 if (!tokens.next(tok, ec)) goto error; 1950 if (!tokens.next(tok, ec)) goto error; 1951 continue; 1952 } 1953 } 1954 // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt> 1955 if (!tokens.next(currAmt, ec)) goto error; 1956 if (!tokens.next(str, ec)) goto error; 1957 parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 1958 if (assertSuccess("parseCurrencyAmount", ec)) { 1959 assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")", 1960 str, mfmt->format(n, out.remove(), ec)); 1961 assertSuccess("format", ec); 1962 } 1963 if (!tokens.next(currAmt, ec)) goto error; 1964 parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 1965 if (assertSuccess("parseCurrencyAmount", ec)) { 1966 Formattable m; 1967 1968 mfmt->parseObject(str, m, ec); 1969 if (assertSuccess("parseCurrency", ec)) { 1970 assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")", 1971 n, m); 1972 } else { 1973 errln("FAIL: source " + str); 1974 } 1975 } 1976 break; 1977 case 6: 1978 // perr: <pattern or '-'> <invalid string> 1979 errln("FAIL: Under construction"); 1980 goto done; 1981 case 7: { 1982 // pat: <pattern> <exp. toPattern, or '-' or 'err'> 1983 UnicodeString testpat; 1984 UnicodeString exppat; 1985 if (!tokens.next(testpat, ec)) goto error; 1986 if (!tokens.next(exppat, ec)) goto error; 1987 UBool err = exppat == "err"; 1988 UBool existingPat = FALSE; 1989 if (testpat == "-") { 1990 if (err) { 1991 errln("FAIL: " + where + "Invalid command \"pat: - err\""); 1992 continue; 1993 } 1994 existingPat = TRUE; 1995 testpat = pat; 1996 } 1997 if (exppat == "-") exppat = testpat; 1998 DecimalFormat* f = 0; 1999 UErrorCode ec2 = U_ZERO_ERROR; 2000 if (existingPat) { 2001 f = fmt; 2002 } else { 2003 f = new DecimalFormat(testpat, ec2); 2004 } 2005 if (U_SUCCESS(ec2)) { 2006 if (err) { 2007 errln("FAIL: " + where + "Invalid pattern \"" + testpat + 2008 "\" was accepted"); 2009 } else { 2010 UnicodeString pat2; 2011 assertEquals(where + "\"" + testpat + "\".toPattern()", 2012 exppat, f->toPattern(pat2)); 2013 } 2014 } else { 2015 if (err) { 2016 logln("Ok: " + where + "Invalid pattern \"" + testpat + 2017 "\" failed: " + u_errorName(ec2)); 2018 } else { 2019 errln("FAIL: " + where + "Valid pattern \"" + testpat + 2020 "\" failed: " + u_errorName(ec2)); 2021 } 2022 } 2023 if (!existingPat) delete f; 2024 } break; 2025 case -1: 2026 errln("FAIL: " + where + "Unknown command \"" + tok + "\""); 2027 goto done; 2028 } 2029 } 2030 goto done; 2031 2032 error: 2033 if (U_SUCCESS(ec)) { 2034 errln("FAIL: Unexpected EOF"); 2035 } else { 2036 errln("FAIL: " + where + "Unexpected " + u_errorName(ec)); 2037 } 2038 2039 done: 2040 delete mfmt; 2041 delete fmt; 2042 delete ref; 2043} 2044 2045 2046//---------------------------------------------------------------------- 2047// Support methods 2048//---------------------------------------------------------------------- 2049 2050UBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) { 2051 if (a.getType() == b.getType()) { 2052 return a == b; 2053 } 2054 2055 if (a.getType() == Formattable::kLong) { 2056 if (b.getType() == Formattable::kInt64) { 2057 return a.getLong() == b.getLong(); 2058 } else if (b.getType() == Formattable::kDouble) { 2059 return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long 2060 } 2061 } else if (a.getType() == Formattable::kDouble) { 2062 if (b.getType() == Formattable::kLong) { 2063 return a.getDouble() == (double) b.getLong(); 2064 } else if (b.getType() == Formattable::kInt64) { 2065 return a.getDouble() == (double)b.getInt64(); 2066 } 2067 } else if (a.getType() == Formattable::kInt64) { 2068 if (b.getType() == Formattable::kLong) { 2069 return a.getInt64() == (int64_t)b.getLong(); 2070 } else if (b.getType() == Formattable::kDouble) { 2071 return a.getInt64() == (int64_t)b.getDouble(); 2072 } 2073 } 2074 return FALSE; 2075} 2076 2077void NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2078 // Don't round-trip format test, since we explicitly do it 2079 expect_rbnf(fmt, n, str, FALSE); 2080 expect_rbnf(fmt, str, n); 2081} 2082 2083void NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2084 // Don't round-trip format test, since we explicitly do it 2085 expect(fmt, n, str, FALSE); 2086 expect(fmt, str, n); 2087} 2088 2089void NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n, 2090 const UnicodeString& exp, 2091 UErrorCode status) { 2092 if (U_FAILURE(status)) { 2093 errln("FAIL: NumberFormat constructor"); 2094 } else { 2095 expect2(*fmt, n, exp); 2096 } 2097 delete fmt; 2098} 2099 2100void NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2101 UErrorCode status = U_ZERO_ERROR; 2102 Formattable num; 2103 fmt.parse(str, num, status); 2104 if (U_FAILURE(status)) { 2105 errln(UnicodeString("FAIL: Parse failed for \"") + str + "\""); 2106 return; 2107 } 2108 UnicodeString pat; 2109 ((DecimalFormat*) &fmt)->toPattern(pat); 2110 if (equalValue(num, n)) { 2111 logln(UnicodeString("Ok \"") + str + "\" x " + 2112 pat + " = " + 2113 toString(num)); 2114 } else { 2115 errln(UnicodeString("FAIL \"") + str + "\" x " + 2116 pat + " = " + 2117 toString(num) + ", expected " + toString(n)); 2118 } 2119} 2120 2121void NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2122 UErrorCode status = U_ZERO_ERROR; 2123 Formattable num; 2124 fmt.parse(str, num, status); 2125 if (U_FAILURE(status)) { 2126 errln(UnicodeString("FAIL: Parse failed for \"") + str + "\""); 2127 return; 2128 } 2129 if (equalValue(num, n)) { 2130 logln(UnicodeString("Ok \"") + str + " = " + 2131 toString(num)); 2132 } else { 2133 errln(UnicodeString("FAIL \"") + str + " = " + 2134 toString(num) + ", expected " + toString(n)); 2135 } 2136} 2137 2138void NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n, 2139 const UnicodeString& exp, UBool rt) { 2140 UnicodeString saw; 2141 FieldPosition pos; 2142 UErrorCode status = U_ZERO_ERROR; 2143 fmt.format(n, saw, pos, status); 2144 CHECK(status, "NumberFormat::format"); 2145 if (saw == exp) { 2146 logln(UnicodeString("Ok ") + toString(n) + 2147 " = \"" + 2148 escape(saw) + "\""); 2149 // We should be able to round-trip the formatted string => 2150 // number => string (but not the other way around: number 2151 // => string => number2, might have number2 != number): 2152 if (rt) { 2153 Formattable n2; 2154 fmt.parse(exp, n2, status); 2155 if (U_FAILURE(status)) { 2156 errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\""); 2157 return; 2158 } 2159 UnicodeString saw2; 2160 fmt.format(n2, saw2, pos, status); 2161 CHECK(status, "NumberFormat::format"); 2162 if (saw2 != exp) { 2163 errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2164 " => \"" + saw2 + "\""); 2165 } 2166 } 2167 } else { 2168 errln(UnicodeString("FAIL ") + toString(n) + 2169 " = \"" + 2170 escape(saw) + "\", expected \"" + exp + "\""); 2171 } 2172} 2173 2174void NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n, 2175 const UnicodeString& exp, UBool rt) { 2176 UnicodeString saw; 2177 FieldPosition pos; 2178 UErrorCode status = U_ZERO_ERROR; 2179 fmt.format(n, saw, pos, status); 2180 CHECK(status, "NumberFormat::format"); 2181 UnicodeString pat; 2182 ((DecimalFormat*) &fmt)->toPattern(pat); 2183 if (saw == exp) { 2184 logln(UnicodeString("Ok ") + toString(n) + " x " + 2185 escape(pat) + " = \"" + 2186 escape(saw) + "\""); 2187 // We should be able to round-trip the formatted string => 2188 // number => string (but not the other way around: number 2189 // => string => number2, might have number2 != number): 2190 if (rt) { 2191 Formattable n2; 2192 fmt.parse(exp, n2, status); 2193 if (U_FAILURE(status)) { 2194 errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\""); 2195 return; 2196 } 2197 UnicodeString saw2; 2198 fmt.format(n2, saw2, pos, status); 2199 CHECK(status, "NumberFormat::format"); 2200 if (saw2 != exp) { 2201 errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2202 " => \"" + saw2 + "\""); 2203 } 2204 } 2205 } else { 2206 errln(UnicodeString("FAIL ") + toString(n) + " x " + 2207 escape(pat) + " = \"" + 2208 escape(saw) + "\", expected \"" + exp + "\""); 2209 } 2210} 2211 2212void NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n, 2213 const UnicodeString& exp, 2214 UErrorCode status) { 2215 if (U_FAILURE(status)) { 2216 errln("FAIL: NumberFormat constructor"); 2217 } else { 2218 expect(*fmt, n, exp); 2219 } 2220 delete fmt; 2221} 2222 2223void NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale, 2224 double value, const UnicodeString& string) { 2225 UErrorCode ec = U_ZERO_ERROR; 2226 DecimalFormat& fmt = * (DecimalFormat*) &nf; 2227 const UChar DEFAULT_CURR[] = {45/*-*/,0}; 2228 UChar curr[4]; 2229 u_strcpy(curr, DEFAULT_CURR); 2230 if (*locale.getLanguage() != 0) { 2231 ucurr_forLocale(locale.getName(), curr, 4, &ec); 2232 assertSuccess("ucurr_forLocale", ec); 2233 fmt.setCurrency(curr, ec); 2234 assertSuccess("DecimalFormat::setCurrency", ec); 2235 fmt.setCurrency(curr); //Deprecated variant, for coverage only 2236 } 2237 UnicodeString s; 2238 fmt.format(value, s); 2239 s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020); 2240 2241 // Default display of the number yields "1234.5599999999999" 2242 // instead of "1234.56". Use a formatter to fix this. 2243 NumberFormat* f = 2244 NumberFormat::createInstance(Locale::getUS(), ec); 2245 UnicodeString v; 2246 if (U_FAILURE(ec)) { 2247 // Oops; bad formatter. Use default op+= display. 2248 v = (UnicodeString)"" + value; 2249 } else { 2250 f->setMaximumFractionDigits(4); 2251 f->setGroupingUsed(FALSE); 2252 f->format(value, v); 2253 } 2254 delete f; 2255 2256 if (s == string) { 2257 logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s)); 2258 } else { 2259 errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) + 2260 ", expected " + prettify(string)); 2261 } 2262} 2263 2264void NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) { 2265 UnicodeString pat; 2266 fmt.toPattern(pat); 2267 if (pat == exp) { 2268 logln(UnicodeString("Ok \"") + pat + "\""); 2269 } else { 2270 errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\""); 2271 } 2272} 2273 2274void NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2275 int32_t pos) { 2276 expectPad(fmt, pat, pos, 0, (UnicodeString)""); 2277} 2278void NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2279 int32_t pos, int32_t width, UChar pad) { 2280 expectPad(fmt, pat, pos, width, UnicodeString(pad)); 2281} 2282void NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 2283 int32_t pos, int32_t width, const UnicodeString& pad) { 2284 int32_t apos = 0, awidth = 0; 2285 UnicodeString apadStr; 2286 UErrorCode status = U_ZERO_ERROR; 2287 fmt.applyPattern(pat, status); 2288 if (U_SUCCESS(status)) { 2289 apos = fmt.getPadPosition(); 2290 awidth = fmt.getFormatWidth(); 2291 apadStr=fmt.getPadCharacterString(); 2292 } else { 2293 apos = -1; 2294 awidth = width; 2295 apadStr = pad; 2296 } 2297 if (apos == pos && awidth == width && apadStr == pad) { 2298 UnicodeString infoStr; 2299 if (pos == ILLEGAL) { 2300 infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr; 2301 } 2302 logln(UnicodeString("Ok \"") + pat + "\" pos=" + apos + infoStr); 2303 } else { 2304 errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos + 2305 " width=" + awidth + " pad=" + apadStr + 2306 ", expected " + pos + " " + width + " " + pad); 2307 } 2308} 2309void NumberFormatTest::TestJB3832(){ 2310 const char* localeID = "pt_PT@currency=PTE"; 2311 Locale loc(localeID); 2312 UErrorCode status = U_ZERO_ERROR; 2313 UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0Esc.")); 2314 UnicodeString s; 2315 NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status); 2316 if(U_FAILURE(status)){ 2317 errln("Could not create currency formatter for locale %s", localeID); 2318 return; 2319 } 2320 currencyFmt->format(1150.50, s); 2321 if(s!=expected){ 2322 errln(UnicodeString("FAIL: Expected: ")+expected 2323 + UnicodeString(" Got: ") + s 2324 + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 2325 } 2326 if (U_FAILURE(status)){ 2327 errln("FAIL: Status %s", u_errorName(status)); 2328 } 2329 delete currencyFmt; 2330} 2331 2332void NumberFormatTest::TestHost() 2333{ 2334#ifdef U_WINDOWS 2335 Win32NumberTest::testLocales(this); 2336#endif 2337 for (NumberFormat::EStyles k = NumberFormat::kNumberStyle; 2338 k < NumberFormat::kStyleCount; k = (NumberFormat::EStyles)(k+1)) { 2339 UErrorCode status = U_ZERO_ERROR; 2340 Locale loc("en_US@compat=host"); 2341 NumberFormat *full = NumberFormat::createInstance(loc, status); 2342 if (full == NULL || U_FAILURE(status)) { 2343 errln("FAIL: Can't create number instance for host"); 2344 return; 2345 } 2346 UnicodeString result1; 2347 Formattable number(10.00); 2348 full->format(number, result1, status); 2349 if (U_FAILURE(status)) { 2350 errln("FAIL: Can't format for host"); 2351 return; 2352 } 2353 Formattable formattable; 2354 full->parse(result1, formattable, status); 2355 if (U_FAILURE(status)) { 2356 errln("FAIL: Can't parse for host"); 2357 return; 2358 } 2359 delete full; 2360 } 2361} 2362 2363void NumberFormatTest::TestHostClone() 2364{ 2365 /* 2366 Verify that a cloned formatter gives the same results 2367 and is useable after the original has been deleted. 2368 */ 2369 // This is mainly important on Windows. 2370 UErrorCode status = U_ZERO_ERROR; 2371 Locale loc("en_US@compat=host"); 2372 UDate now = Calendar::getNow(); 2373 NumberFormat *full = NumberFormat::createInstance(loc, status); 2374 if (full == NULL || U_FAILURE(status)) { 2375 errln("FAIL: Can't create Relative date instance"); 2376 return; 2377 } 2378 UnicodeString result1; 2379 full->format(now, result1, status); 2380 Format *fullClone = full->clone(); 2381 delete full; 2382 full = NULL; 2383 2384 UnicodeString result2; 2385 fullClone->format(now, result2, status); 2386 if (U_FAILURE(status)) { 2387 errln("FAIL: format failure."); 2388 } 2389 if (result1 != result2) { 2390 errln("FAIL: Clone returned different result from non-clone."); 2391 } 2392 delete fullClone; 2393} 2394 2395void NumberFormatTest::TestCurrencyFormat() 2396{ 2397 // This test is here to increase code coverage. 2398 UErrorCode status = U_ZERO_ERROR; 2399 MeasureFormat *cloneObj; 2400 UnicodeString str; 2401 Formattable toFormat, result; 2402 static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0}; 2403 2404 Locale saveDefaultLocale = Locale::getDefault(); 2405 Locale::setDefault( Locale::getUK(), status ); 2406 if (U_FAILURE(status)) { 2407 errln("couldn't set default Locale!"); 2408 return; 2409 } 2410 2411 MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status); 2412 Locale::setDefault( saveDefaultLocale, status ); 2413 if (U_FAILURE(status)){ 2414 errln("FAIL: Status %s", u_errorName(status)); 2415 return; 2416 } 2417 cloneObj = (MeasureFormat *)measureObj->clone(); 2418 if (cloneObj == NULL) { 2419 errln("Clone doesn't work"); 2420 return; 2421 } 2422 toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status)); 2423 measureObj->format(toFormat, str, status); 2424 measureObj->parseObject(str, result, status); 2425 if (U_FAILURE(status)){ 2426 errln("FAIL: Status %s", u_errorName(status)); 2427 } 2428 if (result != toFormat) { 2429 errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2430 } 2431 status = U_ZERO_ERROR; 2432 str.truncate(0); 2433 cloneObj->format(toFormat, str, status); 2434 cloneObj->parseObject(str, result, status); 2435 if (U_FAILURE(status)){ 2436 errln("FAIL: Status %s", u_errorName(status)); 2437 } 2438 if (result != toFormat) { 2439 errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 2440 } 2441 if (*measureObj != *cloneObj) { 2442 errln("Cloned object is not equal to the original object"); 2443 } 2444 delete measureObj; 2445 delete cloneObj; 2446 2447 status = U_USELESS_COLLATOR_ERROR; 2448 if (MeasureFormat::createCurrencyFormat(status) != NULL) { 2449 errln("createCurrencyFormat should have returned NULL."); 2450 } 2451} 2452 2453/* Port of ICU4J rounding test. */ 2454void NumberFormatTest::TestRounding() { 2455 UErrorCode status = U_ZERO_ERROR; 2456 DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 2457 2458 if (U_FAILURE(status)) { 2459 errln("Unable to create decimal formatter."); 2460 return; 2461 } 2462 2463 int roundingIncrements[]={1, 2, 5, 20, 50, 100}; 2464 int testValues[]={0, 300}; 2465 2466 for (int j=0; j<2; j++) { 2467 for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) { 2468 df->setRoundingMode((DecimalFormat::ERoundingMode)mode); 2469 for (int increment=0; increment<6; increment++) { 2470 double base=testValues[j]; 2471 double rInc=roundingIncrements[increment]; 2472 checkRounding(df, base, 20, rInc); 2473 rInc=1.000000000/rInc; 2474 checkRounding(df, base, 20, rInc); 2475 } 2476 } 2477 } 2478 delete df; 2479} 2480 2481void NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) { 2482 df->setRoundingIncrement(increment); 2483 double lastParsed=INT32_MIN; //Intger.MIN_VALUE 2484 for (int i=-iterations; i<=iterations;i++) { 2485 double iValue=base+(increment*(i*0.1)); 2486 double smallIncrement=0.00000001; 2487 if (iValue!=0) { 2488 smallIncrement*=iValue; 2489 } 2490 //we not only test the value, but some values in a small range around it 2491 lastParsed=checkRound(df, iValue-smallIncrement, lastParsed); 2492 lastParsed=checkRound(df, iValue, lastParsed); 2493 lastParsed=checkRound(df, iValue+smallIncrement, lastParsed); 2494 } 2495} 2496 2497double NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) { 2498 UErrorCode status=U_ZERO_ERROR; 2499 UnicodeString formattedDecimal; 2500 double parsed; 2501 Formattable result; 2502 df->format(iValue, formattedDecimal, status); 2503 2504 if (U_FAILURE(status)) { 2505 errln("Error formatting number."); 2506 } 2507 2508 df->parse(formattedDecimal, result, status); 2509 2510 if (U_FAILURE(status)) { 2511 errln("Error parsing number."); 2512 } 2513 2514 parsed=result.getDouble(); 2515 2516 if (lastParsed>parsed) { 2517 errln("Rounding wrong direction! %d > %d", lastParsed, parsed); 2518 } 2519 2520 return lastParsed; 2521} 2522 2523void NumberFormatTest::TestNonpositiveMultiplier() { 2524 UErrorCode status = U_ZERO_ERROR; 2525 DecimalFormatSymbols US(Locale::getUS(), status); 2526 CHECK(status, "DecimalFormatSymbols constructor"); 2527 DecimalFormat df(UnicodeString("0"), US, status); 2528 CHECK(status, "DecimalFormat(0)"); 2529 2530 // test zero multiplier 2531 2532 int32_t mult = df.getMultiplier(); 2533 df.setMultiplier(0); 2534 if (df.getMultiplier() != mult) { 2535 errln("DecimalFormat.setMultiplier(0) did not ignore its zero input"); 2536 } 2537 2538 // test negative multiplier 2539 2540 df.setMultiplier(-1); 2541 if (df.getMultiplier() != -1) { 2542 errln("DecimalFormat.setMultiplier(-1) ignored its negative input"); 2543 return; 2544 } 2545 2546 expect(df, "1122.123", -1122.123); 2547 expect(df, "-1122.123", 1122.123); 2548 expect(df, "1.2", -1.2); 2549 expect(df, "-1.2", 1.2); 2550 2551 // TODO: change all the following int64_t tests once BigInteger is ported 2552 // (right now the big numbers get turned into doubles and lose tons of accuracy) 2553 static const char* posOutOfRange = "9223372036854780000"; 2554 static const char* negOutOfRange = "-9223372036854780000"; 2555 2556 expect(df, U_INT64_MIN, posOutOfRange); 2557 expect(df, U_INT64_MIN+1, "9223372036854775807"); 2558 expect(df, (int64_t)-123, "123"); 2559 expect(df, (int64_t)123, "-123"); 2560 expect(df, U_INT64_MAX-1, "-9223372036854775806"); 2561 expect(df, U_INT64_MAX, "-9223372036854775807"); 2562 2563 df.setMultiplier(-2); 2564 expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806"); 2565 expect(df, -(U_INT64_MIN/2), "-9223372036854775808"); 2566 expect(df, -(U_INT64_MIN/2)+1, negOutOfRange); 2567 2568 df.setMultiplier(-7); 2569 expect(df, -(U_INT64_MAX/7)-1, posOutOfRange); 2570 expect(df, -(U_INT64_MAX/7), "9223372036854775807"); 2571 expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800"); 2572 2573 // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported 2574 // (right now the big numbers get turned into doubles and lose tons of accuracy) 2575 //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX)); 2576 //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1)); 2577 //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2))); 2578 //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2))); 2579 2580 // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it 2581 //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 2582 //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 2583 //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 2584 //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 2585} 2586 2587 2588void 2589NumberFormatTest::TestSpaceParsing() { 2590 // the data are: 2591 // the string to be parsed, parsed position, parsed error index 2592 const char* DATA[][3] = { 2593 {"$124", "4", "-1"}, 2594 {"$124 $124", "4", "-1"}, 2595 {"$124 ", "4", "-1"}, 2596 //{"$ 124 ", "5", "-1"}, // TODO: need to handle space correctly 2597 //{"$\\u00A0124 ", "5", "-1"}, // TODO: need to handle space correctly 2598 {"$ 124 ", "0", "0"}, 2599 {"$\\u00A0124 ", "0", "0"}, 2600 {" $ 124 ", "0", "0"}, // TODO: need to handle space correctly 2601 {"124$", "0", "3"}, // TODO: need to handle space correctly 2602 // {"124 $", "5", "-1"}, TODO: OK or not, need currency spacing rule 2603 {"124 $", "0", "3"}, 2604 }; 2605 UErrorCode status = U_ZERO_ERROR; 2606 NumberFormat* foo = NumberFormat::createCurrencyInstance(status); 2607 if (U_FAILURE(status)) { 2608 delete foo; 2609 return; 2610 } 2611 for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 2612 ParsePosition parsePosition(0); 2613 UnicodeString stringToBeParsed = ctou(DATA[i][0]); 2614 int parsedPosition = atoi(DATA[i][1]); 2615 int errorIndex = atoi(DATA[i][2]); 2616 Formattable result; 2617 foo->parse(stringToBeParsed, result, parsePosition); 2618 if (parsePosition.getIndex() != parsedPosition || 2619 parsePosition.getErrorIndex() != errorIndex) { 2620 errln("FAILED parse " + stringToBeParsed + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")"); 2621 } 2622 if (parsePosition.getErrorIndex() == -1 && 2623 result.getType() == Formattable::kLong && 2624 result.getLong() != 124) { 2625 errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong()); 2626 } 2627 } 2628 delete foo; 2629} 2630 2631/** 2632 * Test using various numbering systems and numbering system keyword. 2633 */ 2634void NumberFormatTest::TestNumberingSystems() { 2635 UErrorCode ec = U_ZERO_ERROR; 2636 2637 Locale loc1("en", "US", "", "numbers=thai"); 2638 Locale loc2("en", "US", "", "numbers=hebr"); 2639 Locale loc3("en", "US", "", "numbers=arabext"); 2640 Locale loc4("en", "US", "", "numbers=foobar"); 2641 2642 NumberFormat* fmt1= NumberFormat::createInstance(loc1, ec); 2643 if (U_FAILURE(ec)) { 2644 errln("FAIL: getInstance(en_US@numbers=thai)"); 2645 } 2646 NumberFormat* fmt2= NumberFormat::createInstance(loc2, ec); 2647 if (U_FAILURE(ec)) { 2648 errln("FAIL: getInstance(en_US@numbers=hebr)"); 2649 } 2650 NumberFormat* fmt3= NumberFormat::createInstance(loc3, ec); 2651 if (U_FAILURE(ec)) { 2652 errln("FAIL: getInstance(en_US@numbers=arabext)"); 2653 } 2654 2655 expect2(*fmt1, 1234.567, CharsToUnicodeString("\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57")); 2656 expect3(*fmt2, 5678.0, CharsToUnicodeString("\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7")); 2657 expect2(*fmt3, 1234.567, CharsToUnicodeString("\\u06F1,\\u06F2\\u06F3\\u06F4.\\u06F5\\u06F6\\u06F7")); 2658 2659 // Test bogus keyword value 2660 NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec); 2661 if ( ec != U_UNSUPPORTED_ERROR ) { 2662 errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR"); 2663 } 2664 2665 delete fmt1; 2666 delete fmt2; 2667 delete fmt3; 2668 delete fmt4; 2669} 2670 2671 2672void 2673NumberFormatTest::TestMultiCurrencySign() { 2674 const char* DATA[][6] = { 2675 // the fields in the following test are: 2676 // locale, 2677 // currency pattern (with negative pattern), 2678 // currency number to be formatted, 2679 // currency format using currency symbol name, such as "$" for USD, 2680 // currency format using currency ISO name, such as "USD", 2681 // currency format using plural name, such as "US dollars". 2682 // for US locale 2683 {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"}, 2684 {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"}, 2685 {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollar1.00"}, 2686 // for CHINA locale 2687 {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"}, 2688 {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"}, 2689 {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"} 2690 }; 2691 2692 const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0}; 2693 UnicodeString doubleCurrencyStr(doubleCurrencySign); 2694 const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0}; 2695 UnicodeString tripleCurrencyStr(tripleCurrencySign); 2696 2697 for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 2698 const char* locale = DATA[i][0]; 2699 UnicodeString pat = ctou(DATA[i][1]); 2700 double numberToBeFormat = atof(DATA[i][2]); 2701 UErrorCode status = U_ZERO_ERROR; 2702 DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status); 2703 if (U_FAILURE(status)) { 2704 delete sym; 2705 continue; 2706 } 2707 for (int j=1; j<=3; ++j) { 2708 // j represents the number of currency sign in the pattern. 2709 if (j == 2) { 2710 pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr); 2711 } else if (j == 3) { 2712 pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr); 2713 } 2714 2715 DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status); 2716 if (U_FAILURE(status)) { 2717 errln("FAILED init DecimalFormat "); 2718 delete fmt; 2719 continue; 2720 } 2721 UnicodeString s; 2722 ((NumberFormat*) fmt)->format(numberToBeFormat, s); 2723 // DATA[i][3] is the currency format result using a 2724 // single currency sign. 2725 // DATA[i][4] is the currency format result using 2726 // double currency sign. 2727 // DATA[i][5] is the currency format result using 2728 // triple currency sign. 2729 // DATA[i][j+2] is the currency format result using 2730 // 'j' number of currency sign. 2731 UnicodeString currencyFormatResult = ctou(DATA[i][2+j]); 2732 if (s.compare(currencyFormatResult)) { 2733 errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s); 2734 } 2735 // mix style parsing 2736 for (int k=3; k<=5; ++k) { 2737 // DATA[i][3] is the currency format result using a 2738 // single currency sign. 2739 // DATA[i][4] is the currency format result using 2740 // double currency sign. 2741 // DATA[i][5] is the currency format result using 2742 // triple currency sign. 2743 UnicodeString oneCurrencyFormat = ctou(DATA[i][k]); 2744 UErrorCode status = U_ZERO_ERROR; 2745 Formattable parseRes; 2746 fmt->parse(oneCurrencyFormat, parseRes, status); 2747 if (U_FAILURE(status) || 2748 (parseRes.getType() == Formattable::kDouble && 2749 parseRes.getDouble() != numberToBeFormat) || 2750 (parseRes.getType() == Formattable::kLong && 2751 parseRes.getLong() != numberToBeFormat)) { 2752 errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " + 2753 i + ", " + j + ", " + k); 2754 } 2755 } 2756 delete fmt; 2757 } 2758 delete sym; 2759 } 2760} 2761 2762 2763void 2764NumberFormatTest::TestCurrencyFormatForMixParsing() { 2765 UErrorCode status = U_ZERO_ERROR; 2766 MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status); 2767 if (U_FAILURE(status)) { 2768 delete curFmt; 2769 return; 2770 } 2771 const char* formats[] = { 2772 "$1,234.56", // string to be parsed 2773 "USD1,234.56", 2774 "US dollars1,234.56", 2775 "1,234.56 US dollars" 2776 }; 2777 for (uint32_t i = 0; i < sizeof(formats)/sizeof(formats[0]); ++i) { 2778 UnicodeString stringToBeParsed = ctou(formats[i]); 2779 Formattable result; 2780 UErrorCode status = U_ZERO_ERROR; 2781 curFmt->parseObject(stringToBeParsed, result, status); 2782 if (U_FAILURE(status)) { 2783 errln("FAIL: measure format parsing"); 2784 } 2785 if (result.getType() != Formattable::kObject || 2786 result.getObject()->getDynamicClassID() != CurrencyAmount::getStaticClassID() || 2787 ((CurrencyAmount*)result.getObject())->getNumber().getDouble() != 1234.56 || 2788 UnicodeString(((CurrencyAmount*)result.getObject())->getISOCurrency()).compare(ISO_CURRENCY_USD)) { 2789 errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number "); 2790 if (((CurrencyAmount*)result.getObject())->getNumber().getDouble() != 1234.56) { 2791 errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + ((CurrencyAmount*)result.getObject())->getNumber().getDouble()); 2792 } 2793 if (((CurrencyAmount*)result.getObject())->getISOCurrency() != ISO_CURRENCY_USD) { 2794 errln((UnicodeString)"wong currency, expect: USD" + ", got: " + ((CurrencyAmount*)result.getObject())->getISOCurrency()); 2795 } 2796 } 2797 } 2798 delete curFmt; 2799} 2800 2801 2802void 2803NumberFormatTest::TestDecimalFormatCurrencyParse() { 2804 // Locale.US 2805 UErrorCode status = U_ZERO_ERROR; 2806 DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status); 2807 if (U_FAILURE(status)) { 2808 delete sym; 2809 return; 2810 } 2811 UnicodeString pat; 2812 UChar currency = 0x00A4; 2813 // "\xA4#,##0.00;-\xA4#,##0.00" 2814 pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00"); 2815 DecimalFormat* fmt = new DecimalFormat(pat, sym, status); 2816 if (U_FAILURE(status)) { 2817 delete fmt; 2818 errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse"); 2819 return; 2820 } 2821 const char* DATA[][2] = { 2822 // the data are: 2823 // string to be parsed, the parsed result (number) 2824 {"$1.00", "1"}, 2825 {"USD1.00", "1"}, 2826 {"1.00 US dollar", "1"}, 2827 {"$1,234.56", "1234.56"}, 2828 {"USD1,234.56", "1234.56"}, 2829 {"1,234.56 US dollar", "1234.56"}, 2830 }; 2831 for (uint32_t i = 0; i < sizeof(DATA)/sizeof(DATA[0]); ++i) { 2832 UnicodeString stringToBeParsed = ctou(DATA[i][0]); 2833 double parsedResult = atof(DATA[i][1]); 2834 UErrorCode status = U_ZERO_ERROR; 2835 Formattable result; 2836 fmt->parse(stringToBeParsed, result, status); 2837 if (U_FAILURE(status) || 2838 (result.getType() == Formattable::kDouble && 2839 result.getDouble() != parsedResult) || 2840 (result.getType() == Formattable::kLong && 2841 result.getLong() != parsedResult)) { 2842 errln((UnicodeString)"FAIL parse: Expected " + parsedResult); 2843 } 2844 } 2845 delete fmt; 2846} 2847 2848 2849void 2850NumberFormatTest::TestCurrencyIsoPluralFormat() { 2851 const char* DATA[][6] = { 2852 // the data are: 2853 // locale, 2854 // currency amount to be formatted, 2855 // currency ISO code to be formatted, 2856 // format result using CURRENCYSTYLE, 2857 // format result using ISOCURRENCYSTYLE, 2858 // format result using PLURALCURRENCYSTYLE, 2859 {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"}, 2860 {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"}, 2861 {"en_US", "-1234.56", "USD", "($1,234.56)", "(USD1,234.56)", "-1,234.56 US dollars"}, 2862 {"zh_CN", "1", "USD", "US$1.00", "USD1.00", "1.00 \\u7F8E\\u5143"}, 2863 {"zh_CN", "1234.56", "USD", "US$1,234.56", "USD1,234.56", "1,234.56 \\u7F8E\\u5143"}, 2864 // wrong ISO code {"zh_CN", "1", "CHY", "CHY1.00", "CHY1.00", "1.00 CHY"}, 2865 // wrong ISO code {"zh_CN", "1234.56", "CHY", "CHY1,234.56", "CHY1,234.56", "1,234.56 CHY"}, 2866 {"zh_CN", "1", "CNY", "\\uFFE51.00", "CNY1.00", "1.00 \\u4EBA\\u6C11\\u5E01"}, 2867 {"zh_CN", "1234.56", "CNY", "\\uFFE51,234.56", "CNY1,234.56", "1,234.56 \\u4EBA\\u6C11\\u5E01"}, 2868 {"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"}, 2869 {"ru_RU", "2", "RUB", "2,00\\u00A0\\u0440\\u0443\\u0431.", "2,00\\u00A0RUB", "2,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0445 \\u0440\\u0443\\u0431\\u043B\\u044F"}, 2870 {"ru_RU", "5", "RUB", "5,00\\u00A0\\u0440\\u0443\\u0431.", "5,00\\u00A0RUB", "5,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0445 \\u0440\\u0443\\u0431\\u043B\\u0435\\u0439"}, 2871 // test locale without currency information 2872 {"ti_ET", "-1.23", "USD", "-US$1.23", "-USD1.23", "-1.23 USD"}, 2873 // test choice format 2874 {"es_AR", "1", "INR", "\\u20a8\\u00A01,00", "INR\\u00A01,00", "1,00 rupia india"}, 2875 }; 2876 2877 for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 2878 for (NumberFormat::EStyles k = NumberFormat::kCurrencyStyle; 2879 k <= NumberFormat::kPluralCurrencyStyle; 2880 k = (NumberFormat::EStyles)(k+1)) { 2881 // k represents currency format style. 2882 if ( k != NumberFormat::kCurrencyStyle && 2883 k != NumberFormat::kIsoCurrencyStyle && 2884 k != NumberFormat::kPluralCurrencyStyle ) { 2885 continue; 2886 } 2887 const char* localeString = DATA[i][0]; 2888 double numberToBeFormat = atof(DATA[i][1]); 2889 const char* currencyISOCode = DATA[i][2]; 2890 Locale locale(localeString); 2891 UErrorCode status = U_ZERO_ERROR; 2892 NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 2893 if (U_FAILURE(status)) { 2894 delete numFmt; 2895 errln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k); 2896 continue; 2897 } 2898 // TODO: need to be UChar* 2899 UChar currencyCode[4]; 2900 currencyCode[0] = currencyISOCode[0]; 2901 currencyCode[1] = currencyISOCode[1]; 2902 currencyCode[2] = currencyISOCode[2]; 2903 currencyCode[3] = currencyISOCode[3]; 2904 numFmt->setCurrency(currencyCode, status); 2905 if (U_FAILURE(status)) { 2906 delete numFmt; 2907 errln((UnicodeString)"can not set currency:" + currencyISOCode); 2908 continue; 2909 } 2910 2911 UnicodeString strBuf; 2912 numFmt->format(numberToBeFormat, strBuf); 2913 int resultDataIndex = k; 2914 if ( k == NumberFormat::kCurrencyStyle ) { 2915 resultDataIndex = k+2; 2916 } 2917 // DATA[i][resultDataIndex] is the currency format result 2918 // using 'k' currency style. 2919 UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 2920 if (strBuf.compare(formatResult)) { 2921 errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 2922 } 2923 // test parsing, and test parsing for all currency formats. 2924 for (int j = 3; j < 6; ++j) { 2925 // DATA[i][3] is the currency format result using 2926 // CURRENCYSTYLE formatter. 2927 // DATA[i][4] is the currency format result using 2928 // ISOCURRENCYSTYLE formatter. 2929 // DATA[i][5] is the currency format result using 2930 // PLURALCURRENCYSTYLE formatter. 2931 UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 2932 UErrorCode status = U_ZERO_ERROR; 2933 Formattable parseResult; 2934 numFmt->parse(oneCurrencyFormatResult, parseResult, status); 2935 if (U_FAILURE(status) || 2936 (parseResult.getType() == Formattable::kDouble && 2937 parseResult.getDouble() != numberToBeFormat) || 2938 (parseResult.getType() == Formattable::kLong && 2939 parseResult.getLong() != numberToBeFormat)) { 2940 errln((UnicodeString)"FAIL: getCurrencyFormat of locale " + 2941 localeString + " failed roundtripping the number"); 2942 if (parseResult.getType() == Formattable::kDouble) { 2943 errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble()); 2944 } else { 2945 errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong()); 2946 } 2947 } 2948 } 2949 delete numFmt; 2950 } 2951 } 2952} 2953 2954void 2955NumberFormatTest::TestCurrencyParsing() { 2956 const char* DATA[][6] = { 2957 // the data are: 2958 // locale, 2959 // currency amount to be formatted, 2960 // currency ISO code to be formatted, 2961 // format result using CURRENCYSTYLE, 2962 // format result using ISOCURRENCYSTYLE, 2963 // format result using PLURALCURRENCYSTYLE, 2964 {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"}, 2965 {"pa_PK", "1", "USD", "US$\\u00a0\\u0a67.\\u0a66\\u0a66", "USD\\u00a0\\u0a67.\\u0a66\\u0a66", "\\u0a67.\\u0a66\\u0a66 USD"}, 2966 {"es_AR", "1", "USD", "US$\\u00a01,00", "USD\\u00a01,00", "1,00 d\\u00f3lar estadounidense"}, 2967 {"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"}, 2968 {"fa_CA", "1", "USD", "\\u06f1\\u066b\\u06f0\\u06f0\\u00a0US$", "\\u06f1\\u066b\\u06f0\\u06f0\\u00a0USD", "\\u06f1\\u066b\\u06f0\\u06f0\\u0020\\u062f\\u0644\\u0627\\u0631\\u0020\\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627"}, 2969 {"he_IL", "1", "USD", "1.00\\u00a0US$", "1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"}, 2970 {"hr_HR", "1", "USD", "1,00\\u00a0$", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"}, 2971 {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 USD"}, 2972 {"it_IT", "1", "USD", "US$\\u00a01,00", "USD\\u00a01,00", "1,00 Dollaro Statunitense"}, 2973 {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00 \\ubbf8\\uad6d \\ub2ec\\ub7ec"}, 2974 {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00 \\u7c73\\u30c9\\u30eb"}, 2975 {"zh_CN", "1", "CNY", "\\uFFE51.00", "CNY1.00", "1.00 \\u4EBA\\u6C11\\u5E01"}, 2976 {"zh_TW", "1", "CNY", "\\uFFE51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 2977 {"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"}, 2978 }; 2979 2980#ifdef NUMFMTST_CACHE_DEBUG 2981int deadloop = 0; 2982for (;;) { 2983 printf("loop: %d\n", deadloop++); 2984#endif 2985 for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 2986 for (NumberFormat::EStyles k = NumberFormat::kCurrencyStyle; 2987 k <= NumberFormat::kPluralCurrencyStyle; 2988 k = (NumberFormat::EStyles)(k+1)) { 2989 // k represents currency format style. 2990 if ( k != NumberFormat::kCurrencyStyle && 2991 k != NumberFormat::kIsoCurrencyStyle && 2992 k != NumberFormat::kPluralCurrencyStyle ) { 2993 continue; 2994 } 2995 const char* localeString = DATA[i][0]; 2996 double numberToBeFormat = atof(DATA[i][1]); 2997 const char* currencyISOCode = DATA[i][2]; 2998 Locale locale(localeString); 2999 UErrorCode status = U_ZERO_ERROR; 3000 NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 3001 if (U_FAILURE(status)) { 3002 delete numFmt; 3003 errln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k); 3004 continue; 3005 } 3006 // TODO: need to be UChar* 3007 UChar currencyCode[4]; 3008 currencyCode[0] = currencyISOCode[0]; 3009 currencyCode[1] = currencyISOCode[1]; 3010 currencyCode[2] = currencyISOCode[2]; 3011 currencyCode[3] = currencyISOCode[3]; 3012 numFmt->setCurrency(currencyCode, status); 3013 if (U_FAILURE(status)) { 3014 delete numFmt; 3015 errln((UnicodeString)"can not set currency:" + currencyISOCode); 3016 continue; 3017 } 3018 3019 /* 3020 UnicodeString strBuf; 3021 numFmt->format(numberToBeFormat, strBuf); 3022 int resultDataIndex = k; 3023 if ( k == NumberFormat::kCurrencyStyle ) { 3024 resultDataIndex = k+2; 3025 } 3026 // DATA[i][resultDataIndex] is the currency format result 3027 // using 'k' currency style. 3028 UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3029 if (strBuf.compare(formatResult)) { 3030 errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3031 } 3032 */ 3033 // test parsing, and test parsing for all currency formats. 3034 for (int j = 3; j < 6; ++j) { 3035 // DATA[i][3] is the currency format result using 3036 // CURRENCYSTYLE formatter. 3037 // DATA[i][4] is the currency format result using 3038 // ISOCURRENCYSTYLE formatter. 3039 // DATA[i][5] is the currency format result using 3040 // PLURALCURRENCYSTYLE formatter. 3041 UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3042 UErrorCode status = U_ZERO_ERROR; 3043 Formattable parseResult; 3044 numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3045 if (U_FAILURE(status) || 3046 (parseResult.getType() == Formattable::kDouble && 3047 parseResult.getDouble() != numberToBeFormat) || 3048 (parseResult.getType() == Formattable::kLong && 3049 parseResult.getLong() != numberToBeFormat)) { 3050 errln((UnicodeString)"FAIL: getCurrencyFormat of locale " + 3051 localeString + " failed roundtripping the number" + 3052 "(i,k,j): " + i + ", " + k + ", " + j); 3053 if (parseResult.getType() == Formattable::kDouble) { 3054 errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble()); 3055 } else { 3056 errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong()); 3057 } 3058 } 3059 } 3060 delete numFmt; 3061 } 3062 } 3063#ifdef NUMFMTST_CACHE_DEBUG 3064} 3065#endif 3066} 3067 3068 3069void 3070NumberFormatTest::TestParseCurrencyInUCurr() { 3071 const char* DATA[] = { 3072 "1.00 US DOLLAR", // case in-sensitive 3073 "$1.00", 3074 "USD1.00", 3075 "US dollar1.00", 3076 "US dollars1.00", 3077 "$1.00", 3078 "AU$1.00", 3079 "ADP1.00", 3080 "ADP1.00", 3081 "AED1.00", 3082 "AED1.00", 3083 "AFA1.00", 3084 "AFA1.00", 3085 "AFN1.00", 3086 "ALL1.00", 3087 "AMD1.00", 3088 "ANG1.00", 3089 "AOA1.00", 3090 "AOK1.00", 3091 "AOK1.00", 3092 "AON1.00", 3093 "AON1.00", 3094 "AOR1.00", 3095 "AOR1.00", 3096 "AR$1.00", 3097 "ARA1.00", 3098 "ARA1.00", 3099 "ARP1.00", 3100 "ARP1.00", 3101 "ARS1.00", 3102 "ATS1.00", 3103 "ATS1.00", 3104 "AUD1.00", 3105 "AWG1.00", 3106 "AZM1.00", 3107 "AZM1.00", 3108 "AZN1.00", 3109 "Af1.00", 3110 "Afghan Afghani (1927-2002)1.00", 3111 "Afghan Afghani (AFA)1.00", 3112 "Afghan Afghani1.00", 3113 "Afghan Afghani1.00", 3114 "Afghan Afghanis (AFA)1.00", 3115 "Afghan Afghanis1.00", 3116 "Afl.1.00", 3117 "Albanian Lek1.00", 3118 "Albanian lek1.00", 3119 "Albanian lek\\u00eb1.00", 3120 "Algerian Dinar1.00", 3121 "Algerian dinar1.00", 3122 "Algerian dinars1.00", 3123 "Andorran Peseta1.00", 3124 "Andorran peseta1.00", 3125 "Andorran pesetas1.00", 3126 "Angolan Kwanza (1977-1990)1.00", 3127 "Angolan Kwanza Reajustado (1995-1999)1.00", 3128 "Angolan Kwanza1.00", 3129 "Angolan New Kwanza (1990-2000)1.00", 3130 "Angolan kwanza (AOK)1.00", 3131 "Angolan kwanza reajustado (AOR)1.00", 3132 "Angolan kwanza1.00", 3133 "Angolan kwanzas (AOK)1.00", 3134 "Angolan kwanzas reajustado (AOR)1.00", 3135 "Angolan kwanzas1.00", 3136 "Angolan new kwanza (AON)1.00", 3137 "Angolan new kwanzas (AON)1.00", 3138 "Argentine Austral1.00", 3139 "Argentine Peso (1983-1985)1.00", 3140 "Argentine Peso1.00", 3141 "Argentine austral1.00", 3142 "Argentine australs1.00", 3143 "Argentine peso (ARP)1.00", 3144 "Argentine peso1.00", 3145 "Argentine pesos (ARP)1.00", 3146 "Argentine pesos1.00", 3147 "Armenian Dram1.00", 3148 "Armenian dram1.00", 3149 "Armenian drams1.00", 3150 "Aruban Florin1.00", 3151 "Aruban florin1.00", 3152 "Australian Dollar1.00", 3153 "Australian dollar1.00", 3154 "Australian dollars1.00", 3155 "Austrian Schilling1.00", 3156 "Austrian schilling1.00", 3157 "Austrian schillings1.00", 3158 "Azerbaijani Manat (1993-2006)1.00", 3159 "Azerbaijani Manat1.00", 3160 "Azerbaijani manat (AZM)1.00", 3161 "Azerbaijani manat1.00", 3162 "Azerbaijani manats (AZM)1.00", 3163 "Azerbaijani manats1.00", 3164 "BN$1.00", 3165 "BAD1.00", 3166 "BAD1.00", 3167 "BAM1.00", 3168 "BBD1.00", 3169 "BD$1.00", 3170 "BDT1.00", 3171 "BEC1.00", 3172 "BEC1.00", 3173 "BEF1.00", 3174 "BEL1.00", 3175 "BEL1.00", 3176 "BF1.00", 3177 "BGL1.00", 3178 "BGN1.00", 3179 "BGN1.00", 3180 "BHD1.00", 3181 "BIF1.00", 3182 "BMD1.00", 3183 "BND1.00", 3184 "BOB1.00", 3185 "BOP1.00", 3186 "BOP1.00", 3187 "BOV1.00", 3188 "BOV1.00", 3189 "BRB1.00", 3190 "BRB1.00", 3191 "BRC1.00", 3192 "BRC1.00", 3193 "BRE1.00", 3194 "BRE1.00", 3195 "BRL1.00", 3196 "BRN1.00", 3197 "BRN1.00", 3198 "BRR1.00", 3199 "BRR1.00", 3200 "BSD1.00", 3201 "BSD1.00", 3202 "BTN1.00", 3203 "BUK1.00", 3204 "BUK1.00", 3205 "BWP1.00", 3206 "BYB1.00", 3207 "BYB1.00", 3208 "BYR1.00", 3209 "BZ$1.00", 3210 "BZD1.00", 3211 "Bahamian Dollar1.00", 3212 "Bahamian dollar1.00", 3213 "Bahamian dollars1.00", 3214 "Bahraini Dinar1.00", 3215 "Bahraini dinar1.00", 3216 "Bahraini dinars1.00", 3217 "Bangladeshi Taka1.00", 3218 "Bangladeshi taka1.00", 3219 "Bangladeshi takas1.00", 3220 "Barbadian Dollar1.00", 3221 "Barbadian dollar1.00", 3222 "Barbadian dollars1.00", 3223 "Bds$1.00", 3224 "Belarusian New Ruble (1994-1999)1.00", 3225 "Belarusian Ruble1.00", 3226 "Belarusian new ruble (BYB)1.00", 3227 "Belarusian new rubles (BYB)1.00", 3228 "Belarusian ruble1.00", 3229 "Belarusian rubles1.00", 3230 "Belgian Franc (convertible)1.00", 3231 "Belgian Franc (financial)1.00", 3232 "Belgian Franc1.00", 3233 "Belgian franc (convertible)1.00", 3234 "Belgian franc (financial)1.00", 3235 "Belgian franc1.00", 3236 "Belgian francs (convertible)1.00", 3237 "Belgian francs (financial)1.00", 3238 "Belgian francs1.00", 3239 "Belize Dollar1.00", 3240 "Belize dollar1.00", 3241 "Belize dollars1.00", 3242 "Bermudan Dollar1.00", 3243 "Bermudan dollar1.00", 3244 "Bermudan dollars1.00", 3245 "Bhutanese Ngultrum1.00", 3246 "Bhutanese ngultrum1.00", 3247 "Bhutanese ngultrums1.00", 3248 "Bolivian Mvdol1.00", 3249 "Bolivian Peso1.00", 3250 "Bolivian mvdol1.00", 3251 "Bolivian mvdols1.00", 3252 "Bolivian peso1.00", 3253 "Bolivian pesos1.00", 3254 "Bolivian Boliviano1.00", 3255 "Bolivian Boliviano1.00", 3256 "Bolivian Bolivianos1.00", 3257 "Bosnia-Herzegovina Convertible Mark1.00", 3258 "Bosnia-Herzegovina Dinar1.00", 3259 "Bosnia-Herzegovina convertible mark1.00", 3260 "Bosnia-Herzegovina convertible marks1.00", 3261 "Bosnia-Herzegovina dinar1.00", 3262 "Bosnia-Herzegovina dinars1.00", 3263 "Botswanan Pula1.00", 3264 "Botswanan pula1.00", 3265 "Botswanan pulas1.00", 3266 "Br1.00", 3267 "Brazilian Cruzado Novo1.00", 3268 "Brazilian Cruzado1.00", 3269 "Brazilian Cruzeiro (1990-1993)1.00", 3270 "Brazilian Cruzeiro Novo (1967-1986)1.00", 3271 "Brazilian Cruzeiro1.00", 3272 "Brazilian Real1.00", 3273 "Brazilian cruzado novo1.00", 3274 "Brazilian cruzado novos1.00", 3275 "Brazilian cruzado1.00", 3276 "Brazilian cruzados1.00", 3277 "Brazilian cruzeiro (BRE)1.00", 3278 "Brazilian cruzeiro novo (BRB)1.00", 3279 "Brazilian cruzeiro1.00", 3280 "Brazilian cruzeiros (BRE)1.00", 3281 "Brazilian cruzeiros novo (BRB)1.00", 3282 "Brazilian cruzeiros1.00", 3283 "Brazilian real1.00", 3284 "Brazilian reals1.00", 3285 "British Pound Sterling1.00", 3286 "British pound sterling1.00", 3287 "British pound sterlings1.00", 3288 "Brunei Dollar1.00", 3289 "Brunei dollar1.00", 3290 "Brunei dollars1.00", 3291 "Bs.1.00", 3292 "Bs.F.1.00", 3293 "Bulgarian Hard Lev1.00", 3294 "Bulgarian Lev1.00", 3295 "Bulgarian Leva1.00", 3296 "Bulgarian hard lev1.00", 3297 "Bulgarian hard leva1.00", 3298 "Bulgarian lev1.00", 3299 "Burmese Kyat1.00", 3300 "Burmese kyat1.00", 3301 "Burmese kyats1.00", 3302 "Burundian Franc1.00", 3303 "Burundian franc1.00", 3304 "Burundian francs1.00", 3305 "C$1.00", 3306 "CA$1.00", 3307 "CAD1.00", 3308 "CDF1.00", 3309 "CDF1.00", 3310 "CF1.00", 3311 "CFA Franc BCEAO1.00", 3312 "CFA Franc BEAC1.00", 3313 "CFA franc BCEAO1.00", 3314 "CFA franc BEAC1.00", 3315 "CFA francs BCEAO1.00", 3316 "CFA francs BEAC1.00", 3317 "CFP Franc1.00", 3318 "CFP franc1.00", 3319 "CFP francs1.00", 3320 "CFPF1.00", 3321 "CHE1.00", 3322 "CHE1.00", 3323 "CHF1.00", 3324 "CHW1.00", 3325 "CHW1.00", 3326 "CL$1.00", 3327 "CLF1.00", 3328 "CLF1.00", 3329 "CLP1.00", 3330 "CNY1.00", 3331 "CO$1.00", 3332 "COP1.00", 3333 "COU1.00", 3334 "COU1.00", 3335 "CRC1.00", 3336 "CSD1.00", 3337 "CSD1.00", 3338 "CSK1.00", 3339 "CSK1.00", 3340 "CUP1.00", 3341 "CUP1.00", 3342 "CVE1.00", 3343 "CYP1.00", 3344 "CZK1.00", 3345 "Cambodian Riel1.00", 3346 "Cambodian riel1.00", 3347 "Cambodian riels1.00", 3348 "Canadian Dollar1.00", 3349 "Canadian dollar1.00", 3350 "Canadian dollars1.00", 3351 "Cape Verdean Escudo1.00", 3352 "Cape Verdean escudo1.00", 3353 "Cape Verdean escudos1.00", 3354 "Cayman Islands Dollar1.00", 3355 "Cayman Islands dollar1.00", 3356 "Cayman Islands dollars1.00", 3357 "Chilean Peso1.00", 3358 "Chilean Unidades de Fomento1.00", 3359 "Chilean peso1.00", 3360 "Chilean pesos1.00", 3361 "Chilean unidades de fomento1.00", 3362 "Chilean unidades de fomentos1.00", 3363 "Chinese Yuan Renminbi1.00", 3364 "Chinese yuan1.00", 3365 "Colombian Peso1.00", 3366 "Colombian peso1.00", 3367 "Colombian pesos1.00", 3368 "Comorian Franc1.00", 3369 "Comorian franc1.00", 3370 "Comorian francs1.00", 3371 "Congolese Franc1.00", 3372 "Congolese franc1.00", 3373 "Congolese francs1.00", 3374 "Costa Rican Col\\u00f3n1.00", 3375 "Costa Rican col\\u00f3n1.00", 3376 "Costa Rican col\\u00f3ns1.00", 3377 "Croatian Dinar1.00", 3378 "Croatian Kuna1.00", 3379 "Croatian dinar1.00", 3380 "Croatian dinars1.00", 3381 "Croatian kuna1.00", 3382 "Croatian kunas1.00", 3383 "Cuban Peso1.00", 3384 "Cuban peso1.00", 3385 "Cuban pesos1.00", 3386 "Cypriot Pound1.00", 3387 "Cypriot pound1.00", 3388 "Cypriot pounds1.00", 3389 "Czech Republic Koruna1.00", 3390 "Czech Republic koruna1.00", 3391 "Czech Republic korunas1.00", 3392 "Czechoslovak Hard Koruna1.00", 3393 "Czechoslovak hard koruna1.00", 3394 "Czechoslovak hard korunas1.00", 3395 "DA1.00", 3396 "DDM1.00", 3397 "DDM1.00", 3398 "DEM1.00", 3399 "DEM1.00", 3400 "DJF1.00", 3401 "DKK1.00", 3402 "DOP1.00", 3403 "DZD1.00", 3404 "Danish Krone1.00", 3405 "Danish krone1.00", 3406 "Danish kroner1.00", 3407 "Db1.00", 3408 "German Mark1.00", 3409 "German mark1.00", 3410 "German marks1.00", 3411 "Djiboutian Franc1.00", 3412 "Djiboutian franc1.00", 3413 "Djiboutian francs1.00", 3414 "Dkr1.00", 3415 "Dominican Peso1.00", 3416 "Dominican peso1.00", 3417 "Dominican pesos1.00", 3418 "EC$1.00", 3419 "ECS1.00", 3420 "ECS1.00", 3421 "ECV1.00", 3422 "ECV1.00", 3423 "EEK1.00", 3424 "EEK1.00", 3425 "EGP1.00", 3426 "EGP1.00", 3427 "ERN1.00", 3428 "ERN1.00", 3429 "ESA1.00", 3430 "ESA1.00", 3431 "ESB1.00", 3432 "ESB1.00", 3433 "ESP1.00", 3434 "ETB1.00", 3435 "EUR1.00", 3436 "East Caribbean Dollar1.00", 3437 "East Caribbean dollar1.00", 3438 "East Caribbean dollars1.00", 3439 "East German Mark1.00", 3440 "East German mark1.00", 3441 "East German marks1.00", 3442 "Ecuadorian Sucre1.00", 3443 "Ecuadorian Unidad de Valor Constante (UVC)1.00", 3444 "Ecuadorian sucre1.00", 3445 "Ecuadorian sucres1.00", 3446 "Ecuadorian unidad de valor Constante (UVC)1.00", 3447 "Ecuadorian unidads de valor Constante (UVC)1.00", 3448 "Egyptian Pound1.00", 3449 "Egyptian pound1.00", 3450 "Egyptian pounds1.00", 3451 "Salvadoran Col\\u00f3n1.00", 3452 "Salvadoran col\\u00f3n1.00", 3453 "Salvadoran colones1.00", 3454 "Equatorial Guinean Ekwele1.00", 3455 "Equatorial Guinean ekwele1.00", 3456 "Eritrean Nakfa1.00", 3457 "Eritrean nakfa1.00", 3458 "Eritrean nakfas1.00", 3459 "Esc1.00", 3460 "Estonian Kroon1.00", 3461 "Estonian kroon1.00", 3462 "Estonian kroons1.00", 3463 "Ethiopian Birr1.00", 3464 "Ethiopian birr1.00", 3465 "Ethiopian birrs1.00", 3466 "Euro1.00", 3467 "European Composite Unit1.00", 3468 "European Currency Unit1.00", 3469 "European Monetary Unit1.00", 3470 "European Unit of Account (XBC)1.00", 3471 "European Unit of Account (XBD)1.00", 3472 "European composite unit1.00", 3473 "European composite units1.00", 3474 "European currency unit1.00", 3475 "European currency units1.00", 3476 "European monetary unit1.00", 3477 "European monetary units1.00", 3478 "European unit of account (XBC)1.00", 3479 "European unit of account (XBD)1.00", 3480 "European units of account (XBC)1.00", 3481 "European units of account (XBD)1.00", 3482 "FJ$1.00", 3483 "FBu1.00", 3484 "FIM1.00", 3485 "FIM1.00", 3486 "FJD1.00", 3487 "FKP1.00", 3488 "FKP1.00", 3489 "FRF1.00", 3490 "FRF1.00", 3491 "Falkland Islands Pound1.00", 3492 "Falkland Islands pound1.00", 3493 "Falkland Islands pounds1.00", 3494 "Fdj1.00", 3495 "Fijian Dollar1.00", 3496 "Fijian dollar1.00", 3497 "Fijian dollars1.00", 3498 "Finnish Markka1.00", 3499 "Finnish markka1.00", 3500 "Finnish markkas1.00", 3501 "Fr.1.00", 3502 "French Franc1.00", 3503 "French Gold Franc1.00", 3504 "French UIC-Franc1.00", 3505 "French UIC-franc1.00", 3506 "French UIC-francs1.00", 3507 "French franc1.00", 3508 "French francs1.00", 3509 "French gold franc1.00", 3510 "French gold francs1.00", 3511 "Ft1.00", 3512 "GY$1.00", 3513 "GBP1.00", 3514 "GEK1.00", 3515 "GEK1.00", 3516 "GEL1.00", 3517 "FG1.00", 3518 "GHC1.00", 3519 "GHC1.00", 3520 "GHS1.00", 3521 "GIP1.00", 3522 "GIP1.00", 3523 "GMD1.00", 3524 "GMD1.00", 3525 "GNF1.00", 3526 "GNS1.00", 3527 "GNS1.00", 3528 "GQE1.00", 3529 "GQE1.00", 3530 "GRD1.00", 3531 "GRD1.00", 3532 "GTQ1.00", 3533 "GWE1.00", 3534 "GWE1.00", 3535 "GWP1.00", 3536 "GWP1.00", 3537 "GYD1.00", 3538 "Gambian Dalasi1.00", 3539 "Gambian dalasi1.00", 3540 "Gambian dalasis1.00", 3541 "Georgian Kupon Larit1.00", 3542 "Georgian Lari1.00", 3543 "Georgian kupon larit1.00", 3544 "Georgian kupon larits1.00", 3545 "Georgian lari1.00", 3546 "Georgian laris1.00", 3547 "Ghanaian Cedi (1979-2007)1.00", 3548 "Ghanaian Cedi1.00", 3549 "Ghanaian cedi (GHC)1.00", 3550 "Ghanaian cedi1.00", 3551 "Ghanaian cedis (GHC)1.00", 3552 "Ghanaian cedis1.00", 3553 "Gibraltar Pound1.00", 3554 "Gibraltar pound1.00", 3555 "Gibraltar pounds1.00", 3556 "Gold1.00", 3557 "Gold1.00", 3558 "Greek Drachma1.00", 3559 "Greek drachma1.00", 3560 "Greek drachmas1.00", 3561 "Guatemalan Quetzal1.00", 3562 "Guatemalan quetzal1.00", 3563 "Guatemalan quetzals1.00", 3564 "Guinean Franc1.00", 3565 "Guinean Syli1.00", 3566 "Guinean franc1.00", 3567 "Guinean francs1.00", 3568 "Guinean syli1.00", 3569 "Guinean sylis1.00", 3570 "Guinea-Bissau Peso1.00", 3571 "Guinea-Bissau peso1.00", 3572 "Guinea-Bissau pesos1.00", 3573 "Guyanaese Dollar1.00", 3574 "Guyanaese dollar1.00", 3575 "Guyanaese dollars1.00", 3576 "HK$1.00", 3577 "HKD1.00", 3578 "HNL1.00", 3579 "HRD1.00", 3580 "HRD1.00", 3581 "HRK1.00", 3582 "HRK1.00", 3583 "HTG1.00", 3584 "HTG1.00", 3585 "HUF1.00", 3586 "Haitian Gourde1.00", 3587 "Haitian gourde1.00", 3588 "Haitian gourdes1.00", 3589 "Honduran Lempira1.00", 3590 "Honduran lempira1.00", 3591 "Honduran lempiras1.00", 3592 "Hong Kong Dollar1.00", 3593 "Hong Kong dollar1.00", 3594 "Hong Kong dollars1.00", 3595 "Hungarian Forint1.00", 3596 "Hungarian forint1.00", 3597 "Hungarian forints1.00", 3598 "IDR1.00", 3599 "IEP1.00", 3600 "ILP1.00", 3601 "ILP1.00", 3602 "ILS1.00", 3603 "INR1.00", 3604 "IQD1.00", 3605 "IRR1.00", 3606 "IR\\u00a31.00", 3607 "ISK1.00", 3608 "ISK1.00", 3609 "ITL1.00", 3610 "Icelandic Kr\\u00f3na1.00", 3611 "Icelandic kr\\u00f3na1.00", 3612 "Icelandic kr\\u00f3nur1.00", 3613 "Indian Rupee1.00", 3614 "Indian rupee1.00", 3615 "Indian rupees1.00", 3616 "Indonesian Rupiah1.00", 3617 "Indonesian rupiah1.00", 3618 "Indonesian rupiahs1.00", 3619 "Iranian Rial1.00", 3620 "Iranian rial1.00", 3621 "Iranian rials1.00", 3622 "Iraqi Dinar1.00", 3623 "Iraqi dinar1.00", 3624 "Iraqi dinars1.00", 3625 "Irish Pound1.00", 3626 "Irish pound1.00", 3627 "Irish pounds1.00", 3628 "Israeli Pound1.00", 3629 "Israeli new sheqel1.00", 3630 "Israeli pound1.00", 3631 "Israeli pounds1.00", 3632 "Italian Lira1.00", 3633 "Italian lira1.00", 3634 "Italian liras1.00", 3635 "J$1.00", 3636 "JD1.00", 3637 "JMD1.00", 3638 "JOD1.00", 3639 "JPY1.00", 3640 "Jamaican Dollar1.00", 3641 "Jamaican dollar1.00", 3642 "Jamaican dollars1.00", 3643 "Japanese Yen1.00", 3644 "Japanese yen1.00", 3645 "Jordanian Dinar1.00", 3646 "Jordanian dinar1.00", 3647 "Jordanian dinars1.00", 3648 "Ksh1.00", 3649 "KD1.00", 3650 "KES1.00", 3651 "KGS1.00", 3652 "KHR1.00", 3653 "KMF1.00", 3654 "KPW1.00", 3655 "KPW1.00", 3656 "KRW1.00", 3657 "KWD1.00", 3658 "KYD1.00", 3659 "KYD1.00", 3660 "KZT1.00", 3661 "Kazakhstan Tenge1.00", 3662 "Kazakhstan tenge1.00", 3663 "Kazakhstan tenges1.00", 3664 "Kenyan Shilling1.00", 3665 "Kenyan shilling1.00", 3666 "Kenyan shillings1.00", 3667 "Kuwaiti Dinar1.00", 3668 "Kuwaiti dinar1.00", 3669 "Kuwaiti dinars1.00", 3670 "Kyrgystani Som1.00", 3671 "Kyrgystani som1.00", 3672 "Kyrgystani soms1.00", 3673 "Kz1.00", 3674 "K\\u010d1.00", 3675 "HNL1.00", 3676 "LAK1.00", 3677 "LAK1.00", 3678 "LBP1.00", 3679 "LD1.00", 3680 "LKR1.00", 3681 "LB\\u00a31.00", 3682 "LRD1.00", 3683 "LRD1.00", 3684 "LSL1.00", 3685 "LTL1.00", 3686 "LTL1.00", 3687 "LTT1.00", 3688 "LTT1.00", 3689 "LUC1.00", 3690 "LUC1.00", 3691 "LUF1.00", 3692 "LUF1.00", 3693 "LUL1.00", 3694 "LUL1.00", 3695 "LVL1.00", 3696 "LVL1.00", 3697 "LVR1.00", 3698 "LVR1.00", 3699 "LYD1.00", 3700 "Laotian Kip1.00", 3701 "Laotian kip1.00", 3702 "Laotian kips1.00", 3703 "Latvian Lats1.00", 3704 "Latvian Ruble1.00", 3705 "Latvian lats1.00", 3706 "Latvian lati.00", 3707 "Latvian ruble1.00", 3708 "Latvian rubles1.00", 3709 "Lebanese Pound1.00", 3710 "Lebanese pound1.00", 3711 "Lebanese pounds1.00", 3712 "Lesotho Loti1.00", 3713 "Lesotho loti1.00", 3714 "Lesotho lotis1.00", 3715 "Liberian Dollar1.00", 3716 "Liberian dollar1.00", 3717 "Liberian dollars1.00", 3718 "Libyan Dinar1.00", 3719 "Libyan dinar1.00", 3720 "Libyan dinars1.00", 3721 "Lithuanian Litas1.00", 3722 "Lithuanian Talonas1.00", 3723 "Lithuanian litas1.00", 3724 "Lithuanian litai1.00", 3725 "Lithuanian talonas1.00", 3726 "Lithuanian talonases1.00", 3727 "Lm1.00", 3728 "Luxembourgian Convertible Franc1.00", 3729 "Luxembourg Financial Franc1.00", 3730 "Luxembourgian Franc1.00", 3731 "Luxembourgian convertible franc1.00", 3732 "Luxembourgian convertible francs1.00", 3733 "Luxembourg financial franc1.00", 3734 "Luxembourg financial francs1.00", 3735 "Luxembourgian franc1.00", 3736 "Luxembourgian francs1.00", 3737 "MAD1.00", 3738 "MAD1.00", 3739 "MAF1.00", 3740 "MAF1.00", 3741 "MDL1.00", 3742 "MDL1.00", 3743 "MX$1.00", 3744 "MGA1.00", 3745 "MGA1.00", 3746 "MGF1.00", 3747 "MGF1.00", 3748 "MKD1.00", 3749 "MLF1.00", 3750 "MLF1.00", 3751 "MMK1.00", 3752 "MMK1.00", 3753 "MNT1.00", 3754 "MOP1.00", 3755 "MOP1.00", 3756 "MRO1.00", 3757 "MTL1.00", 3758 "MTP1.00", 3759 "MTP1.00", 3760 "MTn1.00", 3761 "MUR1.00", 3762 "MUR1.00", 3763 "MVR1.00", 3764 "MVR1.00", 3765 "MWK1.00", 3766 "MXN1.00", 3767 "MXP1.00", 3768 "MXP1.00", 3769 "MXV1.00", 3770 "MXV1.00", 3771 "MYR1.00", 3772 "MZE1.00", 3773 "MZE1.00", 3774 "MZM1.00", 3775 "MZN1.00", 3776 "Macanese Pataca1.00", 3777 "Macanese pataca1.00", 3778 "Macanese patacas1.00", 3779 "Macedonian Denar1.00", 3780 "Macedonian denar1.00", 3781 "Macedonian denari1.00", 3782 "Malagasy Ariaries1.00", 3783 "Malagasy Ariary1.00", 3784 "Malagasy Ariary1.00", 3785 "Malagasy Franc1.00", 3786 "Malagasy franc1.00", 3787 "Malagasy francs1.00", 3788 "Malawian Kwacha1.00", 3789 "Malawian Kwacha1.00", 3790 "Malawian Kwachas1.00", 3791 "Malaysian Ringgit1.00", 3792 "Malaysian ringgit1.00", 3793 "Malaysian ringgits1.00", 3794 "Maldivian Rufiyaa1.00", 3795 "Maldivian rufiyaa1.00", 3796 "Maldivian rufiyaas1.00", 3797 "Malian Franc1.00", 3798 "Malian franc1.00", 3799 "Malian francs1.00", 3800 "Maltese Lira1.00", 3801 "Maltese Pound1.00", 3802 "Maltese lira1.00", 3803 "Maltese lira1.00", 3804 "Maltese pound1.00", 3805 "Maltese pounds1.00", 3806 "Mauritanian Ouguiya1.00", 3807 "Mauritanian ouguiya1.00", 3808 "Mauritanian ouguiyas1.00", 3809 "Mauritian Rupee1.00", 3810 "Mauritian rupee1.00", 3811 "Mauritian rupees1.00", 3812 "Mexican Peso1.00", 3813 "Mexican Silver Peso (1861-1992)1.00", 3814 "Mexican Unidad de Inversion (UDI)1.00", 3815 "Mexican peso1.00", 3816 "Mexican pesos1.00", 3817 "Mexican silver peso (MXP)1.00", 3818 "Mexican silver pesos (MXP)1.00", 3819 "Mexican unidad de inversion (UDI)1.00", 3820 "Mexican unidads de inversion (UDI)1.00", 3821 "Moldovan Leu1.00", 3822 "Moldovan leu1.00", 3823 "Moldovan lei1.00", 3824 "Mongolian Tugrik1.00", 3825 "Mongolian tugrik1.00", 3826 "Mongolian tugriks1.00", 3827 "Moroccan Dirham1.00", 3828 "Moroccan Franc1.00", 3829 "Moroccan dirham1.00", 3830 "Moroccan dirhams1.00", 3831 "Moroccan franc1.00", 3832 "Moroccan francs1.00", 3833 "Mozambican Escudo1.00", 3834 "Mozambican Metical1.00", 3835 "Mozambican escudo1.00", 3836 "Mozambican escudos1.00", 3837 "Mozambican metical1.00", 3838 "Mozambican meticals1.00", 3839 "Mt1.00", 3840 "Myanma Kyat1.00", 3841 "Myanma kyat1.00", 3842 "Myanma kyats1.00", 3843 "N$1.00", 3844 "NAD1.00", 3845 "NAf.1.00", 3846 "NGN1.00", 3847 "NIC1.00", 3848 "NIO1.00", 3849 "NIO1.00", 3850 "Nkr1.00", 3851 "NLG1.00", 3852 "NLG1.00", 3853 "NOK1.00", 3854 "NPR1.00", 3855 "NT$1.00", 3856 "NZ$1.00", 3857 "NZD1.00", 3858 "Namibian Dollar1.00", 3859 "Namibian dollar1.00", 3860 "Namibian dollars1.00", 3861 "Nepalese Rupee1.00", 3862 "Nepalese rupee1.00", 3863 "Nepalese rupees1.00", 3864 "Netherlands Antillean Guilder1.00", 3865 "Netherlands Antillean guilder1.00", 3866 "Netherlands Antillean guilders1.00", 3867 "Dutch Guilder1.00", 3868 "Dutch guilder1.00", 3869 "Dutch guilders1.00", 3870 "Israeli New Sheqel1.00", 3871 "Israeli New Sheqels1.00", 3872 "New Zealand Dollar1.00", 3873 "New Zealand dollar1.00", 3874 "New Zealand dollars1.00", 3875 "Nicaraguan Cordoba Oro1.00", 3876 "Nicaraguan Cordoba1.00", 3877 "Nicaraguan cordoba oro1.00", 3878 "Nicaraguan cordobas oro1.00", 3879 "Nicaraguan cordoba1.00", 3880 "Nicaraguan cordobas1.00", 3881 "Nigerian Naira1.00", 3882 "Nigerian naira1.00", 3883 "Nigerian nairas1.00", 3884 "North Korean Won1.00", 3885 "North Korean won1.00", 3886 "North Korean won1.00", 3887 "Norwegian Krone1.00", 3888 "Norwegian krone1.00", 3889 "Norwegian kroner1.00", 3890 "NPRs1.00", 3891 "Nu.1.00", 3892 "OMR1.00", 3893 "Old Mozambican Metical1.00", 3894 "Old Mozambican metical1.00", 3895 "Old Mozambican meticals1.00", 3896 "Old Romanian Lei1.00", 3897 "Old Romanian Leu1.00", 3898 "Old Romanian leu1.00", 3899 "Old Serbian Dinar1.00", 3900 "Old Serbian dinar1.00", 3901 "Old Serbian dinars1.00", 3902 "Old Sudanese Dinar1.00", 3903 "Old Sudanese Pound1.00", 3904 "Old Sudanese dinar1.00", 3905 "Old Sudanese dinars1.00", 3906 "Old Sudanese pound1.00", 3907 "Old Sudanese pounds1.00", 3908 "Old Turkish Lira1.00", 3909 "Old Turkish Lira1.00", 3910 "Omani Rial1.00", 3911 "Omani rial1.00", 3912 "Omani rials1.00", 3913 "PAB1.00", 3914 "PAB1.00", 3915 "PEI1.00", 3916 "PEI1.00", 3917 "PEN1.00", 3918 "PEN1.00", 3919 "PES1.00", 3920 "PES1.00", 3921 "PGK1.00", 3922 "PGK1.00", 3923 "PHP1.00", 3924 "PKR1.00", 3925 "PLN1.00", 3926 "PLZ1.00", 3927 "PLZ1.00", 3928 "PTE1.00", 3929 "PTE1.00", 3930 "PYG1.00", 3931 "Pakistani Rupee1.00", 3932 "Pakistani rupee1.00", 3933 "Pakistani rupees1.00", 3934 "Palladium1.00", 3935 "Palladium1.00", 3936 "Panamanian Balboa1.00", 3937 "Panamanian balboa1.00", 3938 "Panamanian balboas1.00", 3939 "Papua New Guinean Kina1.00", 3940 "Papua New Guinean kina1.00", 3941 "Papua New Guinean kina1.00", 3942 "Paraguayan Guarani1.00", 3943 "Paraguayan guarani1.00", 3944 "Paraguayan guaranis1.00", 3945 "Peruvian Inti1.00", 3946 "Peruvian Nuevo Sol1.00", 3947 "Peruvian Sol1.00", 3948 "Peruvian inti1.00", 3949 "Peruvian intis1.00", 3950 "Peruvian nuevo sol1.00", 3951 "Peruvian nuevos soles1.00", 3952 "Peruvian sol1.00", 3953 "Peruvian soles1.00", 3954 "Philippine Peso1.00", 3955 "Philippine peso1.00", 3956 "Philippine pesos1.00", 3957 "Platinum1.00", 3958 "Platinum1.00", 3959 "Polish Zloty (1950-1995)1.00", 3960 "Polish Zloty1.00", 3961 "Polish zlotys1.00", 3962 "Polish zloty (PLZ)1.00", 3963 "Polish zloty1.00", 3964 "Polish zlotys (PLZ)1.00", 3965 "Portuguese Escudo1.00", 3966 "Portuguese Guinea Escudo1.00", 3967 "Portuguese Guinea escudo1.00", 3968 "Portuguese Guinea escudos1.00", 3969 "Portuguese escudo1.00", 3970 "Portuguese escudos1.00", 3971 "PKRs1.00", 3972 "GTQ1.00", 3973 "QAR1.00", 3974 "QR1.00", 3975 "Qatari Rial1.00", 3976 "Qatari rial1.00", 3977 "Qatari rials1.00", 3978 "R1.00", 3979 "R$1.00", 3980 "RD$1.00", 3981 "RHD1.00", 3982 "RHD1.00", 3983 "RINET Funds1.00", 3984 "RINET Funds1.00", 3985 "RM1.00", 3986 "CN\\u00a51.00", 3987 "ROL1.00", 3988 "ROL1.00", 3989 "RON1.00", 3990 "RON1.00", 3991 "RSD1.00", 3992 "RSD1.00", 3993 "RUB1.00", 3994 "RUB1.00", 3995 "RUR1.00", 3996 "RUR1.00", 3997 "RWF1.00", 3998 "RWF1.00", 3999 "Rhodesian Dollar1.00", 4000 "Rhodesian dollar1.00", 4001 "Rhodesian dollars1.00", 4002 "Romanian Leu1.00", 4003 "Romanian lei1.00", 4004 "Romanian leu1.00", 4005 "Rp1.00", 4006 "Russian Ruble (1991-1998)1.00", 4007 "Russian Ruble1.00", 4008 "Russian ruble (RUR)1.00", 4009 "Russian ruble1.00", 4010 "Russian rubles (RUR)1.00", 4011 "Russian rubles1.00", 4012 "Rwandan Franc1.00", 4013 "Rwandan franc1.00", 4014 "Rwandan francs1.00", 4015 "S$1.00", 4016 "SAR1.00", 4017 "SBD1.00", 4018 "SCR1.00", 4019 "SDD1.00", 4020 "SDD1.00", 4021 "SDG1.00", 4022 "SDG1.00", 4023 "SDP1.00", 4024 "SDP1.00", 4025 "SEK1.00", 4026 "SGD1.00", 4027 "SHP1.00", 4028 "SHP1.00", 4029 "SI$1.00", 4030 "SIT1.00", 4031 "SIT1.00", 4032 "SKK1.00", 4033 "Skr1.00", 4034 "SLRs1.00", 4035 "SLL1.00", 4036 "SLL1.00", 4037 "SOS1.00", 4038 "SRD1.00", 4039 "SRD1.00", 4040 "SRG1.00", 4041 "SRe1.00", 4042 "STD1.00", 4043 "SUR1.00", 4044 "SUR1.00", 4045 "SVC1.00", 4046 "SVC1.00", 4047 "SYP1.00", 4048 "SZL1.00", 4049 "Saint Helena Pound1.00", 4050 "Saint Helena pound1.00", 4051 "Saint Helena pounds1.00", 4052 "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobra1.00", 4053 "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobra1.00", 4054 "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobras1.00", 4055 "Saudi Riyal1.00", 4056 "Saudi riyal1.00", 4057 "Saudi riyals1.00", 4058 "Serbian Dinar1.00", 4059 "Serbian dinar1.00", 4060 "Serbian dinars1.00", 4061 "Seychellois Rupee1.00", 4062 "Seychellois rupee1.00", 4063 "Seychellois rupees1.00", 4064 "Sf1.00", 4065 "Ssh1.00", 4066 "Sierra Leonean Leone1.00", 4067 "Sierra Leonean leone1.00", 4068 "Sierra Leonean leones1.00", 4069 "Silver1.00", 4070 "Silver1.00", 4071 "Singapore Dollar1.00", 4072 "Singapore dollar1.00", 4073 "Singapore dollars1.00", 4074 "Sk1.00", 4075 "Slovak Koruna1.00", 4076 "Slovak koruna1.00", 4077 "Slovak korunas1.00", 4078 "Slovenian Tolar1.00", 4079 "Slovenian tolar1.00", 4080 "Slovenian tolars1.00", 4081 "Solomon Islands Dollar1.00", 4082 "Solomon Islands dollar1.00", 4083 "Solomon Islands dollars1.00", 4084 "Somali Shilling1.00", 4085 "Somali shilling1.00", 4086 "Somali shillings1.00", 4087 "South African Rand (financial)1.00", 4088 "South African Rand1.00", 4089 "South African rand (financial)1.00", 4090 "South African rand1.00", 4091 "South African rands (financial)1.00", 4092 "South African rand1.00", 4093 "South Korean Won1.00", 4094 "South Korean won1.00", 4095 "South Korean won1.00", 4096 "Soviet Rouble1.00", 4097 "Soviet rouble1.00", 4098 "Soviet roubles1.00", 4099 "Spanish Peseta (A account)1.00", 4100 "Spanish Peseta (convertible account)1.00", 4101 "Spanish Peseta1.00", 4102 "Spanish peseta (A account)1.00", 4103 "Spanish peseta (convertible account)1.00", 4104 "Spanish peseta1.00", 4105 "Spanish pesetas (A account)1.00", 4106 "Spanish pesetas (convertible account)1.00", 4107 "Spanish pesetas1.00", 4108 "Special Drawing Rights1.00", 4109 "Sri Lanka Rupee1.00", 4110 "Sri Lanka rupee1.00", 4111 "Sri Lanka rupees1.00", 4112 "Sudanese Pound1.00", 4113 "Sudanese pound1.00", 4114 "Sudanese pounds1.00", 4115 "Surinamese Dollar1.00", 4116 "Surinamese dollar1.00", 4117 "Surinamese dollars1.00", 4118 "Suriname Guilder1.00", 4119 "Suriname guilder1.00", 4120 "Suriname guilders1.00", 4121 "Swazi Lilangeni1.00", 4122 "Swazi lilangeni1.00", 4123 "Swazi emalangeni1.00", 4124 "Swedish Krona1.00", 4125 "Swedish krona1.00", 4126 "Swedish kronor1.00", 4127 "Swiss Franc1.00", 4128 "Swiss franc1.00", 4129 "Swiss francs1.00", 4130 "Syrian Pound1.00", 4131 "Syrian pound1.00", 4132 "Syrian pounds1.00", 4133 "TSh1.00", 4134 "T$1.00", 4135 "THB1.00", 4136 "TJR1.00", 4137 "TJR1.00", 4138 "TJS1.00", 4139 "TJS1.00", 4140 "TL1.00", 4141 "TMM1.00", 4142 "TMM1.00", 4143 "TND1.00", 4144 "TND1.00", 4145 "TOP1.00", 4146 "TPE1.00", 4147 "TPE1.00", 4148 "TRL1.00", 4149 "TRY1.00", 4150 "TRY1.00", 4151 "TT$1.00", 4152 "TTD1.00", 4153 "TWD1.00", 4154 "TZS1.00", 4155 "New Taiwan Dollar1.00", 4156 "New Taiwan dollar1.00", 4157 "New Taiwan dollars1.00", 4158 "Tajikistani Ruble1.00", 4159 "Tajikistani Somoni1.00", 4160 "Tajikistani ruble1.00", 4161 "Tajikistani rubles1.00", 4162 "Tajikistani somoni1.00", 4163 "Tajikistani somonis1.00", 4164 "Tanzanian Shilling1.00", 4165 "Tanzanian shilling1.00", 4166 "Tanzanian shillings1.00", 4167 "Testing Currency Code1.00", 4168 "Testing Currency Code1.00", 4169 "Thai Baht1.00", 4170 "Thai baht1.00", 4171 "Thai baht1.00", 4172 "Timorese Escudo1.00", 4173 "Timorese escudo1.00", 4174 "Timorese escudos1.00", 4175 "Tk1.00", 4176 "Tongan Pa\\u02bbanga1.00", 4177 "Tongan pa\\u02bbanga1.00", 4178 "Tongan pa\\u02bbanga1.00", 4179 "Trinidad and Tobago Dollar1.00", 4180 "Trinidad and Tobago dollar1.00", 4181 "Trinidad and Tobago dollars1.00", 4182 "Tunisian Dinar1.00", 4183 "Tunisian dinar1.00", 4184 "Tunisian dinars1.00", 4185 "Turkish Lira1.00", 4186 "Turkish Lira1.00", 4187 "Turkish lira1.00", 4188 "Turkmenistani Manat1.00", 4189 "Turkmenistani manat1.00", 4190 "Turkmenistani manat1.00", 4191 "USh1.00", 4192 "UAE dirham1.00", 4193 "UAE dirhams1.00", 4194 "UAH1.00", 4195 "UAK1.00", 4196 "UAK1.00", 4197 "UGS1.00", 4198 "UGS1.00", 4199 "UGX1.00", 4200 "UM1.00", 4201 "US Dollar (Next day)1.00", 4202 "US Dollar (Same day)1.00", 4203 "US Dollar1.00", 4204 "US dollar (next day)1.00", 4205 "US dollar (same day)1.00", 4206 "US dollar1.00", 4207 "US dollars (next day)1.00", 4208 "US dollars (same day)1.00", 4209 "US dollars1.00", 4210 "USD1.00", 4211 "USN1.00", 4212 "USN1.00", 4213 "USS1.00", 4214 "USS1.00", 4215 "UYI1.00", 4216 "UYI1.00", 4217 "UYP1.00", 4218 "UYP1.00", 4219 "UYU1.00", 4220 "UZS1.00", 4221 "UZS1.00", 4222 "Ugandan Shilling (1966-1987)1.00", 4223 "Ugandan Shilling1.00", 4224 "Ugandan shilling (UGS)1.00", 4225 "Ugandan shilling1.00", 4226 "Ugandan shillings (UGS)1.00", 4227 "Ugandan shillings1.00", 4228 "Ukrainian Hryvnia1.00", 4229 "Ukrainian Karbovanets1.00", 4230 "Ukrainian hryvnia1.00", 4231 "Ukrainian hryvnias1.00", 4232 "Ukrainian karbovanets1.00", 4233 "Ukrainian karbovantsiv1.00", 4234 "Unidad de Valor Real1.00", 4235 "United Arab Emirates Dirham1.00", 4236 "Unknown or Invalid Currency1.00", 4237 "$U1.00", 4238 "Uruguayan Peso (1975-1993)1.00", 4239 "Uruguayan Peso1.00", 4240 "Uruguayan Peso en Unidades Indexadas1.00", 4241 "Uruguayan peso (UYP)1.00", 4242 "Uruguayan peso en unidades indexadas1.00", 4243 "Uruguayan peso1.00", 4244 "Uruguayan pesos (UYP)1.00", 4245 "Uruguayan pesos en unidades indexadas1.00", 4246 "Uruguayan pesos1.00", 4247 "Uzbekistan Som1.00", 4248 "Uzbekistan som1.00", 4249 "Uzbekistan som1.00", 4250 "VEB1.00", 4251 "VEF1.00", 4252 "VND1.00", 4253 "VT1.00", 4254 "VUV1.00", 4255 "Vanuatu Vatu1.00", 4256 "Vanuatu vatu1.00", 4257 "Vanuatu vatus1.00", 4258 "Venezuelan Bol\\u00edvar Fuerte1.00", 4259 "Venezuelan Bol\\u00edvar1.00", 4260 "Venezuelan bol\\u00edvar fuerte1.00", 4261 "Venezuelan bol\\u00edvars fuertes1.00", 4262 "Venezuelan bol\\u00edvar1.00", 4263 "Venezuelan bol\\u00edvars1.00", 4264 "Vietnamese Dong1.00", 4265 "Vietnamese dong1.00", 4266 "Vietnamese dong1.00", 4267 "WIR Euro1.00", 4268 "WIR Franc1.00", 4269 "WIR euro1.00", 4270 "WIR euros1.00", 4271 "WIR franc1.00", 4272 "WIR francs1.00", 4273 "WST1.00", 4274 "WST1.00", 4275 "Samoan Tala1.00", 4276 "Samoan tala1.00", 4277 "Samoan tala1.00", 4278 "XAF1.00", 4279 "XAF1.00", 4280 "XAG1.00", 4281 "XAG1.00", 4282 "XAU1.00", 4283 "XAU1.00", 4284 "XBA1.00", 4285 "XBA1.00", 4286 "XBB1.00", 4287 "XBB1.00", 4288 "XBC1.00", 4289 "XBC1.00", 4290 "XBD1.00", 4291 "XBD1.00", 4292 "XCD1.00", 4293 "XDR1.00", 4294 "XDR1.00", 4295 "XEU1.00", 4296 "XEU1.00", 4297 "XFO1.00", 4298 "XFO1.00", 4299 "XFU1.00", 4300 "XFU1.00", 4301 "XOF1.00", 4302 "XOF1.00", 4303 "XPD1.00", 4304 "XPD1.00", 4305 "XPF1.00", 4306 "XPT1.00", 4307 "XPT1.00", 4308 "XRE1.00", 4309 "XRE1.00", 4310 "XTS1.00", 4311 "XTS1.00", 4312 "XXX1.00", 4313 "XXX1.00", 4314 "YDD1.00", 4315 "YDD1.00", 4316 "YER1.00", 4317 "YUD1.00", 4318 "YUD1.00", 4319 "YUM1.00", 4320 "YUM1.00", 4321 "YUN1.00", 4322 "YUN1.00", 4323 "Yemeni Dinar1.00", 4324 "Yemeni Rial1.00", 4325 "Yemeni dinar1.00", 4326 "Yemeni dinars1.00", 4327 "Yemeni rial1.00", 4328 "Yemeni rials1.00", 4329 "Yugoslavian Convertible Dinar1.00", 4330 "Yugoslavian Hard Dinar1.00", 4331 "Yugoslavian Noviy Dinar1.00", 4332 "Yugoslavian Noviy dinars1.00", 4333 "Yugoslavian convertible dinar1.00", 4334 "Yugoslavian convertible dinars1.00", 4335 "Yugoslavian hard dinar1.00", 4336 "Yugoslavian hard dinars1.00", 4337 "Yugoslavian noviy dinar1.00", 4338 "Z$1.00", 4339 "ZAL1.00", 4340 "ZAL1.00", 4341 "ZAR1.00", 4342 "ZMK1.00", 4343 "ZMK1.00", 4344 "ZRN1.00", 4345 "ZRN1.00", 4346 "ZRZ1.00", 4347 "ZRZ1.00", 4348 "ZWD1.00", 4349 "Zairean New Zaire1.00", 4350 "Zairean Zaire1.00", 4351 "Zairean new zaire1.00", 4352 "Zairean new zaires1.00", 4353 "Zairean zaire1.00", 4354 "Zairean zaires1.00", 4355 "Zambian Kwacha1.00", 4356 "Zambian kwacha1.00", 4357 "Zambian kwachas1.00", 4358 "Zimbabwean Dollar1.00", 4359 "Zimbabwean dollar1.00", 4360 "Zimbabwean dollars1.00", 4361 "euro1.00", 4362 "euros1.00", 4363 "man.1.00", 4364 "old Turkish lira1.00", 4365 "special drawing rights1.00", 4366 "unidad de valor real1.00", 4367 "unidad de valor reals1.00", 4368 "unknown/invalid currency1.00", 4369 "z\\u01421.00", 4370 "\\u00a31.00", 4371 "CY\\u00a31.00", 4372 "\\u00a51.00", 4373 "\\u0e3f1.00", 4374 "\\u20ab1.00", 4375 "\\u20a11.00", 4376 "Pts1.00", 4377 "\\u20aa1.00", 4378 "\\u20ac1.00", 4379 "\\u20a81.00", 4380 "\\u20a61.00", 4381 "\\u20ae1.00", 4382 "IT\\u20a41.00", 4383 // for GHS 4384 // for PHP 4385 // for PYG 4386 // for UAH 4387 // 4388 // Following has extra text, should be parsed correctly too 4389 "$1.00 random", 4390 "USD1.00 random", 4391 "1.00 US dollar random", 4392 "1.00 US dollars random", 4393 "1.00 Afghan Afghani random", 4394 "1.00 Afghan Afghani random", 4395 "1.00 Afghan Afghanis (AFA) random", 4396 "1.00 Afghan Afghanis random", 4397 "1.00 Albanian Lek random", 4398 "1.00 Albanian lek random", 4399 "1.00 Albanian lekë random", 4400 "1.00 Algerian Dinar random", 4401 "1.00 Algerian dinar random", 4402 "1.00 Algerian dinars random", 4403 "1.00 Andorran Peseta random", 4404 "1.00 Andorran peseta random", 4405 "1.00 Andorran pesetas random", 4406 "1.00 Angolan Kwanza (1977-1990) random", 4407 "1.00 Angolan Kwanza Reajustado (1995-1999) random", 4408 "1.00 Angolan Kwanza random", 4409 "1.00 Angolan New Kwanza (1990-2000) random", 4410 "1.00 Angolan kwanza (AOK) random", 4411 "1.00 Angolan kwanza reajustado (AOR) random", 4412 "1.00 Angolan kwanza random", 4413 "1.00 Angolan kwanzas (AOK) random", 4414 "1.00 Angolan kwanzas reajustado (AOR) random", 4415 "1.00 Angolan kwanzas random", 4416 "1.00 Angolan new kwanza (AON) random", 4417 "1.00 Angolan new kwanzas (AON) random", 4418 "1.00 Argentine Austral random", 4419 "1.00 Argentine Peso (1983-1985) random", 4420 "1.00 Argentine Peso random", 4421 "1.00 Argentine austral random", 4422 "1.00 Argentine australs random", 4423 "1.00 Argentine peso (ARP) random", 4424 "1.00 Argentine peso random", 4425 "1.00 Argentine pesos (ARP) random", 4426 "1.00 Argentine pesos random", 4427 "1.00 Armenian Dram random", 4428 "1.00 Armenian dram random", 4429 "1.00 Armenian drams random", 4430 "1.00 Aruban Florin random", 4431 "1.00 Aruban florin random", 4432 "1.00 Australian Dollar random", 4433 "1.00 Australian dollar random", 4434 "1.00 Australian dollars random", 4435 "1.00 Austrian Schilling random", 4436 "1.00 Austrian schilling random", 4437 "1.00 Austrian schillings random", 4438 "1.00 Azerbaijani Manat (1993-2006) random", 4439 "1.00 Azerbaijani Manat random", 4440 "1.00 Azerbaijani manat (AZM) random", 4441 "1.00 Azerbaijani manat random", 4442 "1.00 Azerbaijani manats (AZM) random", 4443 "1.00 Azerbaijani manats random", 4444 "1.00 Bahamian Dollar random", 4445 "1.00 Bahamian dollar random", 4446 "1.00 Bahamian dollars random", 4447 "1.00 Bahraini Dinar random", 4448 "1.00 Bahraini dinar random", 4449 "1.00 Bahraini dinars random", 4450 "1.00 Bangladeshi Taka random", 4451 "1.00 Bangladeshi taka random", 4452 "1.00 Bangladeshi takas random", 4453 "1.00 Barbadian Dollar random", 4454 "1.00 Barbadian dollar random", 4455 "1.00 Barbadian dollars random", 4456 "1.00 Belarusian New Ruble (1994-1999) random", 4457 "1.00 Belarusian Ruble random", 4458 "1.00 Belarusian new ruble (BYB) random", 4459 "1.00 Belarusian new rubles (BYB) random", 4460 "1.00 Belarusian ruble random", 4461 "1.00 Belarusian rubles random", 4462 "1.00 Belgian Franc (convertible) random", 4463 "1.00 Belgian Franc (financial) random", 4464 "1.00 Belgian Franc random", 4465 "1.00 Belgian franc (convertible) random", 4466 "1.00 Belgian franc (financial) random", 4467 "1.00 Belgian franc random", 4468 "1.00 Belgian francs (convertible) random", 4469 "1.00 Belgian francs (financial) random", 4470 "1.00 Belgian francs random", 4471 "1.00 Belize Dollar random", 4472 "1.00 Belize dollar random", 4473 "1.00 Belize dollars random", 4474 "1.00 Bermudan Dollar random", 4475 "1.00 Bermudan dollar random", 4476 "1.00 Bermudan dollars random", 4477 "1.00 Bhutanese Ngultrum random", 4478 "1.00 Bhutanese ngultrum random", 4479 "1.00 Bhutanese ngultrums random", 4480 "1.00 Bolivian Mvdol random", 4481 "1.00 Bolivian Peso random", 4482 "1.00 Bolivian mvdol random", 4483 "1.00 Bolivian mvdols random", 4484 "1.00 Bolivian peso random", 4485 "1.00 Bolivian pesos random", 4486 "1.00 Bolivian Boliviano random", 4487 "1.00 Bolivian Boliviano random", 4488 "1.00 Bolivian Bolivianos random", 4489 "1.00 Bosnia-Herzegovina Convertible Mark random", 4490 "1.00 Bosnia-Herzegovina Dinar random", 4491 "1.00 Bosnia-Herzegovina convertible mark random", 4492 "1.00 Bosnia-Herzegovina convertible marks random", 4493 "1.00 Bosnia-Herzegovina dinar random", 4494 "1.00 Bosnia-Herzegovina dinars random", 4495 "1.00 Botswanan Pula random", 4496 "1.00 Botswanan pula random", 4497 "1.00 Botswanan pulas random", 4498 "1.00 Brazilian Cruzado Novo random", 4499 "1.00 Brazilian Cruzado random", 4500 "1.00 Brazilian Cruzeiro (1990-1993) random", 4501 "1.00 Brazilian Cruzeiro Novo (1967-1986) random", 4502 "1.00 Brazilian Cruzeiro random", 4503 "1.00 Brazilian Real random", 4504 "1.00 Brazilian cruzado novo random", 4505 "1.00 Brazilian cruzado novos random", 4506 "1.00 Brazilian cruzado random", 4507 "1.00 Brazilian cruzados random", 4508 "1.00 Brazilian cruzeiro (BRE) random", 4509 "1.00 Brazilian cruzeiro novo (BRB) random", 4510 "1.00 Brazilian cruzeiro random", 4511 "1.00 Brazilian cruzeiros (BRE) random", 4512 "1.00 Brazilian cruzeiros novo (BRB) random", 4513 "1.00 Brazilian cruzeiros random", 4514 "1.00 Brazilian real random", 4515 "1.00 Brazilian reals random", 4516 "1.00 British Pound Sterling random", 4517 "1.00 British pound sterling random", 4518 "1.00 British pound sterlings random", 4519 "1.00 Brunei Dollar random", 4520 "1.00 Brunei dollar random", 4521 "1.00 Brunei dollars random", 4522 "1.00 Bulgarian Hard Lev random", 4523 "1.00 Bulgarian Lev random", 4524 "1.00 Bulgarian Leva random", 4525 "1.00 Bulgarian hard lev random", 4526 "1.00 Bulgarian hard leva random", 4527 "1.00 Bulgarian lev random", 4528 "1.00 Burmese Kyat random", 4529 "1.00 Burmese kyat random", 4530 "1.00 Burmese kyats random", 4531 "1.00 Burundian Franc random", 4532 "1.00 Burundian franc random", 4533 "1.00 Burundian francs random", 4534 "1.00 Cambodian Riel random", 4535 "1.00 Cambodian riel random", 4536 "1.00 Cambodian riels random", 4537 "1.00 Canadian Dollar random", 4538 "1.00 Canadian dollar random", 4539 "1.00 Canadian dollars random", 4540 "1.00 Cape Verdean Escudo random", 4541 "1.00 Cape Verdean escudo random", 4542 "1.00 Cape Verdean escudos random", 4543 "1.00 Cayman Islands Dollar random", 4544 "1.00 Cayman Islands dollar random", 4545 "1.00 Cayman Islands dollars random", 4546 "1.00 Chilean Peso random", 4547 "1.00 Chilean Unidades de Fomento random", 4548 "1.00 Chilean peso random", 4549 "1.00 Chilean pesos random", 4550 "1.00 Chilean unidades de fomento random", 4551 "1.00 Chilean unidades de fomentos random", 4552 "1.00 Chinese Yuan Renminbi random", 4553 "1.00 Chinese yuan random", 4554 "1.00 Colombian Peso random", 4555 "1.00 Colombian peso random", 4556 "1.00 Colombian pesos random", 4557 "1.00 Comorian Franc random", 4558 "1.00 Comorian franc random", 4559 "1.00 Comorian francs random", 4560 "1.00 Congolese Franc Congolais random", 4561 "1.00 Congolese franc Congolais random", 4562 "1.00 Congolese francs Congolais random", 4563 "1.00 Costa Rican Col\\u00f3n random", 4564 "1.00 Costa Rican col\\u00f3n random", 4565 "1.00 Costa Rican col\\u00f3ns random", 4566 "1.00 Croatian Dinar random", 4567 "1.00 Croatian Kuna random", 4568 "1.00 Croatian dinar random", 4569 "1.00 Croatian dinars random", 4570 "1.00 Croatian kuna random", 4571 "1.00 Croatian kunas random", 4572 "1.00 Cuban Peso random", 4573 "1.00 Cuban peso random", 4574 "1.00 Cuban pesos random", 4575 "1.00 Cypriot Pound random", 4576 "1.00 Cypriot pound random", 4577 "1.00 Cypriot pounds random", 4578 "1.00 Czech Republic Koruna random", 4579 "1.00 Czech Republic koruna random", 4580 "1.00 Czech Republic korunas random", 4581 "1.00 Czechoslovak Hard Koruna random", 4582 "1.00 Czechoslovak hard koruna random", 4583 "1.00 Czechoslovak hard korunas random", 4584 "1.00 Danish Krone random", 4585 "1.00 Danish krone random", 4586 "1.00 Danish kroner random", 4587 "1.00 German Mark random", 4588 "1.00 German mark random", 4589 "1.00 German marks random", 4590 "1.00 Djiboutian Franc random", 4591 "1.00 Djiboutian franc random", 4592 "1.00 Djiboutian francs random", 4593 "1.00 Dominican Peso random", 4594 "1.00 Dominican peso random", 4595 "1.00 Dominican pesos random", 4596 "1.00 East Caribbean Dollar random", 4597 "1.00 East Caribbean dollar random", 4598 "1.00 East Caribbean dollars random", 4599 "1.00 East German Mark random", 4600 "1.00 East German mark random", 4601 "1.00 East German marks random", 4602 "1.00 Ecuadorian Sucre random", 4603 "1.00 Ecuadorian Unidad de Valor Constante (UVC) random", 4604 "1.00 Ecuadorian sucre random", 4605 "1.00 Ecuadorian sucres random", 4606 "1.00 Ecuadorian unidad de valor Constante (UVC) random", 4607 "1.00 Ecuadorian unidads de valor Constante (UVC) random", 4608 "1.00 Egyptian Pound random", 4609 "1.00 Egyptian pound random", 4610 "1.00 Egyptian pounds random", 4611 "1.00 Salvadoran Col\\u00f3n random", 4612 "1.00 Salvadoran col\\u00f3n random", 4613 "1.00 Salvadoran colones random", 4614 "1.00 Equatorial Guinean Ekwele random", 4615 "1.00 Equatorial Guinean ekwele random", 4616 "1.00 Eritrean Nakfa random", 4617 "1.00 Eritrean nakfa random", 4618 "1.00 Eritrean nakfas random", 4619 "1.00 Estonian Kroon random", 4620 "1.00 Estonian kroon random", 4621 "1.00 Estonian kroons random", 4622 "1.00 Ethiopian Birr random", 4623 "1.00 Ethiopian birr random", 4624 "1.00 Ethiopian birrs random", 4625 "1.00 European Composite Unit random", 4626 "1.00 European Currency Unit random", 4627 "1.00 European Monetary Unit random", 4628 "1.00 European Unit of Account (XBC) random", 4629 "1.00 European Unit of Account (XBD) random", 4630 "1.00 European composite unit random", 4631 "1.00 European composite units random", 4632 "1.00 European currency unit random", 4633 "1.00 European currency units random", 4634 "1.00 European monetary unit random", 4635 "1.00 European monetary units random", 4636 "1.00 European unit of account (XBC) random", 4637 "1.00 European unit of account (XBD) random", 4638 "1.00 European units of account (XBC) random", 4639 "1.00 European units of account (XBD) random", 4640 "1.00 Falkland Islands Pound random", 4641 "1.00 Falkland Islands pound random", 4642 "1.00 Falkland Islands pounds random", 4643 "1.00 Fijian Dollar random", 4644 "1.00 Fijian dollar random", 4645 "1.00 Fijian dollars random", 4646 "1.00 Finnish Markka random", 4647 "1.00 Finnish markka random", 4648 "1.00 Finnish markkas random", 4649 "1.00 French Franc random", 4650 "1.00 French Gold Franc random", 4651 "1.00 French UIC-Franc random", 4652 "1.00 French UIC-franc random", 4653 "1.00 French UIC-francs random", 4654 "1.00 French franc random", 4655 "1.00 French francs random", 4656 "1.00 French gold franc random", 4657 "1.00 French gold francs random", 4658 "1.00 Gambian Dalasi random", 4659 "1.00 Gambian dalasi random", 4660 "1.00 Gambian dalasis random", 4661 "1.00 Georgian Kupon Larit random", 4662 "1.00 Georgian Lari random", 4663 "1.00 Georgian kupon larit random", 4664 "1.00 Georgian kupon larits random", 4665 "1.00 Georgian lari random", 4666 "1.00 Georgian laris random", 4667 "1.00 Ghanaian Cedi (1979-2007) random", 4668 "1.00 Ghanaian Cedi random", 4669 "1.00 Ghanaian cedi (GHC) random", 4670 "1.00 Ghanaian cedi random", 4671 "1.00 Ghanaian cedis (GHC) random", 4672 "1.00 Ghanaian cedis random", 4673 "1.00 Gibraltar Pound random", 4674 "1.00 Gibraltar pound random", 4675 "1.00 Gibraltar pounds random", 4676 "1.00 Gold random", 4677 "1.00 Gold random", 4678 "1.00 Greek Drachma random", 4679 "1.00 Greek drachma random", 4680 "1.00 Greek drachmas random", 4681 "1.00 Guatemalan Quetzal random", 4682 "1.00 Guatemalan quetzal random", 4683 "1.00 Guatemalan quetzals random", 4684 "1.00 Guinean Franc random", 4685 "1.00 Guinean Syli random", 4686 "1.00 Guinean franc random", 4687 "1.00 Guinean francs random", 4688 "1.00 Guinean syli random", 4689 "1.00 Guinean sylis random", 4690 "1.00 Guinea-Bissau Peso random", 4691 "1.00 Guinea-Bissau peso random", 4692 "1.00 Guinea-Bissau pesos random", 4693 "1.00 Guyanaese Dollar random", 4694 "1.00 Guyanaese dollar random", 4695 "1.00 Guyanaese dollars random", 4696 "1.00 Haitian Gourde random", 4697 "1.00 Haitian gourde random", 4698 "1.00 Haitian gourdes random", 4699 "1.00 Honduran Lempira random", 4700 "1.00 Honduran lempira random", 4701 "1.00 Honduran lempiras random", 4702 "1.00 Hong Kong Dollar random", 4703 "1.00 Hong Kong dollar random", 4704 "1.00 Hong Kong dollars random", 4705 "1.00 Hungarian Forint random", 4706 "1.00 Hungarian forint random", 4707 "1.00 Hungarian forints random", 4708 "1.00 Icelandic Kr\\u00f3na random", 4709 "1.00 Icelandic kr\\u00f3na random", 4710 "1.00 Icelandic kr\\u00f3nur random", 4711 "1.00 Indian Rupee random", 4712 "1.00 Indian rupee random", 4713 "1.00 Indian rupees random", 4714 "1.00 Indonesian Rupiah random", 4715 "1.00 Indonesian rupiah random", 4716 "1.00 Indonesian rupiahs random", 4717 "1.00 Iranian Rial random", 4718 "1.00 Iranian rial random", 4719 "1.00 Iranian rials random", 4720 "1.00 Iraqi Dinar random", 4721 "1.00 Iraqi dinar random", 4722 "1.00 Iraqi dinars random", 4723 "1.00 Irish Pound random", 4724 "1.00 Irish pound random", 4725 "1.00 Irish pounds random", 4726 "1.00 Israeli Pound random", 4727 "1.00 Israeli new sheqel random", 4728 "1.00 Israeli pound random", 4729 "1.00 Israeli pounds random", 4730 "1.00 Italian Lira random", 4731 "1.00 Italian lira random", 4732 "1.00 Italian liras random", 4733 "1.00 Jamaican Dollar random", 4734 "1.00 Jamaican dollar random", 4735 "1.00 Jamaican dollars random", 4736 "1.00 Japanese Yen random", 4737 "1.00 Japanese yen random", 4738 "1.00 Jordanian Dinar random", 4739 "1.00 Jordanian dinar random", 4740 "1.00 Jordanian dinars random", 4741 "1.00 Kazakhstan Tenge random", 4742 "1.00 Kazakhstan tenge random", 4743 "1.00 Kazakhstan tenges random", 4744 "1.00 Kenyan Shilling random", 4745 "1.00 Kenyan shilling random", 4746 "1.00 Kenyan shillings random", 4747 "1.00 Kuwaiti Dinar random", 4748 "1.00 Kuwaiti dinar random", 4749 "1.00 Kuwaiti dinars random", 4750 "1.00 Kyrgystani Som random", 4751 "1.00 Kyrgystani som random", 4752 "1.00 Kyrgystani soms random", 4753 "1.00 Laotian Kip random", 4754 "1.00 Laotian kip random", 4755 "1.00 Laotian kips random", 4756 "1.00 Latvian Lats random", 4757 "1.00 Latvian Ruble random", 4758 "1.00 Latvian lats random", 4759 "1.00 Latvian lati random", 4760 "1.00 Latvian ruble random", 4761 "1.00 Latvian rubles random", 4762 "1.00 Lebanese Pound random", 4763 "1.00 Lebanese pound random", 4764 "1.00 Lebanese pounds random", 4765 "1.00 Lesotho Loti random", 4766 "1.00 Lesotho loti random", 4767 "1.00 Lesotho lotis random", 4768 "1.00 Liberian Dollar random", 4769 "1.00 Liberian dollar random", 4770 "1.00 Liberian dollars random", 4771 "1.00 Libyan Dinar random", 4772 "1.00 Libyan dinar random", 4773 "1.00 Libyan dinars random", 4774 "1.00 Lithuanian Litas random", 4775 "1.00 Lithuanian Talonas random", 4776 "1.00 Lithuanian litas random", 4777 "1.00 Lithuanian litai random", 4778 "1.00 Lithuanian talonas random", 4779 "1.00 Lithuanian talonases random", 4780 "1.00 Luxembourgian Convertible Franc random", 4781 "1.00 Luxembourg Financial Franc random", 4782 "1.00 Luxembourgian Franc random", 4783 "1.00 Luxembourgian convertible franc random", 4784 "1.00 Luxembourgian convertible francs random", 4785 "1.00 Luxembourg financial franc random", 4786 "1.00 Luxembourg financial francs random", 4787 "1.00 Luxembourgian franc random", 4788 "1.00 Luxembourgian francs random", 4789 "1.00 Macanese Pataca random", 4790 "1.00 Macanese pataca random", 4791 "1.00 Macanese patacas random", 4792 "1.00 Macedonian Denar random", 4793 "1.00 Macedonian denar random", 4794 "1.00 Macedonian denari random", 4795 "1.00 Malagasy Ariaries random", 4796 "1.00 Malagasy Ariary random", 4797 "1.00 Malagasy Ariary random", 4798 "1.00 Malagasy Franc random", 4799 "1.00 Malagasy franc random", 4800 "1.00 Malagasy francs random", 4801 "1.00 Malawian Kwacha random", 4802 "1.00 Malawian Kwacha random", 4803 "1.00 Malawian Kwachas random", 4804 "1.00 Malaysian Ringgit random", 4805 "1.00 Malaysian ringgit random", 4806 "1.00 Malaysian ringgits random", 4807 "1.00 Maldivian Rufiyaa random", 4808 "1.00 Maldivian rufiyaa random", 4809 "1.00 Maldivian rufiyaas random", 4810 "1.00 Malian Franc random", 4811 "1.00 Malian franc random", 4812 "1.00 Malian francs random", 4813 "1.00 Maltese Lira random", 4814 "1.00 Maltese Pound random", 4815 "1.00 Maltese lira random", 4816 "1.00 Maltese liras random", 4817 "1.00 Maltese pound random", 4818 "1.00 Maltese pounds random", 4819 "1.00 Mauritanian Ouguiya random", 4820 "1.00 Mauritanian ouguiya random", 4821 "1.00 Mauritanian ouguiyas random", 4822 "1.00 Mauritian Rupee random", 4823 "1.00 Mauritian rupee random", 4824 "1.00 Mauritian rupees random", 4825 "1.00 Mexican Peso random", 4826 "1.00 Mexican Silver Peso (1861-1992) random", 4827 "1.00 Mexican Unidad de Inversion (UDI) random", 4828 "1.00 Mexican peso random", 4829 "1.00 Mexican pesos random", 4830 "1.00 Mexican silver peso (MXP) random", 4831 "1.00 Mexican silver pesos (MXP) random", 4832 "1.00 Mexican unidad de inversion (UDI) random", 4833 "1.00 Mexican unidads de inversion (UDI) random", 4834 "1.00 Moldovan Leu random", 4835 "1.00 Moldovan leu random", 4836 "1.00 Moldovan lei random", 4837 "1.00 Mongolian Tugrik random", 4838 "1.00 Mongolian tugrik random", 4839 "1.00 Mongolian tugriks random", 4840 "1.00 Moroccan Dirham random", 4841 "1.00 Moroccan Franc random", 4842 "1.00 Moroccan dirham random", 4843 "1.00 Moroccan dirhams random", 4844 "1.00 Moroccan franc random", 4845 "1.00 Moroccan francs random", 4846 "1.00 Mozambican Escudo random", 4847 "1.00 Mozambican Metical random", 4848 "1.00 Mozambican escudo random", 4849 "1.00 Mozambican escudos random", 4850 "1.00 Mozambican metical random", 4851 "1.00 Mozambican meticals random", 4852 "1.00 Myanma Kyat random", 4853 "1.00 Myanma kyat random", 4854 "1.00 Myanma kyats random", 4855 "1.00 Namibian Dollar random", 4856 "1.00 Namibian dollar random", 4857 "1.00 Namibian dollars random", 4858 "1.00 Nepalese Rupee random", 4859 "1.00 Nepalese rupee random", 4860 "1.00 Nepalese rupees random", 4861 "1.00 Netherlands Antillean Guilder random", 4862 "1.00 Netherlands Antillean guilder random", 4863 "1.00 Netherlands Antillean guilders random", 4864 "1.00 Dutch Guilder random", 4865 "1.00 Dutch guilder random", 4866 "1.00 Dutch guilders random", 4867 "1.00 Israeli New Sheqel random", 4868 "1.00 Israeli new sheqels random", 4869 "1.00 New Zealand Dollar random", 4870 "1.00 New Zealand dollar random", 4871 "1.00 New Zealand dollars random", 4872 "1.00 Nicaraguan Cordoba Oro random", 4873 "1.00 Nicaraguan Cordoba random", 4874 "1.00 Nicaraguan cordoba oro random", 4875 "1.00 Nicaraguan cordoba oros random", 4876 "1.00 Nicaraguan cordoba random", 4877 "1.00 Nicaraguan cordobas random", 4878 "1.00 Nigerian Naira random", 4879 "1.00 Nigerian naira random", 4880 "1.00 Nigerian nairas random", 4881 "1.00 North Korean Won random", 4882 "1.00 North Korean won random", 4883 "1.00 North Korean won random", 4884 "1.00 Norwegian Krone random", 4885 "1.00 Norwegian krone random", 4886 "1.00 Norwegian kroner random", 4887 "1.00 Old Mozambican Metical random", 4888 "1.00 Old Mozambican metical random", 4889 "1.00 Old Mozambican meticals random", 4890 "1.00 Old Romanian Lei random", 4891 "1.00 Old Romanian Leu random", 4892 "1.00 Old Romanian leu random", 4893 "1.00 Old Serbian Dinar random", 4894 "1.00 Old Serbian dinar random", 4895 "1.00 Old Serbian dinars random", 4896 "1.00 Old Sudanese Dinar random", 4897 "1.00 Old Sudanese Pound random", 4898 "1.00 Old Sudanese dinar random", 4899 "1.00 Old Sudanese dinars random", 4900 "1.00 Old Sudanese pound random", 4901 "1.00 Old Sudanese pounds random", 4902 "1.00 Old Turkish Lira random", 4903 "1.00 Old Turkish Lira random", 4904 "1.00 Omani Rial random", 4905 "1.00 Omani rial random", 4906 "1.00 Omani rials random", 4907 "1.00 Pakistani Rupee random", 4908 "1.00 Pakistani rupee random", 4909 "1.00 Pakistani rupees random", 4910 "1.00 Palladium random", 4911 "1.00 Palladium random", 4912 "1.00 Panamanian Balboa random", 4913 "1.00 Panamanian balboa random", 4914 "1.00 Panamanian balboas random", 4915 "1.00 Papua New Guinean Kina random", 4916 "1.00 Papua New Guinean kina random", 4917 "1.00 Papua New Guinean kina random", 4918 "1.00 Paraguayan Guarani random", 4919 "1.00 Paraguayan guarani random", 4920 "1.00 Paraguayan guaranis random", 4921 "1.00 Peruvian Inti random", 4922 "1.00 Peruvian Nuevo Sol random", 4923 "1.00 Peruvian Sol random", 4924 "1.00 Peruvian inti random", 4925 "1.00 Peruvian intis random", 4926 "1.00 Peruvian nuevo sol random", 4927 "1.00 Peruvian nuevos soles random", 4928 "1.00 Peruvian sol random", 4929 "1.00 Peruvian soles random", 4930 "1.00 Philippine Peso random", 4931 "1.00 Philippine peso random", 4932 "1.00 Philippine pesos random", 4933 "1.00 Platinum random", 4934 "1.00 Platinum random", 4935 "1.00 Polish Zloty (1950-1995) random", 4936 "1.00 Polish Zloty random", 4937 "1.00 Polish zlotys random", 4938 "1.00 Polish zloty (PLZ) random", 4939 "1.00 Polish zloty random", 4940 "1.00 Polish zlotys (PLZ) random", 4941 "1.00 Portuguese Escudo random", 4942 "1.00 Portuguese Guinea Escudo random", 4943 "1.00 Portuguese Guinea escudo random", 4944 "1.00 Portuguese Guinea escudos random", 4945 "1.00 Portuguese escudo random", 4946 "1.00 Portuguese escudos random", 4947 "1.00 Qatari Rial random", 4948 "1.00 Qatari rial random", 4949 "1.00 Qatari rials random", 4950 "1.00 RINET Funds random", 4951 "1.00 RINET Funds random", 4952 "1.00 Rhodesian Dollar random", 4953 "1.00 Rhodesian dollar random", 4954 "1.00 Rhodesian dollars random", 4955 "1.00 Romanian Leu random", 4956 "1.00 Romanian lei random", 4957 "1.00 Romanian leu random", 4958 "1.00 Russian Ruble (1991-1998) random", 4959 "1.00 Russian Ruble random", 4960 "1.00 Russian ruble (RUR) random", 4961 "1.00 Russian ruble random", 4962 "1.00 Russian rubles (RUR) random", 4963 "1.00 Russian rubles random", 4964 "1.00 Rwandan Franc random", 4965 "1.00 Rwandan franc random", 4966 "1.00 Rwandan francs random", 4967 "1.00 Saint Helena Pound random", 4968 "1.00 Saint Helena pound random", 4969 "1.00 Saint Helena pounds random", 4970 "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobra random", 4971 "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobra random", 4972 "1.00 S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe dobras random", 4973 "1.00 Saudi Riyal random", 4974 "1.00 Saudi riyal random", 4975 "1.00 Saudi riyals random", 4976 "1.00 Serbian Dinar random", 4977 "1.00 Serbian dinar random", 4978 "1.00 Serbian dinars random", 4979 "1.00 Seychellois Rupee random", 4980 "1.00 Seychellois rupee random", 4981 "1.00 Seychellois rupees random", 4982 "1.00 Sierra Leonean Leone random", 4983 "1.00 Sierra Leonean leone random", 4984 "1.00 Sierra Leonean leones random", 4985 "1.00 Singapore Dollar random", 4986 "1.00 Singapore dollar random", 4987 "1.00 Singapore dollars random", 4988 "1.00 Slovak Koruna random", 4989 "1.00 Slovak koruna random", 4990 "1.00 Slovak korunas random", 4991 "1.00 Slovenian Tolar random", 4992 "1.00 Slovenian tolar random", 4993 "1.00 Slovenian tolars random", 4994 "1.00 Solomon Islands Dollar random", 4995 "1.00 Solomon Islands dollar random", 4996 "1.00 Solomon Islands dollars random", 4997 "1.00 Somali Shilling random", 4998 "1.00 Somali shilling random", 4999 "1.00 Somali shillings random", 5000 "1.00 South African Rand (financial) random", 5001 "1.00 South African Rand random", 5002 "1.00 South African rand (financial) random", 5003 "1.00 South African rand random", 5004 "1.00 South African rands (financial) random", 5005 "1.00 South African rand random", 5006 "1.00 South Korean Won random", 5007 "1.00 South Korean won random", 5008 "1.00 South Korean won random", 5009 "1.00 Soviet Rouble random", 5010 "1.00 Soviet rouble random", 5011 "1.00 Soviet roubles random", 5012 "1.00 Spanish Peseta (A account) random", 5013 "1.00 Spanish Peseta (convertible account) random", 5014 "1.00 Spanish Peseta random", 5015 "1.00 Spanish peseta (A account) random", 5016 "1.00 Spanish peseta (convertible account) random", 5017 "1.00 Spanish peseta random", 5018 "1.00 Spanish pesetas (A account) random", 5019 "1.00 Spanish pesetas (convertible account) random", 5020 "1.00 Spanish pesetas random", 5021 "1.00 Special Drawing Rights random", 5022 "1.00 Sri Lanka Rupee random", 5023 "1.00 Sri Lanka rupee random", 5024 "1.00 Sri Lanka rupees random", 5025 "1.00 Sudanese Pound random", 5026 "1.00 Sudanese pound random", 5027 "1.00 Sudanese pounds random", 5028 "1.00 Surinamese Dollar random", 5029 "1.00 Surinamese dollar random", 5030 "1.00 Surinamese dollars random", 5031 "1.00 Suriname Guilder random", 5032 "1.00 Suriname guilder random", 5033 "1.00 Suriname guilders random", 5034 "1.00 Swazi Lilangeni random", 5035 "1.00 Swazi lilangeni random", 5036 "1.00 Swazi emalangeni random", 5037 "1.00 Swedish Krona random", 5038 "1.00 Swedish krona random", 5039 "1.00 Swedish kronor random", 5040 "1.00 Swiss Franc random", 5041 "1.00 Swiss franc random", 5042 "1.00 Swiss francs random", 5043 "1.00 Syrian Pound random", 5044 "1.00 Syrian pound random", 5045 "1.00 Syrian pounds random", 5046 "1.00 New Taiwan Dollar random", 5047 "1.00 New Taiwan dollar random", 5048 "1.00 New Taiwan dollars random", 5049 "1.00 Tajikistani Ruble random", 5050 "1.00 Tajikistani Somoni random", 5051 "1.00 Tajikistani ruble random", 5052 "1.00 Tajikistani rubles random", 5053 "1.00 Tajikistani somoni random", 5054 "1.00 Tajikistani somonis random", 5055 "1.00 Tanzanian Shilling random", 5056 "1.00 Tanzanian shilling random", 5057 "1.00 Tanzanian shillings random", 5058 "1.00 Testing Currency Code random", 5059 "1.00 Testing Currency Code random", 5060 "1.00 Thai Baht random", 5061 "1.00 Thai baht random", 5062 "1.00 Thai baht random", 5063 "1.00 Timorese Escudo random", 5064 "1.00 Timorese escudo random", 5065 "1.00 Timorese escudos random", 5066 "1.00 Trinidad and Tobago Dollar random", 5067 "1.00 Trinidad and Tobago dollar random", 5068 "1.00 Trinidad and Tobago dollars random", 5069 "1.00 Tunisian Dinar random", 5070 "1.00 Tunisian dinar random", 5071 "1.00 Tunisian dinars random", 5072 "1.00 Turkish Lira random", 5073 "1.00 Turkish Lira random", 5074 "1.00 Turkish lira random", 5075 "1.00 Turkmenistani Manat random", 5076 "1.00 Turkmenistani manat random", 5077 "1.00 Turkmenistani manat random", 5078 "1.00 US Dollar (Next day) random", 5079 "1.00 US Dollar (Same day) random", 5080 "1.00 US Dollar random", 5081 "1.00 US dollar (next day) random", 5082 "1.00 US dollar (same day) random", 5083 "1.00 US dollar random", 5084 "1.00 US dollars (next day) random", 5085 "1.00 US dollars (same day) random", 5086 "1.00 US dollars random", 5087 "1.00 Ugandan Shilling (1966-1987) random", 5088 "1.00 Ugandan Shilling random", 5089 "1.00 Ugandan shilling (UGS) random", 5090 "1.00 Ugandan shilling random", 5091 "1.00 Ugandan shillings (UGS) random", 5092 "1.00 Ugandan shillings random", 5093 "1.00 Ukrainian Hryvnia random", 5094 "1.00 Ukrainian Karbovanets random", 5095 "1.00 Ukrainian hryvnia random", 5096 "1.00 Ukrainian hryvnias random", 5097 "1.00 Ukrainian karbovanets random", 5098 "1.00 Ukrainian karbovantsiv random", 5099 "1.00 Unidad de Valor Real random", 5100 "1.00 United Arab Emirates Dirham random", 5101 "1.00 Unknown or Invalid Currency random", 5102 "1.00 Uruguayan Peso (1975-1993) random", 5103 "1.00 Uruguayan Peso random", 5104 "1.00 Uruguayan Peso en Unidades Indexadas random", 5105 "1.00 Uruguayan peso (UYP) random", 5106 "1.00 Uruguayan peso en unidades indexadas random", 5107 "1.00 Uruguayan peso random", 5108 "1.00 Uruguayan pesos (UYP) random", 5109 "1.00 Uruguayan pesos en unidades indexadas random", 5110 "1.00 Uzbekistan Som random", 5111 "1.00 Uzbekistan som random", 5112 "1.00 Uzbekistan som random", 5113 "1.00 Vanuatu Vatu random", 5114 "1.00 Vanuatu vatu random", 5115 "1.00 Vanuatu vatus random", 5116 "1.00 Venezuelan Bol\\u00edvar Fuerte random", 5117 "1.00 Venezuelan Bol\\u00edvar random", 5118 "1.00 Venezuelan bol\\u00edvar fuerte random", 5119 "1.00 Venezuelan bol\\u00edvars fuertes random", 5120 "1.00 Venezuelan bol\\u00edvar random", 5121 "1.00 Venezuelan bol\\u00edvars random", 5122 "1.00 Vietnamese Dong random", 5123 "1.00 Vietnamese dong random", 5124 "1.00 Vietnamese dong random", 5125 "1.00 WIR Euro random", 5126 "1.00 WIR Franc random", 5127 "1.00 WIR euro random", 5128 "1.00 WIR euros random", 5129 "1.00 WIR franc random", 5130 "1.00 WIR francs random", 5131 "1.00 Samoan Tala random", 5132 "1.00 Samoan tala random", 5133 "1.00 Samoan tala random", 5134 "1.00 Yemeni Dinar random", 5135 "1.00 Yemeni Rial random", 5136 "1.00 Yemeni dinar random", 5137 "1.00 Yemeni dinars random", 5138 "1.00 Yemeni rial random", 5139 "1.00 Yemeni rials random", 5140 "1.00 Yugoslavian Convertible Dinar random", 5141 "1.00 Yugoslavian Hard Dinar random", 5142 "1.00 Yugoslavian Noviy Dinar random", 5143 "1.00 Yugoslavian Noviy dinars random", 5144 "1.00 Yugoslavian convertible dinar random", 5145 "1.00 Yugoslavian convertible dinars random", 5146 "1.00 Yugoslavian hard dinar random", 5147 "1.00 Yugoslavian hard dinars random", 5148 "1.00 Yugoslavian noviy dinar random", 5149 "1.00 Zairean New Zaire random", 5150 "1.00 Zairean Zaire random", 5151 "1.00 Zairean new zaire random", 5152 "1.00 Zairean new zaires random", 5153 "1.00 Zairean zaire random", 5154 "1.00 Zairean zaires random", 5155 "1.00 Zambian Kwacha random", 5156 "1.00 Zambian kwacha random", 5157 "1.00 Zambian kwachas random", 5158 "1.00 Zimbabwean Dollar random", 5159 "1.00 Zimbabwean dollar random", 5160 "1.00 Zimbabwean dollars random", 5161 "1.00 euro random", 5162 "1.00 euros random", 5163 "1.00 old Turkish lira random", 5164 "1.00 special drawing rights random", 5165 "1.00 unidad de valor real random", 5166 "1.00 unidad de valor reals random", 5167 "1.00 unknown/invalid currency random", 5168 }; 5169 5170 const char* WRONG_DATA[] = { 5171 // Following are missing one last char in the currency name 5172 "usd1.00", // case sensitive 5173 "1.00 Nicaraguan Cordob", 5174 "1.00 Namibian Dolla", 5175 "1.00 Namibian dolla", 5176 "1.00 Nepalese Rupe", 5177 "1.00 Nepalese rupe", 5178 "1.00 Netherlands Antillean Guilde", 5179 "1.00 Netherlands Antillean guilde", 5180 "1.00 Dutch Guilde", 5181 "1.00 Dutch guilde", 5182 "1.00 Israeli New Sheqe", 5183 "1.00 New Zealand Dolla", 5184 "1.00 New Zealand dolla", 5185 "1.00 Nicaraguan cordob", 5186 "1.00 Nigerian Nair", 5187 "1.00 Nigerian nair", 5188 "1.00 North Korean Wo", 5189 "1.00 North Korean wo", 5190 "1.00 Norwegian Kron", 5191 "1.00 Norwegian kron", 5192 "1.00 US dolla", 5193 "1.00", 5194 "A1.00", 5195 "AD1.00", 5196 "AE1.00", 5197 "AF1.00", 5198 "AL1.00", 5199 "AM1.00", 5200 "AN1.00", 5201 "AO1.00", 5202 "AR1.00", 5203 "AT1.00", 5204 "AU1.00", 5205 "AW1.00", 5206 "AZ1.00", 5207 "Afghan Afghan1.00", 5208 "Afghan Afghani (1927-20021.00", 5209 "Afl1.00", 5210 "Albanian Le1.00", 5211 "Algerian Dina1.00", 5212 "Andorran Peset1.00", 5213 "Angolan Kwanz1.00", 5214 "Angolan Kwanza (1977-19901.00", 5215 "Angolan Kwanza Reajustado (1995-19991.00", 5216 "Angolan New Kwanza (1990-20001.00", 5217 "Argentine Austra1.00", 5218 "Argentine Pes1.00", 5219 "Argentine Peso (1983-19851.00", 5220 "Armenian Dra1.00", 5221 "Aruban Flori1.00", 5222 "Australian Dolla1.00", 5223 "Austrian Schillin1.00", 5224 "Azerbaijani Mana1.00", 5225 "Azerbaijani Manat (1993-20061.00", 5226 "B1.00", 5227 "BA1.00", 5228 "BB1.00", 5229 "BE1.00", 5230 "BG1.00", 5231 "BH1.00", 5232 "BI1.00", 5233 "BM1.00", 5234 "BN1.00", 5235 "BO1.00", 5236 "BR1.00", 5237 "BS1.00", 5238 "BT1.00", 5239 "BU1.00", 5240 "BW1.00", 5241 "BY1.00", 5242 "BZ1.00", 5243 "Bahamian Dolla1.00", 5244 "Bahraini Dina1.00", 5245 "Bangladeshi Tak1.00", 5246 "Barbadian Dolla1.00", 5247 "Bds1.00", 5248 "Belarusian New Ruble (1994-19991.00", 5249 "Belarusian Rubl1.00", 5250 "Belgian Fran1.00", 5251 "Belgian Franc (convertible1.00", 5252 "Belgian Franc (financial1.00", 5253 "Belize Dolla1.00", 5254 "Bermudan Dolla1.00", 5255 "Bhutanese Ngultru1.00", 5256 "Bolivian Mvdo1.00", 5257 "Bolivian Pes1.00", 5258 "Bolivian Bolivian1.00", 5259 "Bosnia-Herzegovina Convertible Mar1.00", 5260 "Bosnia-Herzegovina Dina1.00", 5261 "Botswanan Pul1.00", 5262 "Brazilian Cruzad1.00", 5263 "Brazilian Cruzado Nov1.00", 5264 "Brazilian Cruzeir1.00", 5265 "Brazilian Cruzeiro (1990-19931.00", 5266 "Brazilian Cruzeiro Novo (1967-19861.00", 5267 "Brazilian Rea1.00", 5268 "British Pound Sterlin1.00", 5269 "Brunei Dolla1.00", 5270 "Bulgarian Hard Le1.00", 5271 "Bulgarian Le1.00", 5272 "Burmese Kya1.00", 5273 "Burundian Fran1.00", 5274 "C1.00", 5275 "CA1.00", 5276 "CD1.00", 5277 "CFA Franc BCEA1.00", 5278 "CFA Franc BEA1.00", 5279 "CFP Fran1.00", 5280 "CFP1.00", 5281 "CH1.00", 5282 "CL1.00", 5283 "CN1.00", 5284 "CO1.00", 5285 "CS1.00", 5286 "CU1.00", 5287 "CV1.00", 5288 "CY1.00", 5289 "CZ1.00", 5290 "Cambodian Rie1.00", 5291 "Canadian Dolla1.00", 5292 "Cape Verdean Escud1.00", 5293 "Cayman Islands Dolla1.00", 5294 "Chilean Pes1.00", 5295 "Chilean Unidades de Foment1.00", 5296 "Chinese Yuan Renminb1.00", 5297 "Colombian Pes1.00", 5298 "Comoro Fran1.00", 5299 "Congolese Fran1.00", 5300 "Costa Rican Col\\u00f31.00", 5301 "Croatian Dina1.00", 5302 "Croatian Kun1.00", 5303 "Cuban Pes1.00", 5304 "Cypriot Poun1.00", 5305 "Czech Republic Korun1.00", 5306 "Czechoslovak Hard Korun1.00", 5307 "D1.00", 5308 "DD1.00", 5309 "DE1.00", 5310 "DJ1.00", 5311 "DK1.00", 5312 "DO1.00", 5313 "DZ1.00", 5314 "Danish Kron1.00", 5315 "German Mar1.00", 5316 "Djiboutian Fran1.00", 5317 "Dk1.00", 5318 "Dominican Pes1.00", 5319 "EC1.00", 5320 "EE1.00", 5321 "EG1.00", 5322 "EQ1.00", 5323 "ER1.00", 5324 "ES1.00", 5325 "ET1.00", 5326 "EU1.00", 5327 "East Caribbean Dolla1.00", 5328 "East German Ostmar1.00", 5329 "Ecuadorian Sucr1.00", 5330 "Ecuadorian Unidad de Valor Constante (UVC1.00", 5331 "Egyptian Poun1.00", 5332 "Ekwel1.00", 5333 "Salvadoran Col\\u00f31.00", 5334 "Equatorial Guinean Ekwel1.00", 5335 "Eritrean Nakf1.00", 5336 "Es1.00", 5337 "Estonian Kroo1.00", 5338 "Ethiopian Bir1.00", 5339 "Eur1.00", 5340 "European Composite Uni1.00", 5341 "European Currency Uni1.00", 5342 "European Monetary Uni1.00", 5343 "European Unit of Account (XBC1.00", 5344 "European Unit of Account (XBD1.00", 5345 "F1.00", 5346 "FB1.00", 5347 "FI1.00", 5348 "FJ1.00", 5349 "FK1.00", 5350 "FR1.00", 5351 "Falkland Islands Poun1.00", 5352 "Fd1.00", 5353 "Fijian Dolla1.00", 5354 "Finnish Markk1.00", 5355 "Fr1.00", 5356 "French Fran1.00", 5357 "French Gold Fran1.00", 5358 "French UIC-Fran1.00", 5359 "G1.00", 5360 "GB1.00", 5361 "GE1.00", 5362 "GH1.00", 5363 "GI1.00", 5364 "GM1.00", 5365 "GN1.00", 5366 "GQ1.00", 5367 "GR1.00", 5368 "GT1.00", 5369 "GW1.00", 5370 "GY1.00", 5371 "Gambian Dalas1.00", 5372 "Georgian Kupon Lari1.00", 5373 "Georgian Lar1.00", 5374 "Ghanaian Ced1.00", 5375 "Ghanaian Cedi (1979-20071.00", 5376 "Gibraltar Poun1.00", 5377 "Gol1.00", 5378 "Greek Drachm1.00", 5379 "Guatemalan Quetza1.00", 5380 "Guinean Fran1.00", 5381 "Guinean Syl1.00", 5382 "Guinea-Bissau Pes1.00", 5383 "Guyanaese Dolla1.00", 5384 "HK1.00", 5385 "HN1.00", 5386 "HR1.00", 5387 "HT1.00", 5388 "HU1.00", 5389 "Haitian Gourd1.00", 5390 "Honduran Lempir1.00", 5391 "Hong Kong Dolla1.00", 5392 "Hungarian Forin1.00", 5393 "I1.00", 5394 "IE1.00", 5395 "IL1.00", 5396 "IN1.00", 5397 "IQ1.00", 5398 "IR1.00", 5399 "IS1.00", 5400 "IT1.00", 5401 "Icelandic Kron1.00", 5402 "Indian Rupe1.00", 5403 "Indonesian Rupia1.00", 5404 "Iranian Ria1.00", 5405 "Iraqi Dina1.00", 5406 "Irish Poun1.00", 5407 "Israeli Poun1.00", 5408 "Italian Lir1.00", 5409 "J1.00", 5410 "JM1.00", 5411 "JO1.00", 5412 "JP1.00", 5413 "Jamaican Dolla1.00", 5414 "Japanese Ye1.00", 5415 "Jordanian Dina1.00", 5416 "K S1.00", 5417 "K1.00", 5418 "KE1.00", 5419 "KG1.00", 5420 "KH1.00", 5421 "KP1.00", 5422 "KR1.00", 5423 "KW1.00", 5424 "KY1.00", 5425 "KZ1.00", 5426 "Kazakhstan Teng1.00", 5427 "Kenyan Shillin1.00", 5428 "Kuwaiti Dina1.00", 5429 "Kyrgystani So1.00", 5430 "LA1.00", 5431 "LB1.00", 5432 "LK1.00", 5433 "LR1.00", 5434 "LT1.00", 5435 "LU1.00", 5436 "LV1.00", 5437 "LY1.00", 5438 "Laotian Ki1.00", 5439 "Latvian Lat1.00", 5440 "Latvian Rubl1.00", 5441 "Lebanese Poun1.00", 5442 "Lesotho Lot1.00", 5443 "Liberian Dolla1.00", 5444 "Libyan Dina1.00", 5445 "Lithuanian Lit1.00", 5446 "Lithuanian Talona1.00", 5447 "Luxembourgian Convertible Fran1.00", 5448 "Luxembourg Financial Fran1.00", 5449 "Luxembourgian Fran1.00", 5450 "MA1.00", 5451 "MD1.00", 5452 "MDe1.00", 5453 "MEX1.00", 5454 "MG1.00", 5455 "ML1.00", 5456 "MM1.00", 5457 "MN1.00", 5458 "MO1.00", 5459 "MR1.00", 5460 "MT1.00", 5461 "MU1.00", 5462 "MV1.00", 5463 "MW1.00", 5464 "MX1.00", 5465 "MY1.00", 5466 "MZ1.00", 5467 "Macanese Patac1.00", 5468 "Macedonian Dena1.00", 5469 "Malagasy Ariar1.00", 5470 "Malagasy Fran1.00", 5471 "Malawian Kwach1.00", 5472 "Malaysian Ringgi1.00", 5473 "Maldivian Rufiya1.00", 5474 "Malian Fran1.00", 5475 "Malot1.00", 5476 "Maltese Lir1.00", 5477 "Maltese Poun1.00", 5478 "Mauritanian Ouguiy1.00", 5479 "Mauritian Rupe1.00", 5480 "Mexican Pes1.00", 5481 "Mexican Silver Peso (1861-19921.00", 5482 "Mexican Unidad de Inversion (UDI1.00", 5483 "Moldovan Le1.00", 5484 "Mongolian Tugri1.00", 5485 "Moroccan Dirha1.00", 5486 "Moroccan Fran1.00", 5487 "Mozambican Escud1.00", 5488 "Mozambican Metica1.00", 5489 "Myanma Kya1.00", 5490 "N1.00", 5491 "NA1.00", 5492 "NAf1.00", 5493 "NG1.00", 5494 "NI1.00", 5495 "NK1.00", 5496 "NL1.00", 5497 "NO1.00", 5498 "NP1.00", 5499 "NT1.00", 5500 "Namibian Dolla1.00", 5501 "Nepalese Rupe1.00", 5502 "Netherlands Antillean Guilde1.00", 5503 "Dutch Guilde1.00", 5504 "Israeli New Sheqe1.00", 5505 "New Zealand Dolla1.00", 5506 "Nicaraguan Cordob1.00", 5507 "Nicaraguan Cordoba Or1.00", 5508 "Nigerian Nair1.00", 5509 "North Korean Wo1.00", 5510 "Norwegian Kron1.00", 5511 "Nr1.00", 5512 "OM1.00", 5513 "Old Mozambican Metica1.00", 5514 "Old Romanian Le1.00", 5515 "Old Serbian Dina1.00", 5516 "Old Sudanese Dina1.00", 5517 "Old Sudanese Poun1.00", 5518 "Old Turkish Lir1.00", 5519 "Omani Ria1.00", 5520 "PA1.00", 5521 "PE1.00", 5522 "PG1.00", 5523 "PH1.00", 5524 "PK1.00", 5525 "PL1.00", 5526 "PT1.00", 5527 "PY1.00", 5528 "Pakistani Rupe1.00", 5529 "Palladiu1.00", 5530 "Panamanian Balbo1.00", 5531 "Papua New Guinean Kin1.00", 5532 "Paraguayan Guaran1.00", 5533 "Peruvian Int1.00", 5534 "Peruvian So1.00", 5535 "Peruvian Sol Nuev1.00", 5536 "Philippine Pes1.00", 5537 "Platinu1.00", 5538 "Polish Zlot1.00", 5539 "Polish Zloty (1950-19951.00", 5540 "Portuguese Escud1.00", 5541 "Portuguese Guinea Escud1.00", 5542 "Pr1.00", 5543 "QA1.00", 5544 "Qatari Ria1.00", 5545 "RD1.00", 5546 "RH1.00", 5547 "RINET Fund1.00", 5548 "RS1.00", 5549 "RU1.00", 5550 "RW1.00", 5551 "Rb1.00", 5552 "Rhodesian Dolla1.00", 5553 "Romanian Le1.00", 5554 "Russian Rubl1.00", 5555 "Russian Ruble (1991-19981.00", 5556 "Rwandan Fran1.00", 5557 "S1.00", 5558 "SA1.00", 5559 "SB1.00", 5560 "SC1.00", 5561 "SD1.00", 5562 "SE1.00", 5563 "SG1.00", 5564 "SH1.00", 5565 "SI1.00", 5566 "SK1.00", 5567 "SL R1.00", 5568 "SL1.00", 5569 "SO1.00", 5570 "ST1.00", 5571 "SU1.00", 5572 "SV1.00", 5573 "SY1.00", 5574 "SZ1.00", 5575 "Saint Helena Poun1.00", 5576 "S\\u00e3o Tom\\u00e9 and Pr\\u00edncipe Dobr1.00", 5577 "Saudi Riya1.00", 5578 "Serbian Dina1.00", 5579 "Seychellois Rupe1.00", 5580 "Sh1.00", 5581 "Sierra Leonean Leon1.00", 5582 "Silve1.00", 5583 "Singapore Dolla1.00", 5584 "Slovak Korun1.00", 5585 "Slovenian Tola1.00", 5586 "Solomon Islands Dolla1.00", 5587 "Somali Shillin1.00", 5588 "South African Ran1.00", 5589 "South African Rand (financial1.00", 5590 "South Korean Wo1.00", 5591 "Soviet Roubl1.00", 5592 "Spanish Peset1.00", 5593 "Spanish Peseta (A account1.00", 5594 "Spanish Peseta (convertible account1.00", 5595 "Special Drawing Right1.00", 5596 "Sri Lanka Rupe1.00", 5597 "Sudanese Poun1.00", 5598 "Surinamese Dolla1.00", 5599 "Suriname Guilde1.00", 5600 "Swazi Lilangen1.00", 5601 "Swedish Kron1.00", 5602 "Swiss Fran1.00", 5603 "Syrian Poun1.00", 5604 "T S1.00", 5605 "TH1.00", 5606 "TJ1.00", 5607 "TM1.00", 5608 "TN1.00", 5609 "TO1.00", 5610 "TP1.00", 5611 "TR1.00", 5612 "TT1.00", 5613 "TW1.00", 5614 "TZ1.00", 5615 "New Taiwan Dolla1.00", 5616 "Tajikistani Rubl1.00", 5617 "Tajikistani Somon1.00", 5618 "Tanzanian Shillin1.00", 5619 "Testing Currency Cod1.00", 5620 "Thai Bah1.00", 5621 "Timorese Escud1.00", 5622 "Tongan Pa\\u20bbang1.00", 5623 "Trinidad and Tobago Dolla1.00", 5624 "Tunisian Dina1.00", 5625 "Turkish Lir1.00", 5626 "Turkmenistani Mana1.00", 5627 "U S1.00", 5628 "U1.00", 5629 "UA1.00", 5630 "UG1.00", 5631 "US Dolla1.00", 5632 "US Dollar (Next day1.00", 5633 "US Dollar (Same day1.00", 5634 "US1.00", 5635 "UY1.00", 5636 "UZ1.00", 5637 "Ugandan Shillin1.00", 5638 "Ugandan Shilling (1966-19871.00", 5639 "Ukrainian Hryvni1.00", 5640 "Ukrainian Karbovanet1.00", 5641 "Unidad de Valor Rea1.00", 5642 "United Arab Emirates Dirha1.00", 5643 "Unknown or Invalid Currenc1.00", 5644 "Ur1.00", 5645 "Uruguay Peso (1975-19931.00", 5646 "Uruguay Peso Uruguay1.00", 5647 "Uruguay Peso en Unidades Indexada1.00", 5648 "Uzbekistan So1.00", 5649 "V1.00", 5650 "VE1.00", 5651 "VN1.00", 5652 "VU1.00", 5653 "Vanuatu Vat1.00", 5654 "Venezuelan Bol\\u00edva1.00", 5655 "Venezuelan Bol\\u00edvar Fuert1.00", 5656 "Vietnamese Don1.00", 5657 "WIR Eur1.00", 5658 "WIR Fran1.00", 5659 "WS1.00", 5660 "Samoa Tal1.00", 5661 "XA1.00", 5662 "XB1.00", 5663 "XC1.00", 5664 "XD1.00", 5665 "XE1.00", 5666 "XF1.00", 5667 "XO1.00", 5668 "XP1.00", 5669 "XR1.00", 5670 "XT1.00", 5671 "XX1.00", 5672 "YD1.00", 5673 "YE1.00", 5674 "YU1.00", 5675 "Yemeni Dina1.00", 5676 "Yemeni Ria1.00", 5677 "Yugoslavian Convertible Dina1.00", 5678 "Yugoslavian Hard Dina1.00", 5679 "Yugoslavian Noviy Dina1.00", 5680 "Z1.00", 5681 "ZA1.00", 5682 "ZM1.00", 5683 "ZR1.00", 5684 "ZW1.00", 5685 "Zairean New Zair1.00", 5686 "Zairean Zair1.00", 5687 "Zambian Kwach1.00", 5688 "Zimbabwean Dolla1.00", 5689 "dra1.00", 5690 "lar1.00", 5691 "le1.00", 5692 "man1.00", 5693 "so1.00", 5694 }; 5695 5696 Locale locale("en_US"); 5697 for (uint32_t i=0; i<sizeof(DATA)/sizeof(DATA[0]); ++i) { 5698 UnicodeString formatted = ctou(DATA[i]); 5699 UErrorCode status = U_ZERO_ERROR; 5700 NumberFormat* numFmt = NumberFormat::createInstance(locale, NumberFormat::kCurrencyStyle, status); 5701 Formattable parseResult; 5702 numFmt->parse(formatted, parseResult, status); 5703 if (U_FAILURE(status) || 5704 (parseResult.getType() == Formattable::kDouble && 5705 parseResult.getDouble() != 1.0)) { 5706 errln("wrong parsing, " + formatted); 5707 errln("data: " + formatted); 5708 } 5709 delete numFmt; 5710 } 5711 5712 for (uint32_t i=0; i<sizeof(WRONG_DATA)/sizeof(WRONG_DATA[0]); ++i) { 5713 UnicodeString formatted = ctou(WRONG_DATA[i]); 5714 UErrorCode status = U_ZERO_ERROR; 5715 NumberFormat* numFmt = NumberFormat::createInstance(locale, NumberFormat::kCurrencyStyle, status); 5716 Formattable parseResult; 5717 numFmt->parse(formatted, parseResult, status); 5718 if (!U_FAILURE(status) || 5719 (parseResult.getType() == Formattable::kDouble && 5720 parseResult.getDouble() == 1.0)) { 5721 errln("parsed but should not be: " + formatted); 5722 errln("data: " + formatted); 5723 } 5724 delete numFmt; 5725 } 5726} 5727 5728#endif /* #if !UCONFIG_NO_FORMATTING */ 5729