numfmtst.cpp revision 64339d36f8bd4db5025fe2988eda22b491a9219c
164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// Copyright (C) 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * COPYRIGHT: 58de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert * Copyright (c) 1997-2016, International Business Machines Corporation and 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Modification History: 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/15/99 helena Ported to HPUX 10/11 CC. 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "numfmtst.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 20b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/localpointer.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucurr.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/measfmt.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/curramt.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "digitlst.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "textfile.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tokiter.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "charstr.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "putilimp.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "winnmtst.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <float.h> 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 33b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <stdlib.h> 348de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert#include "cmemory.h" 35b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cstring.h" 3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/numsys.h" 3754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#include "fmtableimp.h" 38c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "numberformattesttuple.h" 39c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "datadrivennumberformattestsuite.h" 40c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert#include "unicode/msgfmt.h" 41c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 42c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertclass NumberFormatTestDataDriven : public DataDrivenNumberFormatTestSuite { 43c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertprotected: 44c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool isFormatPass( 45c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 46c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 47c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status); 48c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool isToPatternPass( 49c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 50c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 51c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status); 52c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool isParsePass( 53c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 54c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 55c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status); 56c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool isParseCurrencyPass( 57c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 58c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 59c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status); 60c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert}; 61c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 62c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic DigitList &strToDigitList( 63c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UnicodeString &str, 64c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DigitList &digitList, 65c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 66c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 67c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return digitList; 68c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 69c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (str == "NaN") { 70c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert digitList.set(uprv_getNaN()); 71c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return digitList; 72c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 73c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (str == "-Inf") { 74c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert digitList.set(-1*uprv_getInfinity()); 75c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return digitList; 76c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 77c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (str == "Inf") { 78c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert digitList.set(uprv_getInfinity()); 79c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return digitList; 80c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 81c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert CharString formatValue; 82c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert formatValue.appendInvariantChars(str, status); 83c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert digitList.set(StringPiece(formatValue.data()), status, 0); 84c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return digitList; 85c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 86c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 87c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic UnicodeString &format( 88c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const DecimalFormat &fmt, 89c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const DigitList &digitList, 90c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendTo, 91c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 92c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 93c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return appendTo; 94c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 95c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition fpos(FieldPosition::DONT_CARE); 96c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return fmt.format(digitList, appendTo, fpos, status); 97c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 98c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 99c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Rouberttemplate<class T> 100c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic UnicodeString &format( 101c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const DecimalFormat &fmt, 102c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert T value, 103c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendTo, 104c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 105c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 106c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return appendTo; 107c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 108c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition fpos(FieldPosition::DONT_CARE); 109c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return fmt.format(value, appendTo, fpos, status); 110c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 111c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 112c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic void adjustDecimalFormat( 113c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 114c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat &fmt, 115c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage) { 116c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.minIntegerDigitsFlag) { 117c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMinimumIntegerDigits(tuple.minIntegerDigits); 118c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 119c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.maxIntegerDigitsFlag) { 120c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMaximumIntegerDigits(tuple.maxIntegerDigits); 121c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 122c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.minFractionDigitsFlag) { 123c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMinimumFractionDigits(tuple.minFractionDigits); 124c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 125c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.maxFractionDigitsFlag) { 126c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMaximumFractionDigits(tuple.maxFractionDigits); 127c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 128c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.currencyFlag) { 129c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 130c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString currency(tuple.currency); 131c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UChar *terminatedCurrency = currency.getTerminatedBuffer(); 132c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setCurrency(terminatedCurrency, status); 133c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 134c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error setting currency."); 135c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 136c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 137c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.minGroupingDigitsFlag) { 138c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMinimumGroupingDigits(tuple.minGroupingDigits); 139c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 140c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.useSigDigitsFlag) { 141c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setSignificantDigitsUsed(tuple.useSigDigits != 0); 142c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 143c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.minSigDigitsFlag) { 144c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMinimumSignificantDigits(tuple.minSigDigits); 145c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 146c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.maxSigDigitsFlag) { 147c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMaximumSignificantDigits(tuple.maxSigDigits); 148c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 149c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.useGroupingFlag) { 150c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setGroupingUsed(tuple.useGrouping != 0); 151c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 152c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.multiplierFlag) { 153c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMultiplier(tuple.multiplier); 154c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 155c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.roundingIncrementFlag) { 156c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setRoundingIncrement(tuple.roundingIncrement); 157c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 158c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.formatWidthFlag) { 159c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setFormatWidth(tuple.formatWidth); 160c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 161c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.padCharacterFlag) { 162c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPadCharacter(tuple.padCharacter); 163c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 164c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.useScientificFlag) { 165c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setScientificNotation(tuple.useScientific != 0); 166c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 167c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.groupingFlag) { 168c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setGroupingSize(tuple.grouping); 169c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 170c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.grouping2Flag) { 171c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setSecondaryGroupingSize(tuple.grouping2); 172c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 173c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.roundingModeFlag) { 174c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setRoundingMode(tuple.roundingMode); 175c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 176c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.currencyUsageFlag) { 177c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 178c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setCurrencyUsage(tuple.currencyUsage, &status); 179c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 180c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("CurrencyUsage: error setting."); 181c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 182c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 183c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.minimumExponentDigitsFlag) { 184c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setMinimumExponentDigits(tuple.minimumExponentDigits); 185c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 186c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.exponentSignAlwaysShownFlag) { 187c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setExponentSignAlwaysShown(tuple.exponentSignAlwaysShown != 0); 188c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 189c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.decimalSeparatorAlwaysShownFlag) { 190c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setDecimalSeparatorAlwaysShown( 191c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.decimalSeparatorAlwaysShown != 0); 192c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 193c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.padPositionFlag) { 194c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPadPosition(tuple.padPosition); 195c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 196c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.positivePrefixFlag) { 197c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPositivePrefix(tuple.positivePrefix); 198c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 199c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.positiveSuffixFlag) { 200c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPositiveSuffix(tuple.positiveSuffix); 201c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 202c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.negativePrefixFlag) { 203c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setNegativePrefix(tuple.negativePrefix); 204c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 205c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.negativeSuffixFlag) { 206c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setNegativeSuffix(tuple.negativeSuffix); 207c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 208c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.localizedPatternFlag) { 209c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 210c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.applyLocalizedPattern(tuple.localizedPattern, status); 211c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 212c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error setting localized pattern."); 213c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 214c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 215c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setLenient(NFTT_GET_FIELD(tuple, lenient, 1) != 0); 216c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.parseIntegerOnlyFlag) { 217c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setParseIntegerOnly(tuple.parseIntegerOnly != 0); 218c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 219c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.decimalPatternMatchRequiredFlag) { 220c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setDecimalPatternMatchRequired( 221c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.decimalPatternMatchRequired != 0); 222c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 223c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.parseNoExponentFlag) { 224c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 225c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setAttribute( 226c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UNUM_PARSE_NO_EXPONENT, 227c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.parseNoExponent, 228c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 229c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 230c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error setting parse no exponent flag."); 231c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 232c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 233c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 234c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 235c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic DecimalFormat *newDecimalFormat( 236c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const Locale &locale, 237c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UnicodeString &pattern, 238c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 239c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 240c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 241c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 242c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormatSymbols> symbols( 243c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert new DecimalFormatSymbols(locale, status), status); 244c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 245c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 246c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 247c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UParseError perror; 248c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormat> result(new DecimalFormat( 249c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert pattern, symbols.getAlias(), perror, status), status); 250c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!result.isNull()) { 251c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert symbols.orphan(); 252c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 253c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 254c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 255c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 256c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return result.orphan(); 257c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 258c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 259c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertstatic DecimalFormat *newDecimalFormat( 260c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 261c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 262c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 263c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return NULL; 264c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 265c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale en("en"); 266c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return newDecimalFormat( 267c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NFTT_GET_FIELD(tuple, locale, en), 268c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NFTT_GET_FIELD(tuple, pattern, "0"), 269c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 270c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 271c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 272c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool NumberFormatTestDataDriven::isFormatPass( 273c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 274c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 275c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 276c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 277c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 278c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 279c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormat> fmtPtr(newDecimalFormat(tuple, status)); 280c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 281c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error creating DecimalFormat."); 282c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 283c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 284c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert adjustDecimalFormat(tuple, *fmtPtr, appendErrorMessage); 285c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendErrorMessage.length() > 0) { 286c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 287c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 288c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DigitList digitList; 289c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert strToDigitList(tuple.format, digitList, status); 290c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 291c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 292c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert format(*fmtPtr, digitList, appendTo, status); 293c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 294c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error formatting."); 295c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 296c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 297c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendTo != tuple.output) { 298c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 299c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("Expected: ") + tuple.output + ", got: " + appendTo); 300c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 301c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 302c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 303c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert double doubleVal = digitList.getDouble(); 304c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 305c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 306c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert format(*fmtPtr, doubleVal, appendTo, status); 307c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 308c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error formatting."); 309c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 310c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 311c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendTo != tuple.output) { 312c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 313c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("double Expected: ") + tuple.output + ", got: " + appendTo); 314c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 315c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 316c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 317c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!uprv_isNaN(doubleVal) && !uprv_isInfinite(doubleVal) && doubleVal == uprv_floor(doubleVal)) { 318c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t intVal = digitList.getInt64(); 319c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 320c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 321c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert format(*fmtPtr, intVal, appendTo, status); 322c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 323c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error formatting."); 324c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 325c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 326c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendTo != tuple.output) { 327c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 328c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("int64 Expected: ") + tuple.output + ", got: " + appendTo); 329c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 330c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 331c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 332c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 333c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 334c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 335c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 336c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool NumberFormatTestDataDriven::isToPatternPass( 337c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 338c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 339c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 340c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 341c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 342c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 343c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormat> fmtPtr(newDecimalFormat(tuple, status)); 344c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 345c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error creating DecimalFormat."); 346c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 347c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 348c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert adjustDecimalFormat(tuple, *fmtPtr, appendErrorMessage); 349c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendErrorMessage.length() > 0) { 350c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 351c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 352c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.toPatternFlag) { 353c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString actual; 354c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtPtr->toPattern(actual); 355c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (actual != tuple.toPattern) { 356c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 357c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("Expected: ") + tuple.toPattern + ", got: " + actual + ". "); 358c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 359c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 360c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.toLocalizedPatternFlag) { 361c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString actual; 362c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtPtr->toLocalizedPattern(actual); 363c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (actual != tuple.toLocalizedPattern) { 364c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 365c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("Expected: ") + tuple.toLocalizedPattern + ", got: " + actual + ". "); 366c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 367c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 368c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return appendErrorMessage.length() == 0; 369c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 370c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 371c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool NumberFormatTestDataDriven::isParsePass( 372c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 373c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 374c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 375c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 376c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 377c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 378c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormat> fmtPtr(newDecimalFormat(tuple, status)); 379c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 380c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error creating DecimalFormat."); 381c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 382c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 383c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert adjustDecimalFormat(tuple, *fmtPtr, appendErrorMessage); 384c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendErrorMessage.length() > 0) { 385c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 386c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 387c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Formattable result; 388c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert ParsePosition ppos; 389c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtPtr->parse(tuple.parse, result, ppos); 390c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (ppos.getIndex() == 0) { 391c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.output != "fail") { 392c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Parse failed but was expected to succeed."); 393c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 394c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 395c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 396c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 397c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString resultStr(UnicodeString::fromUTF8(result.getDecimalNumber(status))); 398c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.output == "fail") { 399c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append(UnicodeString("Parse succeeded: ") + resultStr + ", but was expected to fail."); 400c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 401c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 402c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DigitList expected; 403c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert strToDigitList(tuple.output, expected, status); 404c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 405c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error parsing."); 406c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 407c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 408c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (expected != *result.getDigitList()) { 409c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 410c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("Expected: ") + tuple.output + ", got: " + resultStr + ". "); 411c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 412c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 413c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 414c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 415c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 416c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertUBool NumberFormatTestDataDriven::isParseCurrencyPass( 417c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const NumberFormatTestTuple &tuple, 418c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString &appendErrorMessage, 419c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode &status) { 420c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 421c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 422c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 423c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<DecimalFormat> fmtPtr(newDecimalFormat(tuple, status)); 424c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 425c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error creating DecimalFormat."); 426c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 427c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 428c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert adjustDecimalFormat(tuple, *fmtPtr, appendErrorMessage); 429c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (appendErrorMessage.length() > 0) { 430c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 431c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 432c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert ParsePosition ppos; 433c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<CurrencyAmount> currAmt( 434c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtPtr->parseCurrency(tuple.parse, ppos)); 435c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (ppos.getIndex() == 0) { 436c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.output != "fail") { 437c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Parse failed but was expected to succeed."); 438c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 439c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 440c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 441c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 442c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString currStr(currAmt->getISOCurrency()); 443c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Formattable resultFormattable(currAmt->getNumber()); 444c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString resultStr(UnicodeString::fromUTF8(resultFormattable.getDecimalNumber(status))); 445c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (tuple.output == "fail") { 446c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append(UnicodeString("Parse succeeded: ") + resultStr + ", but was expected to fail."); 447c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 448c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 449c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DigitList expected; 450c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert strToDigitList(tuple.output, expected, status); 451c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 452c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append("Error parsing."); 453c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 454c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 455c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (expected != *currAmt->getNumber().getDigitList()) { 456c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append( 457c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString("Expected: ") + tuple.output + ", got: " + resultStr + ". "); 458c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 459c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 460c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (currStr != tuple.outputCurrency) { 461c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendErrorMessage.append(UnicodeString( 462c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "Expected currency: ") + tuple.outputCurrency + ", got: " + currStr + ". "); 463c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return FALSE; 464c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 465c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return TRUE; 466c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_CACHE_DEBUG 1 46950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "stdio.h" /* for sprintf */ 47050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// #include "iostream" // for cout 471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//#define NUMFMTST_DEBUG 1 473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUR[] = {69,85,82,0}; // "EUR" 475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar ISO_CURRENCY_USD[] = {0x55, 0x53, 0x44, 0}; // "USD" 47650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 47759d709d503bab6e2b61931737e662dd293b40578ccornelius 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// class NumberFormatTest 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ***************************************************************************** 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 4826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define CHECK(status,str) if (U_FAILURE(status)) { errcheckln(status, UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 48327f654740f2a26ad62a5c155af9199af9e69b889claireho#define CHECK_DATA(status,str) if (U_FAILURE(status)) { dataerrln(UnicodeString("FAIL: ") + str + " - " + u_errorName(status)); return; } 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 4878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_BEGIN; 4888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencySign); 4898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrency); 4908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParse); 4918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding487); 4928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestQuotes); 4938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponential); 4948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns); 4958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // Upgrade to alphaWorks - liu 5/99 4978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponent); 4988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific); 4998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPad); 5008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPatterns2); 5018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSecondaryGrouping); 5028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSurrogateSupport); 5038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAPI); 5048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyObject); 5068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyPatterns); 5078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius //TESTCASE_AUTO(TestDigitList); 5088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestWhiteSpaceParsing); 5098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestComplexCurrency); // This test removed because CLDR no longer uses choice formats in currency symbols. 5108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRegCurrency); 5118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSymbolsWithBadLocale); 5128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAdoptDecimalFormatSymbols); 5138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientific2); 5158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestScientificGrouping); 5168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestInt64); 5178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestPerMill); 5198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestIllegalPatterns); 5208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCases); 5218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyNames); 5238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyAmount); 5248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyUnit); 5258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCoverage); 5268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestJB3832); 5278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHost); 5288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestHostClone); 5298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormat); 5308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRounding); 5318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNonpositiveMultiplier); 5328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestNumberingSystems); 5338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSpaceParsing); 5348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestMultiCurrencySign); 5358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFormatForMixParsing); 5368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimalFormatCurrencyParse); 5378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyIsoPluralFormat); 5388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyParsing); 5398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestParseCurrencyInUCurr); 5408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatAttributes); 5418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFieldPositionIterator); 5428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestDecimal); 5438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCurrencyFractionDigits); 5448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExponentParse); 5458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestExplicitParents); 5468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestLenientParse); 5478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestAvailableNumberingSystems); 5488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestRoundingPattern); 5498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(Test9087); 5508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormatFastpaths); 5518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFormattableSize); 55259d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestUFormattable); 55359d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestSignificantDigits); 55459d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestShowZero); 55559d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCompatibleCurrencies); 55659d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestBug9936); 55759d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithFaLocale); 55859d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseNegativeWithAlternateMinusSign); 55959d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestCustomCurrencySignAndSeparator); 56059d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(TestParseSignsAndMarks); 561fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10419RoundingWith0FractionDigits); 562fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(Test10468ApplyPattern); 563fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestRoundingScientific10542); 564fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestZeroScientific10547); 565fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestAccountingCurrency); 566fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TESTCASE_AUTO(TestEquality); 567f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius TESTCASE_AUTO(TestCurrencyUsage); 568c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestNumberFormatTestTuple); 569c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestDataDriven); 5701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert TESTCASE_AUTO(TestDoubleLimit11439); 57195bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep TESTCASE_AUTO(TestFastPathConsistent11524); 572c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestGetAffixes); 573c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestToPatternScientific11648); 574c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestBenchmark); 575c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestCtorApplyPatternDifference); 576c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestFractionalDigitsForCurrency); 577c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(TestFormatCurrencyPlural); 578c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test11868); 579c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test10727_RoundingZero); 580c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test11376_getAndSetPositivePrefix); 581c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test11475_signRecognition); 582c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test11640_getAffixes); 583c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert TESTCASE_AUTO(Test11649_toPatternWithMultiCurrency); 5848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_END; 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 58650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test API (increase code coverage) 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestAPI(void) 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Test API"); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = NumberFormat::createInstance("root", status); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 5976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("unable to create format object - %s", u_errorName(status)); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test != NULL) { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumIntegerDigits(10); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumIntegerDigits(2); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMinimumFractionDigits(10); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->setMaximumFractionDigits(2); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable bla("Paja Patak"); // Donald Duck for non Serbian speakers 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(bla, result, pos, status); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Yuck... Formatted a duck... As a number!"); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.remove(); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t ll = 12; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test->format(ll, result); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != "12.00"){ 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("format int64_t error"); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 62350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ParsePosition ppos; 624103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(test->parseCurrency("",ppos)); 625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // old test for (U_FAILURE(status)) was bogus here, method does not set status! 626103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (ppos.getIndex()) { 627103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed empty string as currency"); 62850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 62950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 63050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete test; 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63459d709d503bab6e2b61931737e662dd293b40578ccorneliusclass StubNumberFormat :public NumberFormat{ 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 63659d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat(){}; 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const { 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const { 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo.append((UChar)0x0033); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const { 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NumberFormat::format(number, appendTo, pos); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const { 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return appendTo; 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse(const UnicodeString& , 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& ) const {} 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse( const UnicodeString& , 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& , 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ) const {} 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID(void) const { 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char classID = 0; 65750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (UClassID)&classID; 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual Format* clone() const {return NULL;} 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCoverage(void){ 66459d709d503bab6e2b61931737e662dd293b40578ccornelius StubNumberFormat stub; 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString agent("agent"); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t num = 4; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stub.format(num, agent, pos) != UnicodeString("agent3")){ 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("NumberFormat::format(int64, UnicodString&, FieldPosition&) should delegate to (int32, ,)"); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test various patterns 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestPatterns(void) 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 6796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Could not construct DecimalFormatSymbols - %s", u_errorName(status)); return; } 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "#.#", "#.", ".#", "#" }; 6828de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t pat_length = UPRV_LENGTHOF(pat); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* newpat[] = { "#0.#", "#0.", "#.0", "#" }; 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* num[] = { "0", "0.", ".0", "0" }; 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<pat_length; ++i) 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[i], sym, status); 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln((UnicodeString)"FAIL: DecimalFormat constructor failed for " + pat[i]); continue; } 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString newp; fmt.toPattern(newp); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(newp == newpat[i])) 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should transmute to " + newpat[i] + 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + newp + " seen instead"); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format((int32_t)0, s); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(s == num[i])) 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Pattern " + pat[i] + " should format zero as " + num[i] + 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; " + s + " seen instead"); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Min integer digits = " + fmt.getMinimumIntegerDigits()); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 70650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator== 0 0 2 icuuc24d.dll digitlst.cpp Doug 70750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::append 0 0 4 icuin24d.dll digitlst.h Doug 70850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoicu_2_4::DigitList::operator!= 0 0 1 icuuc24d.dll digitlst.h Doug 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 71150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestDigitList(void) 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // API coverage for DigitList 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list1; 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.append('1'); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list1.fDecimalAt = 1; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList list2; 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru list2.set((int32_t)1); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (list1 != list2) { 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator!= or set failed "); 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(list1 == list2)) { 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("digitlist append, operator== or set failed "); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test exponential pattern 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestExponential(void) 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 7376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { errcheckln(status, "FAIL: Bad status returned by DecimalFormatSymbols ct - %s", u_errorName(status)); return; } 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat[] = { "0.####E0", "00.000E00", "##0.######E000", "0.###E0;[0.###E0]" }; 7398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t pat_length = UPRV_LENGTHOF(pat); 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// The following #if statements allow this test to be built and run on 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// platforms that do not have standard IEEE numerics. For example, 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// S/390 doubles have an exponent range of -78 to +75. For the 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following #if statements to work, float.h must define 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// DBL_MAX_10_EXP to be a compile-time constant. 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This section may be expanded as needed. 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if DBL_MAX_10_EXP > 300 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e300, -3.141592653e-271 }; 7518de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t val_length = UPRV_LENGTHOF(val); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* valFormat[] = 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E300", "-3.1416E-271", 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E299", "-31.416E-272", 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "1.23E300", "-314.1593E-273", 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E300", "[3.142E-271]" 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E300, -3.1416E-271, 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E300, -3.141593E-271, 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E300, -3.142E-271, 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#elif DBL_MAX_10_EXP > 70 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double val[] = { 0.01234, 123456789, 1.23e70, -3.141592653e-71 }; 7728de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t val_length = UPRV_LENGTHOF(val); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* valFormat[] = 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.2346E8", "1.23E70", "-3.1416E-71", 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.340E-03", "12.346E07", "12.300E69", "-31.416E-72", 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E-003", "123.4568E006", "12.3E069", "-31.41593E-072", 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.234E-2", "1.235E8", "1.23E70", "[3.142E-71]" 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double valParse[] = 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123460000, 1.23E70, -3.1416E-71, 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123456800, 1.23E70, -3.141593E-71, 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.01234, 123500000, 1.23E70, -3.142E-71, 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't test double conversion 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* val = 0; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t val_length = 0; 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char** valFormat = 0; 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double* valParse = 0; 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Warning: Skipping double conversion tests"); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lval[] = { 0, -1, 1, 123456789 }; 8018de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t lval_length = UPRV_LENGTHOF(lval); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* lvalFormat[] = 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.####E0 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "-1E0", "1E0", "1.2346E8", 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 00.000E00 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "00.000E00", "-10.000E-01", "10.000E-01", "12.346E07", 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ##0.######E000 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E000", "-1E000", "1E000", "123.4568E006", 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0.###E0;[0.###E0] 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0E0", "[1E0]", "1E0", "1.235E8" 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lvalParse[] = 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123460000, 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123456800, 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, -1, 1, 123500000, 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ival = 0, ilval = 0; 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t p=0; p<pat_length; ++p) 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat[p], sym, status); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { errln("FAIL: Bad status returned by DecimalFormat ct"); continue; } 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + pat[p] + "\" -toPattern-> \"" + 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pattern) + "\""); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t v; 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<val_length; ++v) 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; (*(NumberFormat*)&fmt).format(val[v], s); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + val[v] + " -format-> " + s); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != valFormat[v+ival]) 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valFormat[v+ival]); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double a; 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool useEpsilon = FALSE; 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong) 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getLong(); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (af.getType() == Formattable::kDouble) { 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru a = af.getDouble(); 845103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // S/390 will show a failure like this: 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -3.141592652999999e-271 -format-> -3.1416E-271 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| -parse-> -3.1416e-271 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //| FAIL: Expected -3.141599999999999e-271 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // To compensate, we use an epsilon-based equality 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test on S/390 only. We don't want to do this in 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // general because it's less exacting. 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru useEpsilon = TRUE; 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-numeric Formattable returned"); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Use epsilon comparison as necessary 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((useEpsilon && 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (uprv_fabs(a - valParse[v+ival]) / a > (2*DBL_EPSILON))) || 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (!useEpsilon && a != valParse[v+ival])) 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + valParse[v+ival]); 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)" should be (" + s.length() + " chars) -> " + valParse[v+ival]); 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (v=0; v<lval_length; ++v) 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (*(NumberFormat*)&fmt).format(lval[v], s); 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" " + lval[v] + "L -format-> " + s); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s != lvalFormat[v+ilval]) 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Expected " + lvalFormat[v+ilval] + " Got: " + s); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable af; 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(s, af, pos); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (af.getType() == Formattable::kLong || 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru af.getType() == Formattable::kInt64) { 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t a = af.getLong(status); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos.getIndex() == s.length()) 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" -parse-> " + a); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a != lvalParse[v+ilval]) 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected " + lvalParse[v+ilval]); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Partial parse (" + pos.getIndex() + " chars) -> " + a); 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Non-long Formattable returned for " + s 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + " Double: " + af.getDouble() 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + ", Long: " + af.getLong()); 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ival += val_length; 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ilval += lval_length; 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientific2() { 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* fmt = (DecimalFormat*)NumberFormat::createCurrencyInstance("en_US", status); 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num = 12.34; 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(TRUE); 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$1.23E1"); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->setScientificNotation(FALSE); 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(*fmt, num, "$12.34"); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestScientificGrouping() { 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // jb 2552 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("##0.00E0",status); 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .01234, "12.3E-3"); 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, .1234, "123E-3"); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1.234, "1.23E0"); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 12.34, "12.3E0"); 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 123.4, "123E0"); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, 1234., "1.23E3"); 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void setFromString(DigitList& dl, const char* str) { 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char c; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool decimalSet = FALSE; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.clear(); 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((c = *str++)) { 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c == '-') { 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '+') { 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c == '.') { 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru decimalSet = TRUE; 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.append(c); 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!decimalSet) { 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fDecimalAt = dl.fCount; 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}*/ 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestInt64() { 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#.#E0",status); 966c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 967c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 968c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 969c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setMaximumFractionDigits(20); 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)0, "0E0"); 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)-1, "-1E0"); 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)1, "1E0"); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)2147483647, "2.147483647E9"); 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)((int64_t)-2147483647-1), "-2.147483648E9"); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MAX, "9.223372036854775807E18"); 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, (Formattable)(int64_t)U_INT64_MIN, "-9.223372036854775808E18"); 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // also test digitlist 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* int64_t int64max = U_INT64_MAX; 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64min = U_INT64_MIN; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64maxstr = "9223372036854775807"; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* int64minstr = "-9223372036854775808"; 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fail("fail: "); 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test max int64 value 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DigitList dl; 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64maxstr); 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr + " didn't fit"); 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64max) { 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64maxstr); 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of max int64 value (1 shy of min int64 value) 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = FALSE; 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr + " didn't fit"); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != -int64max) { 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64maxstr); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test min int64 value 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setFromString(dl, int64minstr); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!dl.fitsIntoInt64(FALSE)) { 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-" + int64minstr + " didn't fit"); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64_t int64Value = dl.getInt64(); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.set(int64Value); 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int64Value = dl.getInt64(); 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (int64Value != int64min) { 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + int64minstr); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test negative of min int 64 value (1 more than max int64 value) 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dl.fIsPositive = TRUE; // won't fit 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dl.fitsIntoInt64(FALSE)) { 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(fail + "-(" + int64minstr + ") didn't fit"); 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the handling of quotes 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestQuotes(void) 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString *pat; 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), status); 10556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 10566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 10576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 10586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 10596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a'fo''o'b#"); 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(*pat, *sym, status); 106250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString s; 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 106650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="afo'ob123")) 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected afo'ob123"); 106850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = new UnicodeString("a''b#"); 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(*pat, *sym, status); 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format((int32_t)123, s); 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + *pat + "\""); 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format 123 -> " + escape(s)); 107850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!(s=="a'b123")) 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected a'b123"); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete pat; 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the handling of the currency symbol in patterns. 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrencySign(void) 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale::getUS(), status); 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar currency = 0x00A4; 10956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 10966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail to create DecimalFormatSymbols - %s", u_errorName(status)); 10976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete sym; 10986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 10996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append("#,##0.00;-"). 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append("#,##0.00"); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *fmt = new DecimalFormat(pat, *sym, status); 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; ((NumberFormat*)fmt)->format(1234.56, s); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 110827f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "$1,234.56") dataerrln((UnicodeString)"FAIL: Expected $1,234.56"); 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(- 1234.56, s); 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 111227f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "-$1,234.56") dataerrln((UnicodeString)"FAIL: Expected -$1,234.56"); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.truncate(0); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // "\xA4\xA4 #,##0.00;\xA4\xA4 -#,##0.00" 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.append(currency).append(currency). 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" #,##0.00;"). 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(currency).append(currency). 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru append(" -#,##0.00"); 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, *sym, status); 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(1234.56, s); 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern \"" + fmt->toPattern(pat) + "\""); 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + 1234.56 + " -> " + escape(s)); 112527f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD 1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD 1,234.56"); 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((NumberFormat*)fmt)->format(-1234.56, s); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)" Format " + (-1234.56) + " -> " + escape(s)); 112927f654740f2a26ad62a5c155af9199af9e69b889claireho if (s != "USD -1,234.56") dataerrln((UnicodeString)"FAIL: Expected USD -1,234.56"); 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 11326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + u_errorName(status)); 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 113450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); } 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString& 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::escape(UnicodeString& s) 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString buf; 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<s.length(); ++i) 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar c = s[(int32_t)i]; 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c <= (UChar)0x7F) buf += c; 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += (UChar)0x5c; buf += (UChar)0x55; 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0xF000) >> 12); 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x0F00) >> 8); 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString((c & 0x00F0) >> 4); 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buf += toHexString(c & 0x000F); 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (s = buf); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* testCases[][2]= { 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* locale ID */ /* expected */ 116254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"ca_ES_PREEURO", "\\u20A7\\u00A01.150" }, 1163c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"de_LU_PREEURO", "1,150\\u00A0F" }, 1164c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"el_GR_PREEURO", "1.150,50\\u00A0\\u0394\\u03C1\\u03C7" }, 1165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"en_BE_PREEURO", "1.150,50\\u00A0BEF" }, 1166fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 116754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius {"eu_ES_PREEURO", "\\u20A7\\u00A01.150" }, 1168c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru {"gl_ES_PREEURO", "1.150\\u00A0\\u20A7" }, 1169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"it_IT_PREEURO", "ITL\\u00A01.150" }, 1170f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius {"pt_PT_PREEURO", "1,150$50\\u00A0\\u200B"}, // per cldrbug 7670 117127f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=JPY", "\\u00A51,150"}, 117227f654740f2a26ad62a5c155af9199af9e69b889claireho {"en_US@currency=jpy", "\\u00A51,150"}, 117327f654740f2a26ad62a5c155af9199af9e69b889claireho {"en-US-u-cu-jpy", "\\u00A51,150"} 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test localized currency patterns. 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestCurrency(void) 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(Locale::getCanadaFrench(), status); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createCurrencyInstance()"); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; currencyFmt->format(1.50, s); 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre ici a..........." + s); 1190c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0$"))) 1191c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$"); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int len = uloc_canonicalize("de_DE_PREEURO", loc, 256, &status); 119659d709d503bab6e2b61931737e662dd293b40578ccornelius (void)len; // Suppress unused variable warning. 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc),status); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en Allemagne a.." + s); 1200f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!(s==CharsToUnicodeString("1,50\\u00A0DM"))) 1201f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln((UnicodeString)"FAIL: Expected 1,50<nbsp>DM"); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = uloc_canonicalize("fr_FR_PREEURO", loc, 256, &status); 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1.50, s); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Un pauvre en France a....." + s); 1208c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!(s==CharsToUnicodeString("1,50\\u00A0F"))) 1209c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln((UnicodeString)"FAIL: Expected 1,50<nbsp>F"); 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 121350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 12148de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(int i=0; i < UPRV_LENGTHOF(testCases); i++){ 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *localeID = testCases[i][0]; 1217c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString expected(testCases[i][1], -1, US_INV); 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = expected.unescape(); 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.truncate(0); 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char loc[256]={0}; 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_canonicalize(localeID, loc, 256, &status); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt = NumberFormat::createCurrencyInstance(Locale(loc), status); 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Could not create currency formatter for locale %s",localeID); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 122950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 123050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: Status " + (int32_t)status); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 123950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the Currency object handling, new as of ICU 2.2. 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyObject() { 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 124750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* fmt = 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createCurrencyInstance(Locale::getUS(), ec); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 12516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: getCurrencyInstance(US) - %s", u_errorName(ec)); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale null("", "", ""); 125750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, "$1,234.56"); 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u20AC1,234.56")); // Euro 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 12678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "$1,234.56"); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = NumberFormat::createCurrencyInstance(Locale::getFrance(), ec); 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: getCurrencyInstance(FRANCE)"); 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 128050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, null, 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getJapan(), 1284f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 1234.56, CharsToUnicodeString("1 235 JPY")); // Yen 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale("fr", "CH", ""), 12878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1234.56, "1 234,56 CHF"); // no more 0.05 rounding here, see cldrbug 5548 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getUS(), 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, "1 234,56 $US"); 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectCurrency(*fmt, Locale::getFrance(), 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1234.56, CharsToUnicodeString("1 234,56 \\u20AC")); // Euro 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 129750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Do rudimentary testing of parsing. 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestParse(void) 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString arg("0"); 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* format = new DecimalFormat("00", status); 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //try { 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; format->parse(arg, n, status); 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"parse(" + arg + ") = " + n.getLong()); 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (n.getType() != Formattable::kLong || 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n.getLong() != 0) errln((UnicodeString)"FAIL: Expected 0"); 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete format; 13156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) errcheckln(status, (UnicodeString)"FAIL: Status " + u_errorName(status)); 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //catch(Exception e) { 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"Exception caught: " + e); 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 132150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1324b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientAffixTestCases[] = { 1325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1)", 1326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1)", 1327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "(1 )", 1328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "( 1 )" 1329b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1330b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1331b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientMinusTestCases[] = { 1332b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-5", 1333b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u22125", 1334b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\\u20105" 1335b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1336b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1337b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientCurrencyTestCases[] = { 1338103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1,000", 1339103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1,000", 1340103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1000", 1341103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1000", 1342103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$1 000.00", 1343103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1 000.00", 1344103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "$ 1\\u00A0000.00", 1345103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "1000.00" 1346b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1347b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 134859d709d503bab6e2b61931737e662dd293b40578ccornelius// changed from () to - per cldrbug 5674 1349b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativeCurrencyTestCases[] = { 135059d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1,000", 135159d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1,000", 135259d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1000", 135359d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1000", 135459d709d503bab6e2b61931737e662dd293b40578ccornelius "-$1 000.00", 135559d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1 000.00", 135659d709d503bab6e2b61931737e662dd293b40578ccornelius "- $ 1,000.00 ", 135759d709d503bab6e2b61931737e662dd293b40578ccornelius "-$ 1\\u00A0000.00", 135859d709d503bab6e2b61931737e662dd293b40578ccornelius "-1000.00" 1359b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1360b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1361b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientPercentTestCases[] = { 1362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25%", 1363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25%", 1364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius " 25 %", 1365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "25 %", 1366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25\\u00A0%", 1367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "25" 1368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1370b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *lenientNegativePercentTestCases[] = { 1371b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25%", 1372b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " -25%", 1373b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25%", 1374b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25 %", 1375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " - 25 %", 1376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25 %", 1377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25\\u00A0%", 1378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "-25", 1379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "- 25" 1380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1382b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const char *strictFailureTestCases[] = { 1383b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho " 1000", 1384b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "10,00", 1385b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1,000,.0" 1386b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1387b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1388b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 1389b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Test lenient parsing. 1390b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 1391b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid 1392b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoNumberFormatTest::TestLenientParse(void) 1393b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho{ 1394b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 1395b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *format = new DecimalFormat("(#,##0)", status); 1396b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Formattable n; 1397b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (format == NULL || U_FAILURE(status)) { 1399b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create DecimalFormat (#,##0) - %s", u_errorName(status)); 1400b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->setLenient(TRUE); 14028de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF (lenientAffixTestCases); t += 1) { 1403b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientAffixTestCases[t]); 1404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho format->parse(testCase, n, status); 1406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1408b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || 1409b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1) { 1410b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\""); 1411b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1412b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete format; 1415b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1416b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1417b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale en_US("en_US"); 1418b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale sv_SE("sv_SE"); 1419b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1420b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *mFormat = NumberFormat::createInstance(sv_SE, UNUM_DECIMAL, status); 1421b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1422b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 1423b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (sv_SE, UNUM_DECIMAL) - %s", u_errorName(status)); 1424b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1425b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 14268de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF(lenientMinusTestCases); t += 1) { 1427b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 1428b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1429b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 1430b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1431b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1432b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 1433b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 1434b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1435b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1436b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1437b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 1438b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1439b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1440b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat = NumberFormat::createInstance(en_US, UNUM_DECIMAL, status); 1441b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1442b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (mFormat == NULL || U_FAILURE(status)) { 1443b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_DECIMAL) - %s", u_errorName(status)); 1444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->setLenient(TRUE); 14468de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF(lenientMinusTestCases); t += 1) { 1447b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientMinusTestCases[t]); 1448b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1449b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho mFormat->parse(testCase, n, status); 1450b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1451b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1452b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) { 1453b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\""); 1454b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1455b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1456b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1457b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete mFormat; 1458b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1459b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1460b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *cFormat = NumberFormat::createInstance(en_US, UNUM_CURRENCY, status); 1461b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1462b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (cFormat == NULL || U_FAILURE(status)) { 1463b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US, UNUM_CURRENCY) - %s", u_errorName(status)); 1464b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1465b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->setLenient(TRUE); 14668de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF (lenientCurrencyTestCases); t += 1) { 1467b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientCurrencyTestCases[t]); 1468b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1469b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1470b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1471b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1472b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1473b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1474b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\""); 1475b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1476b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1477b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1478b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 14798de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF (lenientNegativeCurrencyTestCases); t += 1) { 1480b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativeCurrencyTestCases[t]); 1481b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1482b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho cFormat->parse(testCase, n, status); 1483b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1484b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1485b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1486b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != -1000) { 1487b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\""); 1488b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1489b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1490b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1491b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1492b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete cFormat; 1493b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1494b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1495b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *pFormat = NumberFormat::createPercentInstance(en_US, status); 1496b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (pFormat == NULL || U_FAILURE(status)) { 1498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat::createPercentInstance (en_US) - %s", u_errorName(status)); 1499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->setLenient(TRUE); 15018de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF (lenientPercentTestCases); t += 1) { 1502b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientPercentTestCases[t]); 1503b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1504b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1505b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1506b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != 0.25) { 1509b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\""); 1510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1511b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1512b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1513b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 15148de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF (lenientNegativePercentTestCases); t += 1) { 1515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(lenientNegativePercentTestCases[t]); 1516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1517b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho pFormat->parse(testCase, n, status); 1518b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getDouble()); 1519b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1520b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kDouble || 1521b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getDouble() != -0.25) { 1522b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\""); 1523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1525b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1526b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1527b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete pFormat; 1528b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1529b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1530b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // Test cases that should fail with a strict parse and pass with a 1531b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // lenient parse. 1532b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *nFormat = NumberFormat::createInstance(en_US, status); 1533b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1534b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (nFormat == NULL || U_FAILURE(status)) { 1535b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create NumberFormat (en_US) - %s", u_errorName(status)); 1536b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1537b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // first, make sure that they fail with a strict parse 15388de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF(strictFailureTestCases); t += 1) { 1539b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1540b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1541b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1542b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1543b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1544b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (! U_FAILURE(status)) { 1545b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1546b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1547b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1548b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1549b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1550b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1551b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // then, make sure that they pass with a lenient parse 1552b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->setLenient(TRUE); 15538de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t t = 0; t < UPRV_LENGTHOF(strictFailureTestCases); t += 1) { 1554b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString testCase = ctou(strictFailureTestCases[t]); 1555b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1556b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nFormat->parse(testCase, n, status); 1557b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong()); 1558b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1559b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status) ||n.getType() != Formattable::kLong || 1560b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho n.getLong() != 1000) { 1561b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\""); 1562b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1563b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1564b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1565b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1566b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete nFormat; 1567b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1568b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 1569b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1570b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho// ------------------------------------- 1571b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test proper rounding by the format method. 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::TestRounding487(void) 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *nf = NumberFormat::createInstance(status); 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling NumberFormat::createInstance()"); 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00159999, 4, "0.0016"); 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 0.00995, 4, "0.01"); 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.3995, 3, "12.4"); 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, 12.4999, 0, "12"); 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru roundingTest(*nf, - 19.5, 0, "-20"); 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) errln((UnicodeString)"FAIL: Status " + (int32_t)status); 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test the functioning of the secondary grouping value. 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSecondaryGrouping(void) { 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols ct"); 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat f("#,##,###", US, status); 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat ct"); 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,34,56,789"); 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,##,###"); 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.applyPattern("#,###", status); 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f.setSecondaryGroupingSize(4); 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(f, (int32_t)123456789L, "12,3456,789"); 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(f, "#,####,###"); 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *g = NumberFormat::createInstance(Locale("hi", "IN"), status); 161627f654740f2a26ad62a5c155af9199af9e69b889claireho CHECK_DATA(status, "createInstance(hi_IN)"); 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = (int32_t)1876543210L; 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru g->format(l, out); 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete g; 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // expect "1,87,65,43,210", but with Hindi digits 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890123 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool ok = TRUE; 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (out.length() != 14) { 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<out.length(); ++i) { 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool expectGroup = FALSE; 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (i) { 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 10: 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectGroup = TRUE; 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Later -- fix this to get the actual grouping 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // character from the resource bundle. 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isGroup = (out.charAt(i) == 0x002C); 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isGroup != expectGroup) { 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ok = FALSE; 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ok) { 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL Expected " + l + 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"1,87,65,43,210\" (with Hindi digits), got \"" + 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok " + l + 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " x hi_IN -> \"" + 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(out) + "\""); 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestWhiteSpaceParsing(void) { 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), ec); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("a b#0c ", US, ec); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 16636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: Constructor - %s", u_errorName(ec)); 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, "a b1234c ", n); 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test currencies whose display name is a ChoiceFormat. 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestComplexCurrency() { 167550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// UErrorCode ec = U_ZERO_ERROR; 1677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Locale loc("kn", "IN", ""); 1678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// NumberFormat* fmt = NumberFormat::createCurrencyInstance(loc, ec); 1679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// if (U_SUCCESS(ec)) { 1680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 1.0, CharsToUnicodeString("Re.\\u00A01.00")); 1681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Use .00392625 because that's 2^-8. Any value less than 0.005 is fine. 1682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect(*fmt, 1.00390625, CharsToUnicodeString("Re.\\u00A01.00")); // tricky 1683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 12345678.0, CharsToUnicodeString("Rs.\\u00A01,23,45,678.00")); 1684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, 0.5, CharsToUnicodeString("Rs.\\u00A00.50")); 1685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -1.0, CharsToUnicodeString("-Re.\\u00A01.00")); 1686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// expect2(*fmt, -10.0, CharsToUnicodeString("-Rs.\\u00A010.00")); 1687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } else { 1688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// errln("FAIL: getCurrencyInstance(kn_IN)"); 1689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// } 1690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// delete fmt; 1691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 169350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ------------------------------------- 169550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruNumberFormatTest::roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected) 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf.setMaximumFractionDigits(maxFractionDigits); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString out; nf.format(x, out); 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"" + x + " formats with " + maxFractionDigits + " fractional digits to " + out); 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(out==expected)) errln((UnicodeString)"FAIL: Expected " + expected); 1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestExponent(void) { 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt1(UnicodeString("0.###E0"), US, status); 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E0)"); 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(UnicodeString("0.###E+0"), US, status); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat(0.###E+0)"); 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n = 1234; 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt1, n, "1.234E3"); 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(fmt2, n, "1.234E+3"); 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt1, "1.234E+3", n); // Either format should parse "E+3" 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestScientific(void) { 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test pattern round-trip 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* PAT[] = { "#E0", "0.####E0", "00.000E00", "##0.####E000", 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "0.###E0;[0.###E0]" }; 17338de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t PAT_length = UPRV_LENGTHOF(PAT); 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t DIGITS[] = { 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // min int, max int, min frac, max frac 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 1, 0, 0, // "#E0" 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 4, // "0.####E0" 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2, 2, 3, 3, // "00.000E00" 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 3, 0, 4, // "##0.####E000" 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1, 1, 0, 3, // "0.###E0;[0.###E0]" 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; i<PAT_length; ++i) { 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(PAT[i]); 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat df(pat, US, status); 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.toPattern(pat2); 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == pat2) { 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok Pattern rt \"") + 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL Pattern rt \"") + 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + "\" -> \"" + 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat2 + "\""); 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure digit counts match what we expect 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (df.getMinimumIntegerDigits() != DIGITS[4*i] || 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() != DIGITS[4*i+1] || 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() != DIGITS[4*i+2] || 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() != DIGITS[4*i+3]) { 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"" + pat + 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" min/max int; min/max frac = ") + 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumIntegerDigits() + "/" + 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumIntegerDigits() + ";" + 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMinimumFractionDigits() + "/" + 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df.getMaximumFractionDigits() + ", expect " + 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i] + "/" + 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+1] + ";" + 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+2] + "/" + 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DIGITS[4*i+3]); 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test the constructor for default locale. We have to 177750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // manually set the default locale, as there is no 177850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // guarantee that the default locale has the same 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // scientific format. 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale def = Locale::getDefault(); 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getUS(), status); 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(status), 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(def, status); 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345E4", status); 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1E4", status); 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getUS(), status), 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1.2345678901E4", status); 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.0, 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.34E3", status); 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.###E0", US, status), 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.00001, 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.35E3", status); 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12345, 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "12.345E3", status); 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(NumberFormat::createScientificInstance(Locale::getFrance(), status), 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12345.678901, 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1,2345678901E4", status); 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.####E0", US, status), 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789.12345e-9, 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "789.12E-9", status); 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.####E0", US, status), 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 780.e-9, 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "780E-9", status); 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat(".###E0", US, status), 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45678.0, 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".457E5", status); 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(".###E0", US, status), 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 0, 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".0E0", status); 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat[] { new DecimalFormat("#E0", US), 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("##E0", US), 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormat("####E0", US), 182450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("0E0", US), 182550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("00E0", US), 182650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho new DecimalFormat("000E0", US), 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }, 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(45678000), 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new String[] { "4.5678E7", 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "45.678E6", 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "4567.8E4", 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "5E7", 183350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "46E6", 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "457E5", 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("#E0", US, status), 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4.5678E7", status); 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##E0", US, status), 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "45.678E6", status); 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("####E0", US, status), 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "4567.8E4", status); 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0E0", US, status), 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "5E7", status); 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("00E0", US, status), 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "46E6", status); 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("000E0", US, status), 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 45678000, "457E5", status); 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("###E0", US, status), 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.0000123), "12.3E-6", 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.000123), "123E-6", 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.00123), "1.23E-3", 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.0123), "12.3E-3", 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(0.123), "123E-3", 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1.23), "1.23E0", 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(12.3), "12.3E0", 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(123), "123E0", 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Double(1230), "1.23E3", 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0000123, "12.3E-6", status); 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.000123, "123E-6", status); 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00123, "1.23E-3", status); 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.0123, "12.3E-3", status); 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.123, "123E-3", status); 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.23, "1.23E0", status); 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12.3, "12.3E0", status); 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123.0, "123E0", status); 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("###E0", US, status), 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230.0, "1.23E3", status); 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("0.#E+00", US, status), 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Object[] { new Double(0.00012), "1.2E-04", 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new Long(12000), "1.2E+04", 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }); 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! Unroll this test into individual tests below... 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ! 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0.00012, "1.2E-04", status); 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("0.#E+00", US, status), 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t) 12000, "1.2E+04", status); 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPad(void) { 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", US, status), 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, "^-1.3", status); 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0E0______ g-m/s^2", status); 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0*_ 'g-m/s^2'", US, status), 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333.333E-3_ g-m/s^2", status); 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0.0______ g-m/s^2", status); 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####*_ 'g-m/s^2'", US, status), 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0.33333__ g-m/s^2", status); 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding before a sign 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr = "*x#,###,###,##0.0#;*x(###,###,##0.0#)"; 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "xxxxxxxxxx(10.0)", status); 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"xxxxxxx(1,000.0)", status); 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"xxx(1,000,000.0)", status); 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "xxxxxxxx(100.37)", status); 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "xxxxx(10,456.37)", status); 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "xx(1,120,456.37)", status); 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "xxxxxxxxxxxx10.0", status); 1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"xxxxxxxxx1,000.0", status); 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"xxxxx1,000,000.0", status); 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "xxxxxxxxxx100.37", status); 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "xxxxxxx10,456.37", status); 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "xxxx1,120,456.37", status); 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "xx112,045,600.37", status); 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr, US, status), 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test padding between a sign and a number 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *formatStr2 = "#,###,###,##0.0#*x;(###,###,##0.0#*x)"; 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-10), "(10.0xxxxxxxxxx)", status); 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000),"(1,000.0xxxxxxx)", status); 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-1000000),"(1,000,000.0xxx)", status); 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -100.37, "(100.37xxxxxxxx)", status); 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -10456.37, "(10,456.37xxxxx)", status); 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1120456.37, "(1,120,456.37xx)", status); 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -112045600.37, "(112,045,600.37)", status); 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1252045600.37,"(1,252,045,600.37)", status); 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(10), "10.0xxxxxxxxxxxx", status); 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000),"1,000.0xxxxxxxxx", status); 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(1000000),"1,000,000.0xxxxx", status); 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100.37, "100.37xxxxxxxxxx", status); 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10456.37, "10,456.37xxxxxxx", status); 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120456.37, "1,120,456.37xxxx", status); 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112045600.37, "112,045,600.37xx", status); 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(formatStr2, US, status), 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10252045600.37,"10,252,045,600.37", status); 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //testing the setPadCharacter(UnicodeString) and getPadCharacterString() 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString padString("P"); 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString); 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter((UnicodeString)"^"); 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^"); 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //commented untill implementation is complete 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fmt.setPadCharacter((UnicodeString)"^^^"); 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^"); 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.remove(); 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0061); 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru padString.append((UChar)0x0302); 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(padString); 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar patternChars[]={0x002a, 0x0061, 0x0302, 0x0061, 0x0302, 0x0023, 0x0000}; 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern(patternChars); 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pattern , DecimalFormat::kPadBeforePrefix, 4, padString); 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Upgrade to alphaWorks 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPatterns2(void) { 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt("#", US, status); 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormat constructor"); 202850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar hat = 0x005E; /*^*/ 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, hat); 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^#", DecimalFormat::kPadAfterPrefix, 2, hat); 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#*^", DecimalFormat::kPadBeforeSuffix, 1, hat); 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^", DecimalFormat::kPadAfterSuffix, 2, hat); 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "$*^$#", ILLEGAL); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "#$*^$", ILLEGAL); 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'pre'#,##0*x'post'", DecimalFormat::kPadBeforeSuffix, 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12, (UChar)0x0078 /*x*/); 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "''#0*x", DecimalFormat::kPadBeforeSuffix, 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3, (UChar)0x0078 /*x*/); 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, "'I''ll'*a###.##", DecimalFormat::kPadAfterPrefix, 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10, (UChar)0x0061 /*a*/); 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern("AA#,##0.00ZZ", status); 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "applyPattern"); 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadCharacter(hat); 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(10); 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforePrefix); 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "*^AA#,##0.00ZZ"); 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadBeforeSuffix); 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00*^ZZ"); 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterSuffix); 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA#,##0.00ZZ*^"); 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exp("AA*^#,##0.00ZZ", ""); 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(12); 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setPadPosition(DecimalFormat::kPadAfterPrefix); 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, exp); 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(13); 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^##,##0.00ZZ"); 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(14); 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 345678901234 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^###,##0.00ZZ"); 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(15); 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 3456789012345 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^####,##0.00ZZ"); // This is the interesting case 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setFormatWidth(16); 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 12 34567890123456 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPat(fmt, "AA*^#,###,##0.00ZZ"); 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSurrogateSupport(void) { 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols custom(Locale::getUS(), status); 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, "decimal"); 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, "plus"); 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, " minus "); 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kExponentialSymbol, "exponent"); 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patternStr("*\\U00010000##.##", ""); 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expStr("\\U00010000\\U00010000\\U00010000\\U000100000", ""); 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), expStr, status); 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("*^##.##", custom, status), 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "^^^^0", status); 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##.##", custom, status), 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1.3, " minus 1decimal3", status); 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0exponent0 g-m/s^2", status); 2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0####E0 'g-m/s^2'", custom, status), 2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "333decimal333exponent minus 3 g-m/s^2", status); 2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(0), "0decimal0 g-m/s^2", status); 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(new DecimalFormat("##0.0#### 'g-m/s^2'", custom, status), 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.0/3, "0decimal33333 g-m/s^2", status); 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString zero((UChar32)0x10000); 211927f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString one((UChar32)0x10001); 212027f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString two((UChar32)0x10002); 212127f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString five((UChar32)0x10005); 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); 212327f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, one); 212427f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kTwoDigitSymbol, two); 212527f654740f2a26ad62a5c155af9199af9e69b889claireho custom.setSymbol(DecimalFormatSymbols::kFiveDigitSymbol, five); 2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString("\\U00010001decimal\\U00010002\\U00010005\\U00010000", ""); 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = expStr.unescape(); 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat("##0.000", custom, status), 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1.25, expStr, status); 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, (UChar)0x30); 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "units of money"); 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, "money separator"); 2135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru patternStr = UNICODE_STRING_SIMPLE("0.00 \\u00A4' in your bank account'"); 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus 20money separator00 units of money in your bank account", ""); 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru custom.setSymbol(DecimalFormatSymbols::kPercentSymbol, "percent"); 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = "'You''ve lost ' -0.00 %' of your money today'"; 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternStr = patternStr.unescape(); 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expStr = UnicodeString(" minus You've lost minus 2000decimal00 percent of your money today", ""); 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(new DecimalFormat(patternStr, custom, status), 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t(-20), expStr, status); 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyPatterns(void) { 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i, locCount; 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale* locs = NumberFormat::getAvailableLocales(locCount); 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<locCount; ++i) { 2155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* nf = NumberFormat::createCurrencyInstance(locs[i], ec); 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Can't create NumberFormat(%s) - %s", locs[i].getName(), u_errorName(ec)); 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure currency formats do not have a variable number 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // of fraction digits 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min = nf->getMinimumFractionDigits(); 2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t max = nf->getMaximumFractionDigits(); 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != max) { 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a, b; 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.125, b); 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " min fraction digits != max fraction digits; " 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + escape(a) + 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "; x 1.125 => " + escape(b)); 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Make sure EURO currency formats have exactly 2 fraction digits 217527f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat* df = dynamic_cast<DecimalFormat*>(nf); 217627f654740f2a26ad62a5c155af9199af9e69b889claireho if (df != NULL) { 2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, df->getCurrency()) == 0) { 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (min != 2 || max != 2) { 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString a; 2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru nf->format(1.0, a); 2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + locs[i].getName() + 2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " is a EURO format but it does not have 2 fraction digits; " 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "x 1.0 => " + 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(a)); 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete nf; 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRegCurrency(void) { 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar USD[4]; 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", USD, 4, &status); 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar YEN[4]; 2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("ja_JP", YEN, 4, &status); 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar TMP[4]; 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar QQQ[] = {0x51, 0x51, 0x51, 0}; 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 22036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Unable to get currency for locale, error %s", u_errorName(status)); 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 220650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enkey = ucurr_register(YEN, "en_US", &status); 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCurrRegistryKey enUSEUROkey = ucurr_register(QQQ, "en_US_EURO", &status); 220950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US", TMP, 4, &status); 2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(YEN, TMP) != 0) { 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return YEN registered for en_US"); 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO"); 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 221950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t fallbackLen = ucurr_forLocale("en_XX_BAR", TMP, 4, &status); 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fallbackLen) { 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: tried to fallback en_XX_BAR"); 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 222550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enkey, &status)) { 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enkey"); 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucurr_forLocale("en_US", TMP, 4, &status); 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return USD for en_US after unregister of en_US"); 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 223550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(QQQ, TMP) != 0) { 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return QQQ for en_US_EURO after unregister of en_US"); 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 224050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_BLAH", TMP, 4, &status); 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(USD, TMP) != 0) { 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: could not find USD for en_US_BLAH after unregister of en"); 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 224650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!ucurr_unregister(enUSEUROkey, &status)) { 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: couldn't unregister enUSEUROkey"); 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 225050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale("en_US_EURO", TMP, 4, &status); 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(EUR, TMP) != 0) { 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: didn't return EUR for en_US_EURO after unregister of en_US_EURO"); 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; // reset 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyNames(void) { 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Do a basic check of getName() 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // USD { "US$", "US Dollar" } // 04/04/1792- 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {0x55, 0x53, 0x44, 0}; /*USD*/ 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USX[] = {0x55, 0x53, 0x58, 0}; /*USX*/ 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar CAD[] = {0x43, 0x41, 0x44, 0}; /*CAD*/ 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ITL[] = {0x49, 0x54, 0x4C, 0}; /*ITL*/ 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isChoiceFormat; 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 22696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru const UBool possibleDataError = TRUE; 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Warning: HARD-CODED LOCALE DATA in this test. If it fails, CHECK 227150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // THE LOCALE DATA before diving into the code. 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(SYMBOL_NAME)", 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 22766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 22776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USD.getName(LONG_NAME)", 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US Dollar"), 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USD, "en", 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 22826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 22836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 2285c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en", 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 22886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 22896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("$"), 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(CAD, "en_CA", 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 22946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 22956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2296c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("USD.getName(SYMBOL_NAME) in en_NZ", 2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("US$"), 2298c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString(ucurr_getName(USD, "en_NZ", 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 23006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 23016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("CAD.getName(SYMBOL_NAME)", 2303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString("CA$"), 2304c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString(ucurr_getName(CAD, "en_NZ", 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_SYMBOL_NAME, 23066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 23076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("USX.getName(LONG_NAME)", 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString("USX"), 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString(ucurr_getName(USX, "en_US", 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCURR_LONG_NAME, 23126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru &isChoiceFormat, &len, &ec)), 23136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru possibleDataError); 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_getName", ec); 231550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default or fallback warning is being returned. JB 4239. 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "es_ES", UCURR_LONG_NAME, &isChoiceFormat, 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 232150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (es_ES fallback)", 23226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "zh_TW", UCURR_LONG_NAME, &isChoiceFormat, 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 232650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (zh_TW fallback)", 23276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru U_USING_FALLBACK_WARNING == ec, TRUE, possibleDataError); 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(CAD, "en_US", UCURR_LONG_NAME, &isChoiceFormat, 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 233150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (en_US default)", 233250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho U_USING_DEFAULT_WARNING == ec || U_USING_FALLBACK_WARNING == ec, TRUE); 233350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2334b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucurr_getName(CAD, "ti", UCURR_LONG_NAME, &isChoiceFormat, 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 2336b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho assertTrue("ucurr_getName (ti default)", 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 233850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test that a default warning is being returned when falling back to root. JB 4536. 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_getName(ITL, "cy", UCURR_LONG_NAME, &isChoiceFormat, 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &len, &ec); 234250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("ucurr_getName (cy default to root)", 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_USING_DEFAULT_WARNING == ec, TRUE); 234450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO add more tests later 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyUnit(void){ 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 2351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD[] = {63, 63, 63, 0}; /*???*/ 2352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar BAD2[] = {63, 63, 65, 0}; /*???*/ 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu(USD, ec); 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyUnit", ec); 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar * r = cu.getISOCurrency(); // who is the buffer owner ? 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("getISOCurrency()", USD, r); 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit cu2(cu); 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(cu2 == cu)){ 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit copy constructed object should be same"); 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyUnit * cu3 = (CurrencyUnit *)cu.clone(); 2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*cu3 == cu)){ 2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyUnit cloned object should be same"); 2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad(BAD, ec); 2369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 2370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (cu.getIndex() == bad.getIndex()) { 2371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of different currencies should differ."); 2372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 2373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius CurrencyUnit bad2(BAD2, ec); 2374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertSuccess("CurrencyUnit", ec); 2375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad2.getIndex() != bad.getIndex()) { 2376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Indexes of unrecognized currencies should be the same."); 2377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 2378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad == bad2) { 2379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Different unrecognized currencies should not be equal."); 2380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 2381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius bad = bad2; 2382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (bad != bad2) { 2383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Currency unit assignment should be the same."); 2384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cu3; 2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyAmount(void){ 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar USD[] = {85, 83, 68, 0}; /*USD*/ 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca(9, USD, ec); 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("CurrencyAmount", ec); 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount ca2(ca); 2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount copy constructed object should be same"); 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ca2=ca; 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(ca2 == ca)){ 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount assigned object should be same"); 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 240350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CurrencyAmount *ca3 = (CurrencyAmount *)ca.clone(); 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*ca3 == ca)){ 2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("CurrencyAmount cloned object should be same"); 2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ca3; 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestSymbolsWithBadLocale(void) { 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale locDefault; 2413103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius static const char *badLocales[] = { 2414103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length < ULOC_FULLNAME_CAPACITY 2415103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME", 2416103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2417103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius // length > ULOC_FULLNAME_CAPACITY 2418103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME" 2419103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; // expect U_USING_DEFAULT_WARNING for both 2420103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2421103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unsigned int i; 24228de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (i = 0; i < UPRV_LENGTHOF(badLocales); i++) { 2423103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName = badLocales[i]; 2424103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale locBad(localeName); 242564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert TEST_ASSERT_TRUE(!locBad.isBogus()); 2426103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 2427103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString intlCurrencySymbol((UChar)0xa4); 2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius intlCurrencySymbol.append((UChar)0xa4); 243064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert 2431103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 2432103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locBad, status); 2433103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 2434103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormatSymbols mySymbols(status); 2435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (status != U_USING_DEFAULT_WARNING) { 2436103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols should return U_USING_DEFAULT_WARNING."); 2437103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2438103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { 2439103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols does not have the right locale.", locBad.getName()); 2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2441103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; 2442103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { 2443103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum); 2444103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString)); 2445103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (symbolString.length() == 0 2446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol 2447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) 2448103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { 2449103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); 2450103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2451103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2452103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2453103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2454103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale::setDefault(locDefault, status); 2455103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius logln("Current locale is %s", Locale::getDefault().getName()); 2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Check that adoptDecimalFormatSymbols and setDecimalFormatSymbols 2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * behave the same, except for memory ownership semantics. (No 2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * version of this test on Java, since Java has only one method.) 2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestAdoptDecimalFormatSymbols(void) { 2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 24686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "Fail: DecimalFormatSymbols constructor - %s", u_errorName(ec)); 2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat(" #,##0.00"); 2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.insert(0, (UChar)0x00A4); 2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, sym, ec); 2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "$ 2,350.75") { 2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 248527f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: " + str + ", expected $ 2,350.75"); 2486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym->setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.adoptDecimalFormatSymbols(sym); 2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2350.75, str); 2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 250227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: adoptDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym = new DecimalFormatSymbols(Locale::getUS(), ec); 2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete sym; 2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2(pat, sym, ec); 2512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormat constructor"); 2514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 251650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym2(Locale::getUS(), ec); 2518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: DecimalFormatSymbols constructor"); 2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym2.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "Q"); 2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.setDecimalFormatSymbols(sym2); 2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.format(2350.75, str); 2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (str == "Q 2,350.75") { 2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(str); 2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 253027f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Fail: setDecimalFormatSymbols -> " + str + ", expected Q 2,350.75"); 2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestPerMill() { 2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 2537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(ctou("###.###\\u2030"), ec); 2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("DecimalFormat ct", ec)) return; 2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###\\u2030", 2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctou("485.7\\u2030"), fmt.format(0.4857, str)); 254150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), ec); 2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sym.setSymbol(DecimalFormatSymbols::kPerMillSymbol, ctou("m")); 2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt2("", sym, ec); 2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt2.applyLocalizedPattern("###.###m", ec); 2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("setup", ec)) return; 2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals("0.4857 x ###.###m", 2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "485.7m", fmt2.format(0.4857, str)); 2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Generic test for patterns that should be legal/illegal. 2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestIllegalPatterns() { 2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Test cases: 2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "-:" for illegal patterns 2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Prefix with "+:" for legal patterns 2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* DATA[] = { 2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Unquoted special characters in the suffix are illegal 2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "-:000.000|###", 2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "+:000.000'|###'", 2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; DATA[i]; ++i) { 2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* pat=DATA[i]; 2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool valid = (*pat) == '+'; 2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat += 2; 2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(pat, ec); // locale doesn't matter here 2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec) == valid) { 2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: pattern \"%s\": %s", 2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, u_errorName(ec)); 2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 25756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: pattern \"%s\" should have %s; got %s", 2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat, (valid?"succeeded":"failed"), 2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* KEYWORDS[] = { 2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*0*/ "ref=", // <reference pattern to parse numbers> 2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*1*/ "loc=", // <locale for formats> 2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*2*/ "f:", // <pattern or '-'> <number> <exp. string> 2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*3*/ "fp:", // <pattern or '-'> <number> <exp. string> <exp. number> 2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*4*/ "rt:", // <pattern or '-'> <(exp.) number> <(exp.) string> 2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*5*/ "p:", // <pattern or '-'> <string> <exp. number> 2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*6*/ "perr:", // <pattern or '-'> <invalid string> 2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*7*/ "pat:", // <pattern or '-'> <exp. toPattern or '-' or 'err'> 2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*8*/ "fpc:", // <pattern or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0 2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return an integer representing the next token from this 2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * iterator. The integer will be an index into the given list, or 2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -1 if there are no more tokens, or -2 if the token is not on 2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the list. 2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t keywordIndex(const UnicodeString& tok) { 2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i=0; KEYWORDS[i]!=0; ++i) { 2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok==KEYWORDS[i]) { 2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return i; 2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a CurrencyAmount using the given NumberFormat, with 2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the 'delim' character separating the number and the currency. 2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void parseCurrencyAmount(const UnicodeString& str, 2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NumberFormat& fmt, 2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar delim, 2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& result, 2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& ec) { 2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num, cur; 2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = str.indexOf(delim); 2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(0, i, num); 2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.extractBetween(i+1, INT32_MAX, cur); 2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(num, n, ec); 2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result.adoptObject(new CurrencyAmount(n, cur.getTerminatedBuffer(), ec)); 2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCases() { 2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TextFile reader("NumberFormatTestCases.txt", "UTF8", ec); 2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 26346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Couldn't open NumberFormatTestCases.txt"); 2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TokenIterator tokens(&reader); 2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en", "US", ""); 2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *ref = 0, *fmt = 0; 2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *mfmt = 0; 2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat, tok, mloc, str, out, where, currAmt; 2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n; 2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) { 2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru where = UnicodeString("(") + tokens.getLineNumber() + ") "; 2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cmd = keywordIndex(tok); 2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (cmd) { 2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ref= <reference pattern> 2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref = new DecimalFormat(tok, 2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru new DecimalFormatSymbols(Locale::getUS(), ec), ec); 2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error constructing DecimalFormat"); 2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto error; 2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // loc= <locale> 2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 266727f654740f2a26ad62a5c155af9199af9e69b889claireho loc = Locale::createFromName(CharString().appendInvariantChars(tok, ec).data()); 2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: // f: 2670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: // fp: 2671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: // rt: 2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: // p: 2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat = tok; 2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = new DecimalFormat(pat, new DecimalFormatSymbols(loc, ec), ec); 2678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Pattern \"" + pat + "\": " + u_errorName(ec)); 2680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { 2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 2 || cmd == 3 || cmd == 4) { 2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // f: <pattern or '-'> <number> <exp. string> 2691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fp: <pattern or '-'> <number> <exp. string> <exp. number> 2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // rt: <pattern or '-'> <number> <string> 2693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString num; 2694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".format(" + num + ")", 2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, fmt->format(n, out.remove(), ec)); 2700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd == 3) { // fp: 2702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(num, ec)) goto error; 2703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(num, n, ec); 2704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cmd != 2) { // != f: 2707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, m, ec); 2709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 271250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // p: <pattern or '-'> <string to parse> <exp. number> 2715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expstr; 2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(expstr, ec)) goto error; 2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable exp, n; 2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ref->parse(expstr, exp, ec); 2721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->parse(str, n, ec); 2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("parse", ec); 2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + pat + "\".parse(\"" + str + "\")", 2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exp, n); 2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 8: // fpc: 2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tok != "-") { 2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mloc = tok; 2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt = MeasureFormat::createCurrencyFormat( 273427f654740f2a26ad62a5c155af9199af9e69b889claireho Locale::createFromName( 273527f654740f2a26ad62a5c155af9199af9e69b889claireho CharString().appendInvariantChars(mloc, ec).data()), ec); 2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Loc \"" + mloc + "\": " + u_errorName(ec)); 2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(tok, ec)) goto error; 2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2744f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } else if (mfmt == NULL) { 2745f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius errln("FAIL: " + where + "Loc \"" + mloc + "\": skip case using previous locale, no valid MeasureFormat"); 2746f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2747f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2748f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (!tokens.next(tok, ec)) goto error; 2749f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // fpc: <loc or '-'> <curr.amt> <exp. string> <exp. curr.amt> 2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(str, ec)) goto error; 2754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").format(" + currAmt + ")", 2757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, mfmt->format(n, out.remove(), ec)); 2758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("format", ec); 2759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(currAmt, ec)) goto error; 2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseCurrencyAmount(currAmt, *ref, (UChar)0x2F/*'/'*/, n, ec); 2762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrencyAmount", ec)) { 2763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable m; 2764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru mfmt->parseObject(str, m, ec); 2766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (assertSuccess("parseCurrency", ec)) { 2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "getCurrencyFormat(" + mloc + ").parse(\"" + str + "\")", 2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru n, m); 2769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: source " + str); 2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: 2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // perr: <pattern or '-'> <invalid string> 2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Under construction"); 2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 7: { 2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // pat: <pattern> <exp. toPattern, or '-' or 'err'> 2780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testpat; 2781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString exppat; 2782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(testpat, ec)) goto error; 2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!tokens.next(exppat, ec)) goto error; 2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool err = exppat == "err"; 2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool existingPat = FALSE; 2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testpat == "-") { 2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid command \"pat: - err\""); 2789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru existingPat = TRUE; 2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testpat = pat; 2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exppat == "-") exppat = testpat; 2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat* f = 0; 2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec2 = U_ZERO_ERROR; 2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (existingPat) { 2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = fmt; 2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f = new DecimalFormat(testpat, ec2); 2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec2)) { 2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Invalid pattern \"" + testpat + 2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" was accepted"); 2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat2; 2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertEquals(where + "\"" + testpat + "\".toPattern()", 2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exppat, f->toPattern(pat2)); 2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (err) { 2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Ok: " + where + "Invalid pattern \"" + testpat + 2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Valid pattern \"" + testpat + 2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\" failed: " + u_errorName(ec2)); 2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!existingPat) delete f; 2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } break; 2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case -1: 2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: " + where + "Unknown command \"" + tok + "\""); 2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto done; 2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru error: 2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(ec)) { 2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Unexpected EOF"); 2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 28336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(ec, "FAIL: " + where + "Unexpected " + u_errorName(ec)); 2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru done: 2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete mfmt; 2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ref; 2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Support methods 2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------- 2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool NumberFormatTest::equalValue(const Formattable& a, const Formattable& b) { 2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == b.getType()) { 2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a == b; 2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a.getType() == Formattable::kLong) { 2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kInt64) { 2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getLong() == b.getLong(); 2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 285650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (double) a.getLong() == b.getDouble(); // TODO check use of double instead of long 2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kDouble) { 2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double) b.getLong(); 2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kInt64) { 2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getDouble() == (double)b.getInt64(); 2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (a.getType() == Formattable::kInt64) { 2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b.getType() == Formattable::kLong) { 2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getLong(); 2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (b.getType() == Formattable::kDouble) { 2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return a.getInt64() == (int64_t)b.getDouble(); 2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, n, str, FALSE); 2877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru expect_rbnf(fmt, str, n); 2878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str) { 2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't round-trip format test, since we explicitly do it 2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, n, str, FALSE); 2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect(fmt, str, n); 2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect2(NumberFormat* fmt, const Formattable& n, 2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, 2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 288927f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 289027f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expect2(*fmt, n, exp); 2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable num; 2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, num, status); 2901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 290227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL: Parse failed for \"") + str + "\" - " + u_errorName(status)); 2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (equalValue(num, n)) { 2908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + str + "\" x " + 2909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num)); 2911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 291227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL \"") + str + "\" x " + 2913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat + " = " + 2914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n) { 2919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable num; 2921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(str, num, status); 2922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + str + "\""); 2924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (equalValue(num, n)) { 2927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln(UnicodeString("Ok \"") + str + " = " + 2928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num)); 2929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 2930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL \"") + str + " = " + 2931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toString(num) + ", expected " + toString(n)); 2932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::expect_rbnf(NumberFormat& fmt, const Formattable& n, 2936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw; 2938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru FieldPosition pos; 2939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n, saw, pos, status); 2941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw == exp) { 294350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(UnicodeString("Ok ") + toString(n) + 2944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\""); 2946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // We should be able to round-trip the formatted string => 2947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // number => string (but not the other way around: number 2948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // => string => number2, might have number2 != number): 2949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (rt) { 2950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable n2; 2951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.parse(exp, n2, status); 2952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 2953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\""); 2954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 2955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString saw2; 2957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (saw2 != exp) { 2960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " => \"" + saw2 + "\""); 2962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 296550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL ") + toString(n) + 2966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru " = \"" + 2967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 2968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 2969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 2970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 2971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat& fmt, const Formattable& n, 2972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& exp, UBool rt) { 2973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw; 2974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos; 2975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n, saw, pos, status); 2977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 2979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((DecimalFormat*) &fmt)->toPattern(pat); 2980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw == exp) { 2981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok ") + toString(n) + " x " + 2982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 2983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\""); 2984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // We should be able to round-trip the formatted string => 2985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // number => string (but not the other way around: number 2986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // => string => number2, might have number2 != number): 2987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rt) { 2988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable n2; 2989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(exp, n2, status); 2990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 299127f654740f2a26ad62a5c155af9199af9e69b889claireho errln(UnicodeString("FAIL: Parse failed for \"") + exp + "\" - " + u_errorName(status)); 2992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 2993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString saw2; 2995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(n2, saw2, pos, status); 2996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CHECK(status, "NumberFormat::format"); 2997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (saw2 != exp) { 2998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL \"" + exp + "\" => " + toString(n2) + 2999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " => \"" + saw2 + "\""); 3000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 300327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln(UnicodeString("FAIL ") + toString(n) + " x " + 3004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(pat) + " = \"" + 3005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru escape(saw) + "\", expected \"" + exp + "\""); 3006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expect(NumberFormat* fmt, const Formattable& n, 3010fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString& exp, UBool rt, 3011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status) { 301227f654740f2a26ad62a5c155af9199af9e69b889claireho if (fmt == NULL || U_FAILURE(status)) { 301327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("FAIL: NumberFormat constructor"); 3014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3015fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(*fmt, n, exp, rt); 3016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 3018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectCurrency(NumberFormat& nf, const Locale& locale, 3021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double value, const UnicodeString& string) { 3022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 3023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat& fmt = * (DecimalFormat*) &nf; 3024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar DEFAULT_CURR[] = {45/*-*/,0}; 3025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar curr[4]; 3026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(curr, DEFAULT_CURR); 3027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*locale.getLanguage() != 0) { 3028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucurr_forLocale(locale.getName(), curr, 4, &ec); 3029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("ucurr_forLocale", ec); 3030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr, ec); 3031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru assertSuccess("DecimalFormat::setCurrency", ec); 3032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.setCurrency(curr); //Deprecated variant, for coverage only 3033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 3035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(value, s); 3036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s.findAndReplace((UChar32)0x00A0, (UChar32)0x0020); 3037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Default display of the number yields "1234.5599999999999" 3039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // instead of "1234.56". Use a formatter to fix this. 304050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberFormat* f = 3041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::createInstance(Locale::getUS(), ec); 3042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString v; 3043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 3044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Oops; bad formatter. Use default op+= display. 3045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru v = (UnicodeString)"" + value; 3046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setMaximumFractionDigits(4); 3048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->setGroupingUsed(FALSE); 3049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f->format(value, v); 3050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete f; 3052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (s == string) { 3054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Ok: " + v + " x " + curr + " => " + prettify(s)); 3055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: " + v + " x " + curr + " => " + prettify(s) + 3057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + prettify(string)); 3058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPat(DecimalFormat& fmt, const UnicodeString& exp) { 3062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pat; 3063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.toPattern(pat); 3064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pat == exp) { 3065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\""); 3066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\", expected \"" + exp + "\""); 3068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 3072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos) { 3073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, 0, (UnicodeString)""); 3074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 3076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, UChar pad) { 3077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectPad(fmt, pat, pos, width, UnicodeString(pad)); 3078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::expectPad(DecimalFormat& fmt, const UnicodeString& pat, 3080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, int32_t width, const UnicodeString& pad) { 3081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t apos = 0, awidth = 0; 3082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString apadStr; 3083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.applyPattern(pat, status); 3085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 3086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = fmt.getPadPosition(); 3087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = fmt.getFormatWidth(); 3088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr=fmt.getPadCharacterString(); 3089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apos = -1; 3091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru awidth = width; 3092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru apadStr = pad; 3093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (apos == pos && awidth == width && apadStr == pad) { 3095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString infoStr; 3096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos == ILLEGAL) { 3097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru infoStr = UnicodeString(" width=", "") + awidth + UnicodeString(" pad=", "") + apadStr; 3098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(UnicodeString("Ok \"") + pat + "\" pos=" + apos + infoStr); 3100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("FAIL \"") + pat + "\" pos=" + apos + 3102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru " width=" + awidth + " pad=" + apadStr + 3103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ", expected " + pos + " " + width + " " + pad); 3104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 310659d709d503bab6e2b61931737e662dd293b40578ccornelius 310759d709d503bab6e2b61931737e662dd293b40578ccornelius// This test is flaky b/c the symbols for CNY and JPY are equivalent in this locale - FIXME 310859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCompatibleCurrencies() { 310959d709d503bab6e2b61931737e662dd293b40578ccornelius/* 3110fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar JPY[] = {0x4A, 0x50, 0x59, 0}; 3111fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar CNY[] = {0x43, 0x4E, 0x59, 0}; 311259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 311359d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmt( 311459d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getUS(), status)); 311559d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 311659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Could not create number format instance."); 311759d709d503bab6e2b61931737e662dd293b40578ccornelius return; 311859d709d503bab6e2b61931737e662dd293b40578ccornelius } 311959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 312059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\u00A51,235"); 312159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign\n", __FILE__, __LINE__); 312259d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, JPY, 1235, "\\uFFE51,235"); 312359d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign\n", __FILE__, __LINE__); 312459d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmt, CNY, 1235, "CN\\u00A51,235"); 312559d709d503bab6e2b61931737e662dd293b40578ccornelius 312659d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtTW( 312759d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getTaiwan(), status)); 312859d709d503bab6e2b61931737e662dd293b40578ccornelius 312959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in TW\n", __FILE__, __LINE__); 313059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\u00A51,235"); 313159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in TW\n", __FILE__, __LINE__); 313259d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtTW, CNY, 1235, "\\uFFE51,235"); 313359d709d503bab6e2b61931737e662dd293b40578ccornelius 313459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<NumberFormat> fmtJP( 313559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createCurrencyInstance(Locale::getJapan(), status)); 313659d709d503bab6e2b61931737e662dd293b40578ccornelius 313759d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of halfwidth yen sign in JP\n", __FILE__, __LINE__); 313859d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\u00A51,235"); 313959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d - testing parse of fullwidth yen sign in JP\n", __FILE__, __LINE__); 314059d709d503bab6e2b61931737e662dd293b40578ccornelius expectParseCurrency(*fmtJP, JPY, 1235, "\\uFFE51,235"); 314159d709d503bab6e2b61931737e662dd293b40578ccornelius 314259d709d503bab6e2b61931737e662dd293b40578ccornelius // more.. 314359d709d503bab6e2b61931737e662dd293b40578ccornelius*/ 314459d709d503bab6e2b61931737e662dd293b40578ccornelius} 314559d709d503bab6e2b61931737e662dd293b40578ccornelius 314659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text) { 314759d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 314859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString utext = ctou(text); 314959d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<CurrencyAmount> currencyAmount(fmt.parseCurrency(utext, ppos)); 315059d709d503bab6e2b61931737e662dd293b40578ccornelius if (!ppos.getIndex()) { 315159d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Parse of ") + utext + " should have succeeded."); 315259d709d503bab6e2b61931737e662dd293b40578ccornelius return; 315359d709d503bab6e2b61931737e662dd293b40578ccornelius } 315459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 315559d709d503bab6e2b61931737e662dd293b40578ccornelius 315659d709d503bab6e2b61931737e662dd293b40578ccornelius char theInfo[100]; 315759d709d503bab6e2b61931737e662dd293b40578ccornelius sprintf(theInfo, "For locale %s, string \"%s\", currency ", 315859d709d503bab6e2b61931737e662dd293b40578ccornelius fmt.getLocale(ULOC_ACTUAL_LOCALE, status).getBaseName(), 315959d709d503bab6e2b61931737e662dd293b40578ccornelius text); 316059d709d503bab6e2b61931737e662dd293b40578ccornelius u_austrcpy(theInfo+uprv_strlen(theInfo), currency); 316159d709d503bab6e2b61931737e662dd293b40578ccornelius 316259d709d503bab6e2b61931737e662dd293b40578ccornelius char theOperation[100]; 316359d709d503bab6e2b61931737e662dd293b40578ccornelius 316459d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 316559d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check amount:"); 316659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(theOperation, amount == currencyAmount->getNumber().getDouble(status)); 316759d709d503bab6e2b61931737e662dd293b40578ccornelius 316859d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcpy(theOperation, theInfo); 316959d709d503bab6e2b61931737e662dd293b40578ccornelius uprv_strcat(theOperation, ", check currency:"); 317059d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(theOperation, currency, currencyAmount->getISOCurrency()); 317159d709d503bab6e2b61931737e662dd293b40578ccornelius} 317259d709d503bab6e2b61931737e662dd293b40578ccornelius 317359d709d503bab6e2b61931737e662dd293b40578ccornelius 3174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestJB3832(){ 3175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* localeID = "pt_PT@currency=PTE"; 3176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc(localeID); 3177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3178f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString expected(CharsToUnicodeString("1,150$50\\u00A0\\u200B")); // per cldrbug 7670 3179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s; 3180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyFmt = NumberFormat::createCurrencyInstance(loc, status); 3181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 31826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Could not create currency formatter for locale %s - %s", localeID, u_errorName(status)); 3183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyFmt->format(1150.50, s); 3186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s!=expected){ 318750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln(UnicodeString("FAIL: Expected: ")+expected 318850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho + UnicodeString(" Got: ") + s 3189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 3190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 3192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 3193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyFmt; 3195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHost() 3198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 3199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM_USES_ONLY_WIN32_API 3200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Win32NumberTest::testLocales(this); 3201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 3202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale loc("en_US@compat=host"); 3203b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (UNumberFormatStyle k = UNUM_DECIMAL; 3204b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k < UNUM_FORMAT_STYLE_COUNT; k = (UNumberFormatStyle)(k+1)) { 3205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3206b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho LocalPointer<NumberFormat> full(NumberFormat::createInstance(loc, k, status)); 3207b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (!NumberFormat::isStyleSupported(k)) { 3208b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (status != U_UNSUPPORTED_ERROR) { 3209b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAIL: expected style %d to be unsupported - %s", 3210b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 3211b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 3212b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 3213b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 3214b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (full.isNull() || U_FAILURE(status)) { 3215b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("FAIL: Can't create number instance of style %d for host - %s", 3216b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho k, u_errorName(status)); 3217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString result1; 3220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable number(10.00); 3221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->format(number, result1, status); 3222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't format for host"); 3224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable formattable; 3227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru full->parse(result1, formattable, status); 3228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Can't parse for host"); 3230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestHostClone() 3236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 3237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 3238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Verify that a cloned formatter gives the same results 3239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru and is useable after the original has been deleted. 3240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 3241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This is mainly important on Windows. 3242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale loc("en_US@compat=host"); 3244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate now = Calendar::getNow(); 3245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *full = NumberFormat::createInstance(loc, status); 3246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (full == NULL || U_FAILURE(status)) { 32476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Can't create Relative date instance - %s", u_errorName(status)); 3248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result1; 3251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full->format(now, result1, status); 3252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *fullClone = full->clone(); 3253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete full; 3254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full = NULL; 3255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString result2; 3257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fullClone->format(now, result2, status); 3258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: format failure."); 3260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result1 != result2) { 3262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Clone returned different result from non-clone."); 3263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fullClone; 3265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestCurrencyFormat() 3268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 3269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test is here to increase code coverage. 3270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *cloneObj; 3272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 3273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable toFormat, result; 3274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar ISO_CODE[4] = {0x0047, 0x0042, 0x0050, 0}; 3275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveDefaultLocale = Locale::getDefault(); 3277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( Locale::getUK(), status ); 3278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("couldn't set default Locale!"); 3280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MeasureFormat *measureObj = MeasureFormat::createCurrencyFormat(status); 3284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault( saveDefaultLocale, status ); 3285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 32866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Status %s", u_errorName(status)); 3287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj = (MeasureFormat *)measureObj->clone(); 3290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cloneObj == NULL) { 3291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone doesn't work"); 3292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toFormat.adoptObject(new CurrencyAmount(1234.56, ISO_CODE, status)); 3295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->format(toFormat, str, status); 3296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru measureObj->parseObject(str, result, status); 3297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 3298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 3299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 3301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("measureObj does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 3302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 3304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str.truncate(0); 3305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->format(toFormat, str, status); 3306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cloneObj->parseObject(str, result, status); 3307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 3308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Status %s", u_errorName(status)); 3309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (result != toFormat) { 3311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Clone does not round trip. Formatted string was \"" + str + "\" Got: " + toString(result) + " Expected: " + toString(toFormat)); 3312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*measureObj != *cloneObj) { 3314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Cloned object is not equal to the original object"); 3315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete measureObj; 3317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cloneObj; 3318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_USELESS_COLLATOR_ERROR; 3320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (MeasureFormat::createCurrencyFormat(status) != NULL) { 3321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("createCurrencyFormat should have returned NULL."); 3322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Port of ICU4J rounding test. */ 3326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::TestRounding() { 3327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 3329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 33316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 3332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 3333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int roundingIncrements[]={1, 2, 5, 20, 50, 100}; 3336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int testValues[]={0, 300}; 3337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int j=0; j<2; j++) { 3339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int mode=DecimalFormat::kRoundUp;mode<DecimalFormat::kRoundHalfEven;mode++) { 3340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingMode((DecimalFormat::ERoundingMode)mode); 3341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int increment=0; increment<6; increment++) { 3342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double base=testValues[j]; 3343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double rInc=roundingIncrements[increment]; 3344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 3345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rInc=1.000000000/rInc; 3346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkRounding(df, base, 20, rInc); 3347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru delete df; 3351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3353103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestRoundingPattern() { 3354103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 3355103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius struct { 3356103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString pattern; 3357103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double testCase; 3358103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString expected; 3359103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } tests[] = { 3360103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"##0.65", 1.234, (UnicodeString)"1.30" }, 3361103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { (UnicodeString)"#50", 1230, (UnicodeString)"1250" } 3362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 33638de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t numOfTests = UPRV_LENGTHOF(tests); 3364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UnicodeString result; 3365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius DecimalFormat *df = (DecimalFormat*)NumberFormat::createCurrencyInstance(Locale::getEnglish(), status); 3367103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 3368103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("Unable to create decimal formatter. - %s", u_errorName(status)); 3369103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 3370103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3371103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3372103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (int32_t i = 0; i < numOfTests; i++) { 3373103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius result.remove(); 3374103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3375103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->applyPattern(tests[i].pattern, status); 3376103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 3377103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Unable to apply pattern to decimal formatter. - %s", u_errorName(status)); 3378103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3379103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3380103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius df->format(tests[i].testCase, result); 3381103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3382103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (result != tests[i].expected) { 3383103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("String Pattern Rounding Test Failed: Pattern: \"" + tests[i].pattern + "\" Number: " + tests[i].testCase + " - Got: " + result + " Expected: " + tests[i].expected); 3384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3385103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3386103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3387103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete df; 3388103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 3389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid NumberFormatTest::checkRounding(DecimalFormat* df, double base, int iterations, double increment) { 3391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->setRoundingIncrement(increment); 3392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double lastParsed=INT32_MIN; //Intger.MIN_VALUE 3393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i=-iterations; i<=iterations;i++) { 3394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double iValue=base+(increment*(i*0.1)); 3395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double smallIncrement=0.00000001; 3396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (iValue!=0) { 3397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru smallIncrement*=iValue; 3398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //we not only test the value, but some values in a small range around it 3400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue-smallIncrement, lastParsed); 3401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue, lastParsed); 3402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lastParsed=checkRound(df, iValue+smallIncrement, lastParsed); 3403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querudouble NumberFormatTest::checkRound(DecimalFormat* df, double iValue, double lastParsed) { 3407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 3408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString formattedDecimal; 3409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double parsed; 3410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result; 3411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->format(iValue, formattedDecimal, status); 3412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error formatting number."); 3415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru df->parse(formattedDecimal, result, status); 3418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error parsing number."); 3421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parsed=result.getDouble(); 3424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lastParsed>parsed) { 3426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Rounding wrong direction! %d > %d", lastParsed, parsed); 3427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 3428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return lastParsed; 3430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 3431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3432c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid NumberFormatTest::TestNonpositiveMultiplier() { 3433c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3434c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormatSymbols US(Locale::getUS(), status); 3435c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormatSymbols constructor"); 3436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru DecimalFormat df(UnicodeString("0"), US, status); 3437c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CHECK(status, "DecimalFormat(0)"); 343850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3439c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test zero multiplier 3440c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3441c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru int32_t mult = df.getMultiplier(); 3442c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(0); 3443c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != mult) { 3444c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(0) did not ignore its zero input"); 3445c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 344650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3447c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // test negative multiplier 344850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3449c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-1); 3450c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (df.getMultiplier() != -1) { 3451c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru errln("DecimalFormat.setMultiplier(-1) ignored its negative input"); 3452c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 3453c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 345450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3455c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1122.123", -1122.123); 3456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1122.123", 1122.123); 3457c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "1.2", -1.2); 3458c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, "-1.2", 1.2); 3459c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 346050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Note: the tests with the final parameter of FALSE will not round trip. 346150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The initial numeric value will format correctly, after the multiplier. 346250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Parsing the formatted text will be out-of-range for an int64, however. 346350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // The expect() function could be modified to detect this and fall back 346450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // to looking at the decimal parsed value, but it doesn't. 346550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN, "9223372036854775808", FALSE); 346650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MIN+1, "9223372036854775807"); 346750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)-123, "123"); 346850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, (int64_t)123, "-123"); 3469c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, U_INT64_MAX-1, "-9223372036854775806"); 347050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, U_INT64_MAX, "-9223372036854775807"); 3471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3472c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-2); 3473c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MIN/2)-1, "-9223372036854775806"); 347450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2), "-9223372036854775808"); 347550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MIN/2)+1, "-9223372036854775810", FALSE); 3476c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru df.setMultiplier(-7); 347850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7)-1, "9223372036854775814", FALSE); 347950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expect(df, -(U_INT64_MAX/7), "9223372036854775807"); 3480c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru expect(df, -(U_INT64_MAX/7)+1, "9223372036854775800"); 3481c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) all the following int64_t tests once BigInteger is ported 3483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // (right now the big numbers get turned into doubles and lose tons of accuracy) 3484c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX, Int64ToUnicodeString(-U_INT64_MAX)); 3485c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN, UnicodeString(Int64ToUnicodeString(U_INT64_MIN), 1)); 3486c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MAX / 2, Int64ToUnicodeString(-(U_INT64_MAX / 2))); 3487c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, U_INT64_MIN / 2, Int64ToUnicodeString(-(U_INT64_MIN / 2))); 3488c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3489c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru // TODO: uncomment (and fix up) once BigDecimal is ported and DecimalFormat can handle it 3490c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MAX_VALUE), BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, BigDecimal.valueOf(Long.MIN_VALUE), BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3492c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MAX_VALUE), java.math.BigDecimal.valueOf(Long.MAX_VALUE).negate().toString()); 3493c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru //expect2(df, java.math.BigDecimal.valueOf(Long.MIN_VALUE), java.math.BigDecimal.valueOf(Long.MIN_VALUE).negate().toString()); 3494c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru} 3495c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 3496b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 3497b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * stringToParse; 3498b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPos; 3499b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex; 3500b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool lenient; 3501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TestSpaceParsingItem; 3502c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 350350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestSpaceParsing() { 3505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the string to be parsed, parsed position, parsed error index 3507b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const TestSpaceParsingItem DATA[] = { 3508b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // TOTO: Update the following TODOs, some may be handled now 3509b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, FALSE}, 3510b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, FALSE}, 3511b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, FALSE}, 3512b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$ 124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3513b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"$\\u00A0124 ", 5, -1, FALSE}, // TODO: need to handle space correctly 3514b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3515b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 0, 1, FALSE}, // errorIndex used to be 0, now 1 (better) 3516b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 0, 0, FALSE}, // TODO: need to handle space correctly 3517b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 0, 3, FALSE}, // TODO: need to handle space correctly 3518b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // {"124 $", 5, -1, FALSE}, // TODO: OK or not, need currency spacing rule 3519b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 0, 3, FALSE}, 3520b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124", 4, -1, TRUE}, 3521b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 $124", 4, -1, TRUE}, 3522b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$124 ", 4, -1, TRUE}, 3523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$ 124 ", 5, -1, TRUE}, 3524b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"$\\u00A0124 ", 5, -1, TRUE}, 3525b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {" $ 124 ", 6, -1, TRUE}, 3526b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124$", 4, -1, TRUE}, // TODO: need to handle trailing currency correctly 3527b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124$", 3, -1, TRUE}, 3528b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho //{"124 $", 5, -1, TRUE}, // TODO: OK or not, need currency spacing rule 3529b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"124 $", 4, -1, TRUE}, 3530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3532b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho Locale locale("en_US"); 3533b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* foo = NumberFormat::createCurrencyInstance(locale, status); 3534b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 3535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 35398de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i = 0; i < UPRV_LENGTHOF(DATA); ++i) { 3540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ParsePosition parsePosition(0); 3541b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString stringToBeParsed = ctou(DATA[i].stringToParse); 3542b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int parsedPosition = DATA[i].parsedPos; 3543b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int errorIndex = DATA[i].errorIndex; 3544b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho foo->setLenient(DATA[i].lenient); 3545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru foo->parse(stringToBeParsed, result, parsePosition); 3547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getIndex() != parsedPosition || 3548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parsePosition.getErrorIndex() != errorIndex) { 3549b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("FAILED parse " + stringToBeParsed + "; lenient: " + DATA[i].lenient + "; wrong position, expected: (" + parsedPosition + ", " + errorIndex + "); got (" + parsePosition.getIndex() + ", " + parsePosition.getErrorIndex() + ")"); 3550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parsePosition.getErrorIndex() == -1 && 355250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result.getType() == Formattable::kLong && 3553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != 124) { 3554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + stringToBeParsed + "; wrong number, expect: 124, got " + result.getLong()); 3555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete foo; 3558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/** 3561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Test using various numbering systems and numbering system keyword. 3562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 3563103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 3564103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *localeName; 3565103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double value; 3566103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UBool isRBNF; 3567103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *expectedResult; 3568103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestNumberingSystemItem; 3569103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid NumberFormatTest::TestNumberingSystems() { 3571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3572103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem DATA[] = { 3573103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=thai", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, 3574103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hebr", 5678.0, TRUE, "\\u05D4\\u05F3\\u05EA\\u05E8\\u05E2\\u05F4\\u05D7" }, 3575103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=arabext", 1234.567, FALSE, "\\u06F1\\u066c\\u06F2\\u06F3\\u06F4\\u066b\\u06F5\\u06F6\\u06F7" }, 357659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_EG", 1234.567, FALSE, "\\u0661\\u066C\\u0662\\u0663\\u0664\\u066b\\u0665\\u0666\\u0667" }, 3577103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "th_TH@numbers=traditional", 1234.567, FALSE, "\\u0E51,\\u0E52\\u0E53\\u0E54.\\u0E55\\u0E56\\u0E57" }, // fall back to native per TR35 3578103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ar_MA", 1234.567, FALSE, "1.234,567" }, 3579103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "en_US@numbers=hanidec", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3580103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=native", 1234.567, FALSE, "\\u0BE7,\\u0BE8\\u0BE9\\u0BEA.\\u0BEB\\u0BEC\\u0BED" }, 3581103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=traditional", 1235.0, TRUE, "\\u0BF2\\u0BE8\\u0BF1\\u0BE9\\u0BF0\\u0BEB" }, 3582103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "ta_IN@numbers=finance", 1234.567, FALSE, "1,234.567" }, // fall back to default per TR35 3583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=native", 1234.567, FALSE, "\\u4e00,\\u4e8c\\u4e09\\u56db.\\u4e94\\u516d\\u4e03" }, 3584103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "zh_TW@numbers=traditional", 1234.567, TRUE, "\\u4E00\\u5343\\u4E8C\\u767E\\u4E09\\u5341\\u56DB\\u9EDE\\u4E94\\u516D\\u4E03" }, 358554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "zh_TW@numbers=finance", 1234.567, TRUE, "\\u58F9\\u4EDF\\u8CB3\\u4F70\\u53C3\\u62FE\\u8086\\u9EDE\\u4F0D\\u9678\\u67D2" }, 3586103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { NULL, 0, FALSE, NULL } 3587103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius }; 3588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3589103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode ec; 359027f654740f2a26ad62a5c155af9199af9e69b889claireho 3591103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TestNumberingSystemItem *item; 3592103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (item = DATA; item->localeName != NULL; item++) { 3593103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3594103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc = Locale::createFromName(item->localeName); 359550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3596fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *origFmt = NumberFormat::createInstance(loc,ec); 3597103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(ec)) { 3598103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: getInstance(%s) - %s", item->localeName, u_errorName(ec)); 3599103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius continue; 3600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3601fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Clone to test ticket #10682 3602fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius NumberFormat *fmt = (NumberFormat *) origFmt->clone(); 3603fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete origFmt; 3604fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3605103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3606103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (item->isRBNF) { 3607103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect3(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3608103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 3609103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expect2(*fmt,item->value,CharsToUnicodeString(item->expectedResult)); 3610103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 3611103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt; 3612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Test bogus keyword value 3616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ec = U_ZERO_ERROR; 3617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius Locale loc4 = Locale::createFromName("en_US@numbers=foobar"); 3618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* fmt4= NumberFormat::createInstance(loc4, ec); 3619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( ec != U_UNSUPPORTED_ERROR ) { 3620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getInstance(en_US@numbers=foobar) should have returned U_UNSUPPORTED_ERROR"); 3621103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete fmt4; 3622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 362427f654740f2a26ad62a5c155af9199af9e69b889claireho ec = U_ZERO_ERROR; 362550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns = NumberingSystem::createInstance(ec); 362650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(ec)) { 362750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: NumberingSystem::createInstance(ec); - %s", u_errorName(ec)); 362850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 362950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 363027f654740f2a26ad62a5c155af9199af9e69b889claireho if ( ns != NULL ) { 363127f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getDynamicClassID(); 363227f654740f2a26ad62a5c155af9199af9e69b889claireho ns->getStaticClassID(); 363327f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 363427f654740f2a26ad62a5c155af9199af9e69b889claireho errln("FAIL: getInstance() returned NULL."); 363527f654740f2a26ad62a5c155af9199af9e69b889claireho } 363650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 363750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho NumberingSystem *ns1 = new NumberingSystem(*ns); 363850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ns1 == NULL) { 363950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: NumberSystem copy constructor returned NULL."); 364050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 364150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 364250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns1; 364350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete ns; 3644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 3645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 364850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestMultiCurrencySign() { 3650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][6] = { 3651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the fields in the following test are: 365250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 365350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // currency pattern (with negative pattern), 3654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency number to be formatted, 3655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency symbol name, such as "$" for USD, 3656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using currency ISO name, such as "USD", 3657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency format using plural name, such as "US dollars". 3658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for US locale 365950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1234.56", "$1,234.56", "USD1,234.56", "US dollars1,234.56"}, 366050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "-1234.56", "-$1,234.56", "-USD1,234.56", "-US dollars1,234.56"}, 366159d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "\\u00A4#,##0.00;-\\u00A4#,##0.00", "1", "$1.00", "USD1.00", "US dollars1.00"}, 3662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // for CHINA locale 3663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1234.56", "\\uFFE51,234.56", "CNY1,234.56", "\\u4EBA\\u6C11\\u5E011,234.56"}, 3664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "-1234.56", "(\\uFFE51,234.56)", "(CNY1,234.56)", "(\\u4EBA\\u6C11\\u5E011,234.56)"}, 3665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"zh_CN", "\\u00A4#,##0.00;(\\u00A4#,##0.00)", "1", "\\uFFE51.00", "CNY1.00", "\\u4EBA\\u6C11\\u5E011.00"} 3666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar doubleCurrencySign[] = {0xA4, 0xA4, 0}; 3669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString doubleCurrencyStr(doubleCurrencySign); 3670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar tripleCurrencySign[] = {0xA4, 0xA4, 0xA4, 0}; 3671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString tripleCurrencyStr(tripleCurrencySign); 3672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 36738de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) { 3674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* locale = DATA[i][0]; 3675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat = ctou(DATA[i][1]); 3676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][2]); 3677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale(locale), status); 3679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j=1; j<=3; ++j) { 3684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // j represents the number of currency sign in the pattern. 3685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (j == 2) { 3686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4"), doubleCurrencyStr); 3687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (j == 3) { 3688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat = pat.findAndReplace(ctou("\\u00A4\\u00A4"), tripleCurrencyStr); 3689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, new DecimalFormatSymbols(*sym), status); 3692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED init DecimalFormat "); 3694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString s; 3698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ((NumberFormat*) fmt)->format(numberToBeFormat, s); 3699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][j+2] is the currency format result using 3706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 'j' number of currency sign. 3707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString currencyFormatResult = ctou(DATA[i][2+j]); 3708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (s.compare(currencyFormatResult)) { 3709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL format: Expected " + currencyFormatResult + "; Got " + s); 3710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // mix style parsing 3712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int k=3; k<=5; ++k) { 3713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][3] is the currency format result using a 3714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // single currency sign. 3715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // double currency sign. 3717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // triple currency sign. 3719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormat = ctou(DATA[i][k]); 3720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseRes; 3722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(oneCurrencyFormat, parseRes, status); 3723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kDouble && 372550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho parseRes.getDouble() != numberToBeFormat) || 3726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseRes.getType() == Formattable::kLong && 3727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseRes.getLong() != numberToBeFormat)) { 3728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAILED parse " + oneCurrencyFormat + "; (i, j, k): " + 3729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru i + ", " + j + ", " + k); 3730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 373950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyFormatForMixParsing() { 3741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MeasureFormat* curFmt = MeasureFormat::createCurrencyFormat(Locale("en_US"), status); 3743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* formats[] = { 3748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1,234.56", // string to be parsed 3749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1,234.56", 3750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1,234.56", 3751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1,234.56 US dollars" 3752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 375327f654740f2a26ad62a5c155af9199af9e69b889claireho const CurrencyAmount* curramt = NULL; 37548de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i = 0; i < UPRV_LENGTHOF(formats); ++i) { 3755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(formats[i]); 375627f654740f2a26ad62a5c155af9199af9e69b889claireho logln(UnicodeString("stringToBeParsed: ") + stringToBeParsed); 3757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru curFmt->parseObject(stringToBeParsed, result, status); 3760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 376150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("FAIL: measure format parsing: '%s' ec: %s", formats[i], u_errorName(status)); 376250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if (result.getType() != Formattable::kObject || 376327f654740f2a26ad62a5c155af9199af9e69b889claireho (curramt = dynamic_cast<const CurrencyAmount*>(result.getObject())) == NULL || 376427f654740f2a26ad62a5c155af9199af9e69b889claireho curramt->getNumber().getDouble() != 1234.56 || 376527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString(curramt->getISOCurrency()).compare(ISO_CURRENCY_USD) 376627f654740f2a26ad62a5c155af9199af9e69b889claireho ) { 3767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: getCurrencyFormat of default locale (en_US) failed roundtripping the number "); 376827f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getNumber().getDouble() != 1234.56) { 376927f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong number, expect: 1234.56" + ", got: " + curramt->getNumber().getDouble()); 3770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 377127f654740f2a26ad62a5c155af9199af9e69b889claireho if (curramt->getISOCurrency() != ISO_CURRENCY_USD) { 377227f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"wong currency, expect: USD" + ", got: " + curramt->getISOCurrency()); 3773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete curFmt; 3777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 378050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestDecimalFormatCurrencyParse() { 3782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Locale.US 3783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormatSymbols* sym = new DecimalFormatSymbols(Locale("en_US"), status); 3785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete sym; 3787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString pat; 3790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currency = 0x00A4; 3791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // "\xA4#,##0.00;-\xA4#,##0.00" 3792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat.append(currency).append(currency).append(currency).append("#,##0.00;-").append(currency).append(currency).append(currency).append("#,##0.00"); 3793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat* fmt = new DecimalFormat(pat, sym, status); 3794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 3796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("failed to new DecimalFormat in TestDecimalFormatCurrencyParse"); 3797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 3798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[][2] = { 3800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 3801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // string to be parsed, the parsed result (number) 380250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1.00", "1"}, 380350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1.00", "1"}, 380450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1.00 US dollar", "1"}, 380550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"$1,234.56", "1234.56"}, 380650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"USD1,234.56", "1234.56"}, 380750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"1,234.56 US dollar", "1234.56"}, 3808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 38098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i = 0; i < UPRV_LENGTHOF(DATA); ++i) { 3810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString stringToBeParsed = ctou(DATA[i][0]); 3811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double parsedResult = atof(DATA[i][1]); 3812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable result; 3814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmt->parse(stringToBeParsed, result, status); 3815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kDouble && 3817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getDouble() != parsedResult) || 3818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (result.getType() == Formattable::kLong && 3819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru result.getLong() != parsedResult)) { 3820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"FAIL parse: Expected " + parsedResult); 3821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete fmt; 382450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 3825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3826b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 382750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid 3828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyIsoPluralFormat() { 3829b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 383150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 383750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 383859d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollars"}, 3839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1234.56", "USD", "$1,234.56", "USD1,234.56", "1,234.56 US dollars"}, 384059d709d503bab6e2b61931737e662dd293b40578ccornelius {"en_US", "-1234.56", "USD", "-$1,234.56", "-USD1,234.56", "-1,234.56 US dollars"}, 3841c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"zh_CN", "1", "USD", "US$1.00", "USD1.00", "1.00\\u7F8E\\u5143"}, 3842c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"zh_CN", "1234.56", "USD", "US$1,234.56", "USD1,234.56", "1,234.56\\u7F8E\\u5143"}, 3843c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"zh_CN", "1", "CNY", "\\uFFE51.00", "CNY1.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 3844c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"zh_CN", "1234.56", "CNY", "\\uFFE51,234.56", "CNY1,234.56", "1,234.56\\u4EBA\\u6C11\\u5E01"}, 3845c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"ru_RU", "1", "RUB", "1,00\\u00A0\\u20BD", "1,00\\u00A0RUB", "1,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 3846c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"ru_RU", "2", "RUB", "2,00\\u00A0\\u20BD", "2,00\\u00A0RUB", "2,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 3847c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"ru_RU", "5", "RUB", "5,00\\u00A0\\u20BD", "5,00\\u00A0RUB", "5,00 \\u0440\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u043E\\u0433\\u043E \\u0440\\u0443\\u0431\\u043B\\u044F"}, 3848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test locale without currency information 384950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho {"root", "-1.23", "USD", "-US$\\u00A01.23", "-USD\\u00A01.23", "-1.23 USD"}, 3850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test choice format 3851c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"es_AR", "1", "INR", "INR\\u00A01,00", "INR\\u00A01,00", "1,00 rupia india"}, 3852b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 3853b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3854b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3855b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3856b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 385850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3859f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) { 3860f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 0; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 3861b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNumberFormatStyle k = currencyStyles[kIndex]; 3862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 3868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 38706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 387427f654740f2a26ad62a5c155af9199af9e69b889claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 388150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 3884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 3887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 3888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 3889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 3890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 3892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 389350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 3894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 3895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 3896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 3897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 3898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 3899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 3900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 3902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 3903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 3904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 3905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 3906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 3907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 390850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"FAIL: getCurrencyFormat of locale " + 3909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru localeString + " failed roundtripping the number"); 3910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 3911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getDouble()); 3912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 3913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"expected: " + numberToBeFormat + "; actual: " +parseResult.getLong()); 3914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 391850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 3919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 3921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 3922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 3923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestCurrencyParsing() { 3924b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* DATA[][6] = { 3925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the data are: 392650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // locale, 3927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency amount to be formatted, 3928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // currency ISO code to be formatted, 3929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using CURRENCYSTYLE, 3930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using ISOCURRENCYSTYLE, 3931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // format result using PLURALCURRENCYSTYLE, 3932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru {"en_US", "1", "USD", "$1.00", "USD1.00", "1.00 US dollar"}, 393359d709d503bab6e2b61931737e662dd293b40578ccornelius {"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"}, 3934c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"es_AR", "1", "USD", "US$\\u00A01,00", "USD\\u00A01,00", "1,00 d\\u00f3lar estadounidense"}, 393564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert {"ar_EG", "1", "USD", "\\u0661\\u066b\\u0660\\u0660\\u00a0US$", "\\u0661\\u066b\\u0660\\u0660\\u00a0USD", "\\u0661\\u066b\\u0660\\u0660 \\u062f\\u0648\\u0644\\u0627\\u0631 \\u0623\\u0645\\u0631\\u064a\\u0643\\u064a"}, 393664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert {"fa_CA", "1", "USD", "\\u06f1\\u066b\\u06f0\\u06f0\\u00a0\\u061c$", "\\u06f1\\u066b\\u06f0\\u06f0\\u00a0\\u061cUSD", "\\u06f1\\u066b\\u06f0\\u06f0 \\u062f\\u0644\\u0627\\u0631 \\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627"}, 393764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert {"he_IL", "1", "USD", "\\u200f1.00\\u00a0$", "\\u200f1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"}, 393859d709d503bab6e2b61931737e662dd293b40578ccornelius {"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 Ameri\\u010dki dolar"}, 3939b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"id_ID", "1", "USD", "US$1,00", "USD1,00", "1,00 Dolar Amerika Serikat"}, 394059d709d503bab6e2b61931737e662dd293b40578ccornelius {"it_IT", "1", "USD", "1,00\\u00a0US$", "1,00\\u00a0USD", "1,00 Dollaro Statunitense"}, 3941c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"ko_KR", "1", "USD", "US$1.00", "USD1.00", "1.00 \\ubbf8\\uad6d \\ub2ec\\ub7ec"}, 39421b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "USD", "$1.00", "USD1.00", "1.00\\u7c73\\u30c9\\u30eb"}, 3943c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"zh_CN", "1", "CNY", "\\uFFE51.00", "CNY01.00", "1.00\\u4EBA\\u6C11\\u5E01"}, 394459d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_TW", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 394559d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "CNY", "CN\\u00A51.00", "CNY1.00", "1.00 \\u4eba\\u6c11\\u5e63"}, 394659d709d503bab6e2b61931737e662dd293b40578ccornelius {"zh_Hant", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00 \\u65e5\\u5713"}, 39471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "JPY", "\\uFFE51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"}, 39481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert {"ja_JP", "1", "JPY", "\\u00A51.00", "JPY1.00", "1.00\\u65e5\\u672c\\u5186"}, 3949c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {"ru_RU", "1", "RUB", "1,00\\u00A0\\u20BD", "1,00\\u00A0RUB", "1,00 \\u0420\\u043E\\u0441\\u0441\\u0438\\u0439\\u0441\\u043A\\u0438\\u0439 \\u0440\\u0443\\u0431\\u043B\\u044C"} 3950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 3951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const UNumberFormatStyle currencyStyles[] = { 3952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY, 3953b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_ISO, 3954b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_PLURAL 3955b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 395659d709d503bab6e2b61931737e662dd293b40578ccornelius static const char* currencyStyleNames[] = { 395759d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY", 395859d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_ISO", 395959d709d503bab6e2b61931737e662dd293b40578ccornelius "UNUM_CURRENCY_PLURAL" 396059d709d503bab6e2b61931737e662dd293b40578ccornelius }; 396150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 3963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruint deadloop = 0; 3964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querufor (;;) { 3965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru printf("loop: %d\n", deadloop++); 3966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 39678de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i=0; i< UPRV_LENGTHOF(DATA); ++i) { /* i = test case # - should be i=0*/ 3968f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for (int32_t kIndex = 2; kIndex < UPRV_LENGTHOF(currencyStyles); ++kIndex) { 396959d709d503bab6e2b61931737e662dd293b40578ccornelius UNumberFormatStyle k = currencyStyles[kIndex]; /* k = style */ 3970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* localeString = DATA[i][0]; 3971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double numberToBeFormat = atof(DATA[i][1]); 3972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* currencyISOCode = DATA[i][2]; 3973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale(localeString); 3974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 3975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat* numFmt = NumberFormat::createInstance(locale, k, status); 397659d709d503bab6e2b61931737e662dd293b40578ccornelius logln("#%d NumberFormat(%s, %s) Currency=%s\n", 397759d709d503bab6e2b61931737e662dd293b40578ccornelius i, localeString, currencyStyleNames[kIndex], 397859d709d503bab6e2b61931737e662dd293b40578ccornelius currencyISOCode); 397959d709d503bab6e2b61931737e662dd293b40578ccornelius 3980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 39826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln((UnicodeString)"can not create instance, locale:" + localeString + ", style: " + k + " - " + u_errorName(status)); 3983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 3985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar currencyCode[4]; 3986b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_charsToUChars(currencyISOCode, currencyCode, 4); 3987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->setCurrency(currencyCode, status); 3988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 3989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 3990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"can not set currency:" + currencyISOCode); 3991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 3992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 399350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 3994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString strBuf; 3995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->format(numberToBeFormat, strBuf); 399659d709d503bab6e2b61931737e662dd293b40578ccornelius /* 3997b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int resultDataIndex = 3 + kIndex; 3998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][resultDataIndex] is the currency format result 3999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // using 'k' currency style. 4000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatResult = ctou(DATA[i][resultDataIndex]); 4001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (strBuf.compare(formatResult)) { 4002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: Expected " + formatResult + " actual: " + strBuf); 4003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 4004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 4005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // test parsing, and test parsing for all currency formats. 4006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (int j = 3; j < 6; ++j) { 400750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // DATA[i][3] is the currency format result using 4008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // CURRENCYSTYLE formatter. 4009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][4] is the currency format result using 4010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // ISOCURRENCYSTYLE formatter. 4011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // DATA[i][5] is the currency format result using 4012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // PLURALCURRENCYSTYLE formatter. 4013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString oneCurrencyFormatResult = ctou(DATA[i][j]); 4014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 4015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Formattable parseResult; 401659d709d503bab6e2b61931737e662dd293b40578ccornelius logln("parse(%s)", DATA[i][j]); 4017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru numFmt->parse(oneCurrencyFormatResult, parseResult, status); 4018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status) || 4019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kDouble && 4020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getDouble() != numberToBeFormat) || 4021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru (parseResult.getType() == Formattable::kLong && 4022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru parseResult.getLong() != numberToBeFormat)) { 402359d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: NumberFormat(" + localeString +", " + currencyStyleNames[kIndex] + 402459d709d503bab6e2b61931737e662dd293b40578ccornelius "), Currency="+currencyISOCode+", parse("+DATA[i][j]+") returned error " + (UnicodeString)u_errorName(status)+". Testcase: data[" + i + "][" + currencyStyleNames[j-3] +"="+j+"]"); 4025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (parseResult.getType() == Formattable::kDouble) { 402659d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (double): " +parseResult.getDouble()); 4027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 402859d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"expected: " + numberToBeFormat + "; actual (long): " +parseResult.getLong()); 4029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 403059d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)" round-trip would be: " + strBuf); 4031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 4032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 4033b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 403450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 4035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 4036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#ifdef NUMFMTST_CACHE_DEBUG 4037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 4038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#endif 4039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 4040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 4041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 4042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid 4043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruNumberFormatTest::TestParseCurrencyInUCurr() { 4044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* DATA[] = { 4045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US DOLLAR", // case in-sensitive 4046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 4047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 4048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 4049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 4050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00", 405154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius "A$1.00", 4052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 4053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ADP1.00", 4054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 4055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AED1.00", 4056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 4057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFA1.00", 4058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AFN1.00", 4059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ALL1.00", 4060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AMD1.00", 4061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ANG1.00", 4062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOA1.00", 4063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 4064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOK1.00", 4065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 4066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AON1.00", 4067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 4068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AOR1.00", 4069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "ARS1.00", 4070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 4071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARA1.00", 4072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 4073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARP1.00", 4074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ARS1.00", 4075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 4076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ATS1.00", 4077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AUD1.00", 4078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AWG1.00", 4079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 4080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZM1.00", 4081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZN1.00", 408259d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u20132002)1.00", 408359d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan afghani (1927\\u20132002)1.00", 4084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghani1.00", 4085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghanis1.00", 4086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Lek1.00", 4087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek1.00", 4088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian lek\\u00eb1.00", 4089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dinar1.00", 4090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinar1.00", 4091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian dinars1.00", 4092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peseta1.00", 4093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran peseta1.00", 4094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran pesetas1.00", 409559d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u20131991)1.00", 409659d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u20131999)1.00", 4097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanza1.00", 409859d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u20132000)1.00", 409959d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanza (1977\\u20131991)1.00", 410059d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanza (1995\\u20131999)1.00", 4101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanza1.00", 410259d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan kwanzas (1977\\u20131991)1.00", 410359d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan readjusted kwanzas (1995\\u20131999)1.00", 4104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan kwanzas1.00", 410559d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanza (1990\\u20132000)1.00", 410659d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan new kwanzas (1990\\u20132000)1.00", 4107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austral1.00", 410859d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u20131985)1.00", 4109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Peso1.00", 4110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine austral1.00", 4111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine australs1.00", 411259d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine peso (1983\\u20131985)1.00", 4113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine peso1.00", 411459d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine pesos (1983\\u20131985)1.00", 4115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine pesos1.00", 4116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dram1.00", 4117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian dram1.00", 4118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian drams1.00", 4119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Florin1.00", 4120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban florin1.00", 4121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dollar1.00", 4122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollar1.00", 4123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian dollars1.00", 4124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schilling1.00", 4125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schilling1.00", 4126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian schillings1.00", 412759d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u20132006)1.00", 4128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Manat1.00", 412959d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manat (1993\\u20132006)1.00", 4130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manat1.00", 413159d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani manats (1993\\u20132006)1.00", 4132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani manats1.00", 4133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 4134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAD1.00", 4135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BAM1.00", 4136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BBD1.00", 4137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BDT1.00", 4138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 4139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEC1.00", 4140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEF1.00", 4141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 4142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BEL1.00", 4143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGL1.00", 4144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 4145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BGN1.00", 4146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BHD1.00", 4147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BIF1.00", 4148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BMD1.00", 4149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BND1.00", 4150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOB1.00", 4151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 4152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOP1.00", 4153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 4154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BOV1.00", 4155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 4156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRB1.00", 4157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 4158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRC1.00", 4159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 4160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRE1.00", 4161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRL1.00", 4162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 4163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRN1.00", 4164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 4165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BRR1.00", 4166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 4167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BSD1.00", 4168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BTN1.00", 4169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 4170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BUK1.00", 4171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BWP1.00", 4172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 4173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYB1.00", 4174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BYR1.00", 4175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZD1.00", 4176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dollar1.00", 4177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollar1.00", 4178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian dollars1.00", 4179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dinar1.00", 4180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinar1.00", 4181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini dinars1.00", 4182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Taka1.00", 4183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi taka1.00", 4184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi takas1.00", 4185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dollar1.00", 4186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollar1.00", 4187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian dollars1.00", 418864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Belarusian Ruble (1994\\u20131999)1.00", 4189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Ruble1.00", 419064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Belarusian ruble (1994\\u20131999)1.00", 419164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Belarusian rubles (1994\\u20131999)1.00", 4192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian ruble1.00", 4193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian rubles1.00", 4194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible)1.00", 4195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial)1.00", 4196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc1.00", 4197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (convertible)1.00", 4198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc (financial)1.00", 4199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian franc1.00", 4200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (convertible)1.00", 4201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs (financial)1.00", 4202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian francs1.00", 4203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dollar1.00", 4204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollar1.00", 4205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize dollars1.00", 4206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dollar1.00", 4207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollar1.00", 4208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan dollars1.00", 4209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultrum1.00", 4210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrum1.00", 4211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese ngultrums1.00", 4212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdol1.00", 4213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Peso1.00", 4214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdol1.00", 4215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian mvdols1.00", 4216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian peso1.00", 4217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian pesos1.00", 4218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 4219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Boliviano1.00", 4220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivianos1.00", 4221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mark1.00", 422259d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina Dinar (1992\\u20131994)1.00", 4223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible mark1.00", 4224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina convertible marks1.00", 422559d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinar (1992\\u20131994)1.00", 422659d709d503bab6e2b61931737e662dd293b40578ccornelius "Bosnia-Herzegovina dinars (1992\\u20131994)1.00", 4227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pula1.00", 4228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pula1.00", 4229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan pulas1.00", 423059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzado (1989\\u20131990)1.00", 423159d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzado (1986\\u20131989)1.00", 423259d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u20131993)1.00", 423359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u20131986)1.00", 423459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1993\\u20131994)1.00", 4235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Real1.00", 423659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzado (1989\\u20131990)1.00", 423759d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzados (1989\\u20131990)1.00", 423859d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzado (1986\\u20131989)1.00", 423959d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzados (1986\\u20131989)1.00", 424059d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1990\\u20131993)1.00", 424159d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiro (1967\\u20131986)1.00", 424259d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiro (1993\\u20131994)1.00", 424359d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1990\\u20131993)1.00", 424459d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian new cruzeiros (1967\\u20131986)1.00", 424559d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian cruzeiros (1993\\u20131994)1.00", 4246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian real1.00", 4247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian reals1.00", 42481b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British Pound1.00", 42491b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British pound1.00", 42501b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "British pounds1.00", 4251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dollar1.00", 4252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollar1.00", 4253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei dollars1.00", 4254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Lev1.00", 4255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Lev1.00", 4256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Leva1.00", 4257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard lev1.00", 4258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian hard leva1.00", 4259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian lev1.00", 4260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kyat1.00", 4261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyat1.00", 4262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese kyats1.00", 4263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Franc1.00", 4264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian franc1.00", 4265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian francs1.00", 4266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA$1.00", 4267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CAD1.00", 4268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 4269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CDF1.00", 42701b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA Franc1.00", 42711b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA Franc1.00", 42721b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA franc1.00", 42731b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA franc1.00", 42741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA francs1.00", 42751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA francs1.00", 4276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Franc1.00", 4277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP franc1.00", 4278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP francs1.00", 4279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFPF1.00", 4280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 4281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHE1.00", 4282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHF1.00", 4283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 4284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CHW1.00", 4285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 4286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLF1.00", 4287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CLP1.00", 4288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CNY1.00", 4289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COP1.00", 4290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 4291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "COU1.00", 4292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CRC1.00", 4293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 4294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSD1.00", 4295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 4296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CSK1.00", 4297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 4298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CUP1.00", 4299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CVE1.00", 4300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CYP1.00", 4301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZK1.00", 4302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Riel1.00", 4303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riel1.00", 4304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian riels1.00", 4305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dollar1.00", 4306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollar1.00", 4307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian dollars1.00", 4308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escudo1.00", 4309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudo1.00", 4310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean escudos1.00", 4311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dollar1.00", 4312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollar1.00", 4313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands dollars1.00", 4314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Peso1.00", 431527f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Account (UF)1.00", 4316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean peso1.00", 4317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean pesos1.00", 431827f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean unit of account (UF)1.00", 431927f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean units of account (UF)1.00", 432027f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yuan1.00", 4321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chinese yuan1.00", 4322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Peso1.00", 4323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian peso1.00", 4324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian pesos1.00", 4325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian Franc1.00", 4326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian franc1.00", 4327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comorian francs1.00", 4328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Franc1.00", 4329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese franc1.00", 4330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese francs1.00", 4331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f3n1.00", 4332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3n1.00", 4333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican col\\u00f3ns1.00", 4334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dinar1.00", 4335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kuna1.00", 4336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinar1.00", 4337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian dinars1.00", 4338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kuna1.00", 4339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian kunas1.00", 4340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Peso1.00", 4341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban peso1.00", 4342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban pesos1.00", 4343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Pound1.00", 4344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pound1.00", 4345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot pounds1.00", 4346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Koruna1.00", 4347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic koruna1.00", 4348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic korunas1.00", 4349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Koruna1.00", 4350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard koruna1.00", 4351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak hard korunas1.00", 4352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 4353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DDM1.00", 4354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 4355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DEM1.00", 4356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJF1.00", 4357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DKK1.00", 4358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DOP1.00", 4359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZD1.00", 4360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Krone1.00", 4361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish krone1.00", 4362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish kroner1.00", 4363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mark1.00", 4364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German mark1.00", 4365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German marks1.00", 4366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Franc1.00", 4367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian franc1.00", 4368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian francs1.00", 4369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Peso1.00", 4370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican peso1.00", 4371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican pesos1.00", 4372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC$1.00", 4373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 4374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECS1.00", 4375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 4376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ECV1.00", 4377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 4378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EEK1.00", 4379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 4380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EGP1.00", 4381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 4382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ERN1.00", 4383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 4384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESA1.00", 4385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 4386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESB1.00", 4387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ESP1.00", 4388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ETB1.00", 4389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EUR1.00", 4390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dollar1.00", 4391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollar1.00", 4392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean dollars1.00", 4393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Mark1.00", 4394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German mark1.00", 4395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German marks1.00", 4396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucre1.00", 439727f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Value1.00", 4398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucre1.00", 4399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian sucres1.00", 440027f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian unit of constant value1.00", 440127f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian units of constant value1.00", 4402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Pound1.00", 4403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pound1.00", 4404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian pounds1.00", 4405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f3n1.00", 4406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran col\\u00f3n1.00", 4407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran colones1.00", 4408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwele1.00", 4409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean ekwele1.00", 4410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakfa1.00", 4411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfa1.00", 4412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean nakfas1.00", 4413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroon1.00", 4414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroon1.00", 4415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian kroons1.00", 4416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Birr1.00", 4417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birr1.00", 4418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian birrs1.00", 4419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Euro1.00", 4420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Unit1.00", 4421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Unit1.00", 4422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Unit1.00", 4423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC)1.00", 4424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD)1.00", 4425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite unit1.00", 4426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European composite units1.00", 4427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency unit1.00", 4428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European currency units1.00", 4429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary unit1.00", 4430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European monetary units1.00", 4431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBC)1.00", 4432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European unit of account (XBD)1.00", 4433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBC)1.00", 4434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European units of account (XBD)1.00", 4435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 4436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FIM1.00", 4437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJD1.00", 4438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 4439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FKP1.00", 4440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 4441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FRF1.00", 4442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Pound1.00", 4443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pound1.00", 4444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands pounds1.00", 4445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dollar1.00", 4446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollar1.00", 4447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian dollars1.00", 4448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markka1.00", 4449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markka1.00", 4450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish markkas1.00", 445150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "CHF1.00", 4452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Franc1.00", 4453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Franc1.00", 4454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Franc1.00", 4455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-franc1.00", 4456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-francs1.00", 4457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French franc1.00", 4458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French francs1.00", 4459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold franc1.00", 4460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French gold francs1.00", 4461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GBP1.00", 4462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEK1.00", 4464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GEL1.00", 4465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHC1.00", 4467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GHS1.00", 4468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GIP1.00", 4470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GMD1.00", 4472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNF1.00", 4473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GNS1.00", 4475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQE1.00", 4477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GRD1.00", 4479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWE1.00", 4482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GWP1.00", 4484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GYD1.00", 4485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalasi1.00", 4486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasi1.00", 4487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian dalasis1.00", 4488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Larit1.00", 4489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lari1.00", 4490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larit1.00", 4491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian kupon larits1.00", 4492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian lari1.00", 4493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian laris1.00", 449459d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u20132007)1.00", 4495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Cedi1.00", 449659d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedi (1979\\u20132007)1.00", 4497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedi1.00", 449859d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian cedis (1979\\u20132007)1.00", 4499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian cedis1.00", 4500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Pound1.00", 4501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pound1.00", 4502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar pounds1.00", 4503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gold1.00", 4505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachma1.00", 4506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachma1.00", 4507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek drachmas1.00", 4508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetzal1.00", 4509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzal1.00", 4510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan quetzals1.00", 4511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Franc1.00", 4512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syli1.00", 4513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean franc1.00", 4514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean francs1.00", 4515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean syli1.00", 4516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean sylis1.00", 4517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Peso1.00", 4518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau peso1.00", 4519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau pesos1.00", 4520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dollar1.00", 4521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollar1.00", 4522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese dollars1.00", 4523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK$1.00", 4524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HKD1.00", 4525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRD1.00", 4528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HRK1.00", 4530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HTG1.00", 4532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HUF1.00", 4533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourde1.00", 4534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourde1.00", 4535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian gourdes1.00", 4536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempira1.00", 4537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempira1.00", 4538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran lempiras1.00", 4539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dollar1.00", 4540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollar1.00", 4541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong dollars1.00", 4542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forint1.00", 4543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forint1.00", 4544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian forints1.00", 4545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IDR1.00", 4546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IEP1.00", 4547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILP1.00", 4549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ILS1.00", 4550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "INR1.00", 4551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQD1.00", 4552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IRR1.00", 4553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ISK1.00", 4555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ITL1.00", 4556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kr\\u00f3na1.00", 4557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3na1.00", 4558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic kr\\u00f3nur1.00", 4559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupee1.00", 4560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupee1.00", 4561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian rupees1.00", 4562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupiah1.00", 4563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiah1.00", 4564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian rupiahs1.00", 4565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Rial1.00", 4566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rial1.00", 4567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian rials1.00", 4568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dinar1.00", 4569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinar1.00", 4570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi dinars1.00", 4571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Pound1.00", 4572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pound1.00", 4573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish pounds1.00", 4574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Pound1.00", 457564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Israeli new shekel1.00", 4576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pound1.00", 4577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli pounds1.00", 4578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lira1.00", 4579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian lira1.00", 4580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian liras1.00", 4581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JMD1.00", 4582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JOD1.00", 4583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JPY1.00", 4584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dollar1.00", 4585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollar1.00", 4586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican dollars1.00", 4587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Yen1.00", 4588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese yen1.00", 4589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dinar1.00", 4590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinar1.00", 4591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian dinars1.00", 4592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KES1.00", 4593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KGS1.00", 4594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KHR1.00", 4595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KMF1.00", 4596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KPW1.00", 4598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KRW1.00", 4599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KWD1.00", 4600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KYD1.00", 4602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZT1.00", 460327f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Tenge1.00", 460427f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenge1.00", 460527f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani tenges1.00", 4606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shilling1.00", 4607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shilling1.00", 4608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan shillings1.00", 4609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dinar1.00", 4610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinar1.00", 4611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti dinars1.00", 4612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani Som1.00", 4613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani som1.00", 4614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani soms1.00", 4615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HNL1.00", 4616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LAK1.00", 4618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LBP1.00", 4619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LKR1.00", 4620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LRD1.00", 4622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LSL1.00", 4623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTL1.00", 4625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LTT1.00", 4627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUC1.00", 4629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUF1.00", 4631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LUL1.00", 4633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVL1.00", 4635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LVR1.00", 4637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LYD1.00", 4638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Kip1.00", 4639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kip1.00", 4640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian kips1.00", 4641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lats1.00", 4642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Ruble1.00", 4643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian lats1.00", 4644103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius "Latvian lati1.00", 4645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian ruble1.00", 4646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian rubles1.00", 4647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Pound1.00", 4648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pound1.00", 4649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese pounds1.00", 4650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Loti1.00", 4651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho loti1.00", 4652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho lotis1.00", 4653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dollar1.00", 4654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollar1.00", 4655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian dollars1.00", 4656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dinar1.00", 4657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinar1.00", 4658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan dinars1.00", 4659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Litas1.00", 4660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talonas1.00", 4661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litas1.00", 4662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian litai1.00", 4663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonas1.00", 4664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian talonases1.00", 4665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Franc1.00", 4666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Franc1.00", 4667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Franc1.00", 4668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible franc1.00", 4669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian convertible francs1.00", 4670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial franc1.00", 4671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg financial francs1.00", 4672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian franc1.00", 4673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian francs1.00", 4674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAD1.00", 4676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MAF1.00", 4678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDL1.00", 4680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX$1.00", 4681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGA1.00", 4683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MGF1.00", 4685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MKD1.00", 4686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MLF1.00", 4688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MMK1.00", 4690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MNT1.00", 4691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MOP1.00", 4693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MRO1.00", 4694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTL1.00", 4695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MTP1.00", 4697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MUR1.00", 4699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MVR1.00", 4701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MWK1.00", 4702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXN1.00", 4703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXP1.00", 4705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MXV1.00", 4707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MYR1.00", 4708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZE1.00", 4710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZM1.00", 4711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZN1.00", 4712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Pataca1.00", 4713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese pataca1.00", 4714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese patacas1.00", 4715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Denar1.00", 4716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denar1.00", 4717b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian denari1.00", 4718b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariaries1.00", 4719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariary1.00", 4721b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Franc1.00", 4722b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy franc1.00", 4723b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy francs1.00", 4724b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwacha1.00", 4726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwachas1.00", 4727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgit1.00", 4728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgit1.00", 4729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian ringgits1.00", 4730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiyaa1.00", 4731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaa1.00", 4732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian rufiyaas1.00", 4733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Franc1.00", 4734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian franc1.00", 4735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian francs1.00", 4736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lira1.00", 4737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Pound1.00", 4738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese lira1.00", 4740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pound1.00", 4741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese pounds1.00", 4742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiya1.00", 4743b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiya1.00", 4744b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian ouguiyas1.00", 4745b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupee1.00", 4746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupee1.00", 4747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian rupees1.00", 4748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Peso1.00", 474959d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u20131992)1.00", 475027f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Unit1.00", 4751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican peso1.00", 4752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican pesos1.00", 475359d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver peso (1861\\u20131992)1.00", 475459d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican silver pesos (1861\\u20131992)1.00", 475527f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment unit1.00", 475627f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican investment units1.00", 4757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Leu1.00", 4758b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan leu1.00", 4759b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan lei1.00", 4760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugrik1.00", 4761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugrik1.00", 4762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian tugriks1.00", 4763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirham1.00", 4764b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Franc1.00", 4765b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirham1.00", 4766b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan dirhams1.00", 4767b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan franc1.00", 4768b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan francs1.00", 4769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escudo1.00", 4770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metical1.00", 4771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudo1.00", 4772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican escudos1.00", 4773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican metical1.00", 4774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican meticals1.00", 477559d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kyat1.00", 477659d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyat1.00", 477759d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar kyats1.00", 4778b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAD1.00", 4779b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NGN1.00", 4780b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIC1.00", 4781b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4782b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NIO1.00", 4783b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4784b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NLG1.00", 4785b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NOK1.00", 4786b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NPR1.00", 4787b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT$1.00", 4788b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZ$1.00", 4789b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NZD1.00", 4790b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dollar1.00", 4791b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollar1.00", 4792b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian dollars1.00", 4793b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupee1.00", 4794b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupee1.00", 4795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese rupees1.00", 4796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilder1.00", 4797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilder1.00", 4798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean guilders1.00", 4799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilder1.00", 4800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilder1.00", 4801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch guilders1.00", 480264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Israeli New Shekel1.00", 480364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Israeli New Shekels1.00", 4804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dollar1.00", 4805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollar1.00", 4806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand dollars1.00", 480727f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdoba1.00", 480859d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u20131991)1.00", 480927f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdoba1.00", 481027f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan c\\u00f3rdobas1.00", 481159d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdoba (1988\\u20131991)1.00", 481259d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan c\\u00f3rdobas (1988\\u20131991)1.00", 4813b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Naira1.00", 4814b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian naira1.00", 4815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian nairas1.00", 4816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Won1.00", 4817b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4818b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean won1.00", 4819b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Krone1.00", 4820b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian krone1.00", 4821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian kroner1.00", 4822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OMR1.00", 482359d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican Metical (1980\\u20132006)1.00", 482459d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican metical (1980\\u20132006)1.00", 482559d709d503bab6e2b61931737e662dd293b40578ccornelius "Mozambican meticals (1980\\u20132006)1.00", 482659d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Lei (1952\\u20132006)1.00", 482759d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u20132006)1.00", 482859d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian leu (1952\\u20132006)1.00", 482959d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u20132006)1.00", 483059d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinar (2002\\u20132006)1.00", 483159d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian dinars (2002\\u20132006)1.00", 483259d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u20132007)1.00", 483359d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u20131998)1.00", 483459d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinar (1992\\u20132007)1.00", 483559d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese dinars (1992\\u20132007)1.00", 483659d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pound (1957\\u20131998)1.00", 483759d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese pounds (1957\\u20131998)1.00", 483859d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 483959d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u20132005)1.00", 4840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Rial1.00", 4841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rial1.00", 4842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani rials1.00", 4843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PAB1.00", 4845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEI1.00", 4847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PEN1.00", 4849b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PES1.00", 4851b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PGK1.00", 4853b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PHP1.00", 4854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PKR1.00", 4855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLN1.00", 4856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PLZ1.00", 4858b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4859b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PTE1.00", 4860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PYG1.00", 4861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupee1.00", 4862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupee1.00", 4863b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani rupees1.00", 4864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladium1.00", 4866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balboa1.00", 4867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboa1.00", 4868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian balboas1.00", 4869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kina1.00", 4870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean kina1.00", 4872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guarani1.00", 4873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guarani1.00", 4874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan guaranis1.00", 4875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Inti1.00", 487664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Peruvian Sol1.00", 487759d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u20131965)1.00", 4878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian inti1.00", 4879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian intis1.00", 488064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Peruvian sol1.00", 488164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Peruvian soles1.00", 488259d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian sol (1863\\u20131965)1.00", 488359d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian soles (1863\\u20131965)1.00", 4884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Peso1.00", 4885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine peso1.00", 4886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine pesos1.00", 4887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 4888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinum1.00", 488959d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u20131995)1.00", 4890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zloty1.00", 4891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys1.00", 4892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty (PLZ)1.00", 4893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zloty1.00", 4894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish zlotys (PLZ)1.00", 4895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escudo1.00", 4896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escudo1.00", 4897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudo1.00", 4898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea escudos1.00", 4899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudo1.00", 4900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese escudos1.00", 4901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GTQ1.00", 4902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QAR1.00", 4903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Rial1.00", 4904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rial1.00", 4905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari rials1.00", 4906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RHD1.00", 4908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Funds1.00", 4910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN\\u00a51.00", 4911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ROL1.00", 4913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RON1.00", 4915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RSD1.00", 4917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUB1.00", 4918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RUR1.00", 4920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RWF1.00", 4922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dollar1.00", 4923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollar1.00", 4924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian dollars1.00", 4925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Leu1.00", 4926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian lei1.00", 4927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian leu1.00", 492859d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u20131998)1.00", 4929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Ruble1.00", 493059d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian ruble (1991\\u20131998)1.00", 4931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian ruble1.00", 493259d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian rubles (1991\\u20131998)1.00", 4933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian rubles1.00", 4934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Franc1.00", 4935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan franc1.00", 4936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan francs1.00", 4937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SAR1.00", 4938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SBD1.00", 4939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SCR1.00", 4940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDD1.00", 4942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDG1.00", 4944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SDP1.00", 4946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SEK1.00", 4947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SGD1.00", 4948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SHP1.00", 4950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SIT1.00", 4952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SKK1.00", 4953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SLL1.00", 4955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SOS1.00", 4956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRD1.00", 4958b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SRG1.00", 4959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "STD1.00", 4960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SUR1.00", 4962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SVC1.00", 4964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SYP1.00", 4965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZL1.00", 4966f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Pound1.00", 4967f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pound1.00", 4968f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena pounds1.00", 4969f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra1.00", 4970f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra1.00", 4971f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras1.00", 4972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riyal1.00", 4973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyal1.00", 4974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi riyals1.00", 4975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dinar1.00", 4976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinar1.00", 4977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian dinars1.00", 4978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupee1.00", 4979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupee1.00", 4980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois rupees1.00", 4981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leone1.00", 4982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leone1.00", 4983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean leones1.00", 4984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silver1.00", 4986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dollar1.00", 4987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollar1.00", 4988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore dollars1.00", 4989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Koruna1.00", 4990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak koruna1.00", 4991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak korunas1.00", 4992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tolar1.00", 4993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolar1.00", 4994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian tolars1.00", 4995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dollar1.00", 4996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollar1.00", 4997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands dollars1.00", 4998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shilling1.00", 4999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shilling1.00", 5000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali shillings1.00", 5001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial)1.00", 5002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand1.00", 5003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand (financial)1.00", 5004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 5005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rands (financial)1.00", 5006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African rand1.00", 5007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Won1.00", 5008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 5009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean won1.00", 5010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Rouble1.00", 5011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet rouble1.00", 5012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet roubles1.00", 5013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account)1.00", 5014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account)1.00", 5015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta1.00", 5016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (A account)1.00", 5017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta (convertible account)1.00", 5018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish peseta1.00", 5019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (A account)1.00", 5020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas (convertible account)1.00", 5021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish pesetas1.00", 5022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Rights1.00", 502327f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupee1.00", 502427f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupee1.00", 502527f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan rupees1.00", 5026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Pound1.00", 5027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pound1.00", 5028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese pounds1.00", 5029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dollar1.00", 5030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollar1.00", 5031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese dollars1.00", 503227f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilder1.00", 503327f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilder1.00", 503427f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese guilders1.00", 5035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangeni1.00", 5036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi lilangeni1.00", 5037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi emalangeni1.00", 5038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Krona1.00", 5039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish krona1.00", 5040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish kronor1.00", 5041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Franc1.00", 5042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss franc1.00", 5043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss francs1.00", 5044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Pound1.00", 5045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pound1.00", 5046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian pounds1.00", 5047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "THB1.00", 5048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 5049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJR1.00", 5050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 5051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJS1.00", 5052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 5053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TMM1.00", 5054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 5055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TND1.00", 5056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TOP1.00", 5057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 5058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TPE1.00", 5059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRL1.00", 5060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 5061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TRY1.00", 5062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TTD1.00", 5063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TWD1.00", 5064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZS1.00", 5065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dollar1.00", 5066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollar1.00", 5067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan dollars1.00", 5068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Ruble1.00", 5069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somoni1.00", 5070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani ruble1.00", 5071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani rubles1.00", 5072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somoni1.00", 5073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani somonis1.00", 5074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shilling1.00", 5075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shilling1.00", 5076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian shillings1.00", 5077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 5078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Code1.00", 5079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Baht1.00", 5080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 5081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai baht1.00", 5082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escudo1.00", 5083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudo1.00", 5084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese escudos1.00", 5085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u02bbanga1.00", 5086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 5087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan pa\\u02bbanga1.00", 5088f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dollar1.00", 5089f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollar1.00", 5090f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago dollars1.00", 5091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dinar1.00", 5092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinar1.00", 5093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian dinars1.00", 5094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 5095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lira1.00", 5096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish lira1.00", 5097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Manat1.00", 5098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 5099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani manat1.00", 5100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirham1.00", 5101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAE dirhams1.00", 5102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAH1.00", 5103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 5104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UAK1.00", 5105b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 5106b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGS1.00", 5107b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UGX1.00", 5108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day)1.00", 5109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day)1.00", 5110b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar1.00", 5111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (next day)1.00", 5112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar (same day)1.00", 5113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollar1.00", 5114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (next day)1.00", 5115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars (same day)1.00", 5116b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US dollars1.00", 5117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00", 5118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 5119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USN1.00", 5120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 5121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USS1.00", 5122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 5123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYI1.00", 5124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 5125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYP1.00", 5126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UYU1.00", 5127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 5128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZS1.00", 512959d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u20131987)1.00", 5130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shilling1.00", 513159d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shilling (1966\\u20131987)1.00", 5132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shilling1.00", 513359d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan shillings (1966\\u20131987)1.00", 5134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan shillings1.00", 5135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvnia1.00", 5136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanets1.00", 5137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnia1.00", 5138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian hryvnias1.00", 5139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovanets1.00", 5140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian karbovantsiv1.00", 514127f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Unit1.00", 5142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirham1.00", 514327f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currency1.00", 514459d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan Peso (1975\\u20131993)1.00", 5145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan Peso1.00", 514627f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan Peso (Indexed Units)1.00", 514759d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan peso (1975\\u20131993)1.00", 514827f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan peso (indexed units)1.00", 5149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan peso1.00", 515059d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguayan pesos (1975\\u20131993)1.00", 515127f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguayan pesos (indexed units)1.00", 5152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguayan pesos1.00", 51531b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani Som1.00", 51541b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani som1.00", 51551b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani som1.00", 5156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEB1.00", 5157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VEF1.00", 5158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VND1.00", 5159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VUV1.00", 5160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vatu1.00", 5161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatu1.00", 5162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu vatus1.00", 5163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar1.00", 516459d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan Bol\\u00edvar (1871\\u20132008)1.00", 5165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvar1.00", 5166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan bol\\u00edvars1.00", 516759d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvar (1871\\u20132008)1.00", 516859d709d503bab6e2b61931737e662dd293b40578ccornelius "Venezuelan bol\\u00edvars (1871\\u20132008)1.00", 5169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Dong1.00", 5170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 5171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese dong1.00", 5172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Euro1.00", 5173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Franc1.00", 5174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euro1.00", 5175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR euros1.00", 5176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR franc1.00", 5177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR francs1.00", 5178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 5179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WST1.00", 5180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan Tala1.00", 5181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 5182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoan tala1.00", 5183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 5184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAF1.00", 5185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 5186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAG1.00", 5187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 5188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XAU1.00", 5189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 5190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBA1.00", 5191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 5192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBB1.00", 5193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 5194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBC1.00", 5195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 5196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XBD1.00", 5197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XCD1.00", 5198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 5199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XDR1.00", 5200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 5201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XEU1.00", 5202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 5203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFO1.00", 5204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 5205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XFU1.00", 5206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 5207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XOF1.00", 5208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 5209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPD1.00", 5210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPF1.00", 5211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 5212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XPT1.00", 5213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 5214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XRE1.00", 5215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 5216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XTS1.00", 5217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 5218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XXX1.00", 5219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 5220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YDD1.00", 5221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YER1.00", 5222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 5223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUD1.00", 5224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 5225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUM1.00", 5226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 5227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YUN1.00", 5228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dinar1.00", 5229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Rial1.00", 5230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinar1.00", 5231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni dinars1.00", 5232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rial1.00", 5233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni rials1.00", 523459d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Convertible Dinar (1990\\u20131992)1.00", 523559d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u20131990)1.00", 523659d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian New Dinar (1994\\u20132002)1.00", 523759d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinar (1990\\u20131992)1.00", 523859d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian convertible dinars (1990\\u20131992)1.00", 523959d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinar (1966\\u20131990)1.00", 524059d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian hard dinars (1966\\u20131990)1.00", 524159d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinar (1994\\u20132002)1.00", 524259d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian new dinars (1994\\u20132002)1.00", 5243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 5244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAL1.00", 5245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZAR1.00", 5246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 5247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZMK1.00", 5248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 5249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRN1.00", 5250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 5251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZRZ1.00", 5252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZWD1.00", 525359d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u20131998)1.00", 525459d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean Zaire (1971\\u20131993)1.00", 525559d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaire (1993\\u20131998)1.00", 525659d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean new zaires (1993\\u20131998)1.00", 525759d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaire (1971\\u20131993)1.00", 525859d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean zaires (1971\\u20131993)1.00", 5259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwacha1.00", 5260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwacha1.00", 5261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian kwachas1.00", 526259d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u20132008)1.00", 526359d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollar (1980\\u20132008)1.00", 526459d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean dollars (1980\\u20132008)1.00", 5265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euro1.00", 5266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "euros1.00", 526759d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish lira (1922\\u20132005)1.00", 5268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "special drawing rights1.00", 526927f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value unit1.00", 527027f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian real value units1.00", 5271b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "unknown currency1.00", 5272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a31.00", 5273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u00a51.00", 5274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ab1.00", 5275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20aa1.00", 5276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "\\u20ac1.00", 5277786288bd87363f3f86c1211ef7e1fb94aa9a40f7Fredrik Roubert "\\u20b91.00", 5278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 5279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following has extra text, should be parsed correctly too 5280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "$1.00 random", 5281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "USD1.00 random", 5282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 5283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 5284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 5285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghani random", 528659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Afghan Afghanis (1927\\u20131992) random", 5287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Afghan Afghanis random", 5288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian Lek random", 5289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Albanian lek random", 529050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "1.00 Albanian lek\\u00eb random", 5291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian Dinar random", 5292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinar random", 5293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Algerian dinars random", 5294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran Peseta random", 5295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran peseta random", 5296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Andorran pesetas random", 529759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Kwanza (1977\\u20131990) random", 529859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan Readjusted Kwanza (1995\\u20131999) random", 5299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan Kwanza random", 530059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan New Kwanza (1990\\u20132000) random", 530159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanza (1977\\u20131991) random", 530259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanza (1995\\u20131999) random", 5303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanza random", 530459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan kwanzas (1977\\u20131991) random", 530559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan readjusted kwanzas (1995\\u20131999) random", 5306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Angolan kwanzas random", 530759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanza (1990\\u20132000) random", 530859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Angolan new kwanzas (1990\\u20132000) random", 5309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Austral random", 531059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine Peso (1983\\u20131985) random", 5311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine Peso random", 5312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine austral random", 5313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine australs random", 531459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine peso (1983\\u20131985) random", 5315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine peso random", 531659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Argentine pesos (1983\\u20131985) random", 5317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Argentine pesos random", 5318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian Dram random", 5319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian dram random", 5320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Armenian drams random", 5321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban Florin random", 5322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Aruban florin random", 5323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian Dollar random", 5324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollar random", 5325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Australian dollars random", 5326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian Schilling random", 5327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schilling random", 5328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Austrian schillings random", 532959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani Manat (1993\\u20132006) random", 5330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani Manat random", 533159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manat (1993\\u20132006) random", 5332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manat random", 533359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Azerbaijani manats (1993\\u20132006) random", 5334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Azerbaijani manats random", 5335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian Dollar random", 5336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollar random", 5337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahamian dollars random", 5338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini Dinar random", 5339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinar random", 5340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bahraini dinars random", 5341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi Taka random", 5342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi taka random", 5343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bangladeshi takas random", 5344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian Dollar random", 5345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollar random", 5346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Barbadian dollars random", 534764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Belarusian Ruble (1994\\u20131999) random", 5348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian Ruble random", 534964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Belarusian ruble (1994\\u20131999) random", 535064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Belarusian rubles (1994\\u20131999) random", 5351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian ruble random", 5352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belarusian rubles random", 5353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (convertible) random", 5354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc (financial) random", 5355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian Franc random", 5356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (convertible) random", 5357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc (financial) random", 5358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian franc random", 5359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (convertible) random", 5360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs (financial) random", 5361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belgian francs random", 5362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize Dollar random", 5363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollar random", 5364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Belize dollars random", 5365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan Dollar random", 5366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollar random", 5367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bermudan dollars random", 5368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese Ngultrum random", 5369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrum random", 5370b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bhutanese ngultrums random", 5371b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Mvdol random", 5372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Peso random", 5373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdol random", 5374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian mvdols random", 5375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian peso random", 5376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian pesos random", 5377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 5378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Boliviano random", 5379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bolivian Bolivianos random", 5380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina Convertible Mark random", 538159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina Dinar (1992\\u20131994) random", 5382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible mark random", 5383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bosnia-Herzegovina convertible marks random", 538459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinar (1992\\u20131994) random", 538559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Bosnia-Herzegovina dinars (1992\\u20131994) random", 5386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan Pula random", 5387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pula random", 5388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Botswanan pulas random", 538959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzado (1989\\u20131990) random", 539059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzado (1986\\u20131989) random", 539159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1990\\u20131993) random", 539259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian New Cruzeiro (1967\\u20131986) random", 539359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian Cruzeiro (1993\\u20131994) random", 5394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian Real random", 539559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzado (1989\\u20131990) random", 539659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzados (1989\\u20131990) random", 539759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzado (1986\\u20131989) random", 539859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzados (1986\\u20131989) random", 539959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1990\\u20131993) random", 540059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiro (1967\\u20131986) random", 540159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiro (1993\\u20131994) random", 540259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1990\\u20131993) random", 540359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian new cruzeiros (1967\\u20131986) random", 540459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Brazilian cruzeiros (1993\\u20131994) random", 5405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian real random", 5406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brazilian reals random", 54071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British Pound random", 54081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British pound random", 54091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 British pounds random", 5410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei Dollar random", 5411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollar random", 5412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Brunei dollars random", 5413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Hard Lev random", 5414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Lev random", 5415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian Leva random", 5416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard lev random", 5417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian hard leva random", 5418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Bulgarian lev random", 5419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese Kyat random", 5420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyat random", 5421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burmese kyats random", 5422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian Franc random", 5423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian franc random", 5424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Burundian francs random", 5425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian Riel random", 5426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riel random", 5427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cambodian riels random", 5428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian Dollar random", 5429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollar random", 5430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Canadian dollars random", 5431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean Escudo random", 5432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudo random", 5433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cape Verdean escudos random", 5434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands Dollar random", 5435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollar random", 5436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cayman Islands dollars random", 5437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean Peso random", 543827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean Unit of Account (UF) random", 5439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean peso random", 5440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chilean pesos random", 544127f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean unit of account (UF) random", 544227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chilean units of account (UF) random", 544327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Chinese Yuan random", 5444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Chinese yuan random", 5445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian Peso random", 5446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian peso random", 5447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Colombian pesos random", 5448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian Franc random", 5449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian franc random", 5450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Comorian francs random", 5451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese Franc Congolais random", 5452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese franc Congolais random", 5453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Congolese francs Congolais random", 5454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican Col\\u00f3n random", 5455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3n random", 5456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Costa Rican col\\u00f3ns random", 5457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Dinar random", 5458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian Kuna random", 5459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinar random", 5460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian dinars random", 5461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kuna random", 5462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Croatian kunas random", 5463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban Peso random", 5464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban peso random", 5465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cuban pesos random", 5466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot Pound random", 5467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pound random", 5468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Cypriot pounds random", 5469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic Koruna random", 5470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic koruna random", 5471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czech Republic korunas random", 5472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak Hard Koruna random", 5473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard koruna random", 5474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Czechoslovak hard korunas random", 5475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish Krone random", 5476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish krone random", 5477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Danish kroner random", 5478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German Mark random", 5479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German mark random", 5480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 German marks random", 5481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian Franc random", 5482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian franc random", 5483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Djiboutian francs random", 5484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican Peso random", 5485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican peso random", 5486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dominican pesos random", 5487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean Dollar random", 5488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollar random", 5489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East Caribbean dollars random", 5490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German Mark random", 5491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German mark random", 5492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 East German marks random", 5493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian Sucre random", 549427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian Unit of Constant Value random", 5495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucre random", 5496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ecuadorian sucres random", 549727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian unit of constant value random", 549827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Ecuadorian units of constant value random", 5499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian Pound random", 5500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pound random", 5501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Egyptian pounds random", 5502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran Col\\u00f3n random", 5503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran col\\u00f3n random", 5504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Salvadoran colones random", 5505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean Ekwele random", 5506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Equatorial Guinean ekwele random", 5507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean Nakfa random", 5508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfa random", 5509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Eritrean nakfas random", 5510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian Kroon random", 5511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroon random", 5512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Estonian kroons random", 5513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian Birr random", 5514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birr random", 5515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ethiopian birrs random", 5516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Composite Unit random", 5517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Currency Unit random", 5518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Monetary Unit random", 5519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBC) random", 5520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European Unit of Account (XBD) random", 5521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite unit random", 5522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European composite units random", 5523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency unit random", 5524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European currency units random", 5525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary unit random", 5526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European monetary units random", 5527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBC) random", 5528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European unit of account (XBD) random", 5529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBC) random", 5530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 European units of account (XBD) random", 5531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands Pound random", 5532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pound random", 5533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Falkland Islands pounds random", 5534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian Dollar random", 5535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollar random", 5536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Fijian dollars random", 5537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish Markka random", 5538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markka random", 5539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Finnish markkas random", 5540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Franc random", 5541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French Gold Franc random", 5542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-Franc random", 5543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-franc random", 5544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French UIC-francs random", 5545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French franc random", 5546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French francs random", 5547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold franc random", 5548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 French gold francs random", 5549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian Dalasi random", 5550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasi random", 5551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gambian dalasis random", 5552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Kupon Larit random", 5553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian Lari random", 5554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larit random", 5555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian kupon larits random", 5556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian lari random", 5557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Georgian laris random", 555859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian Cedi (1979\\u20132007) random", 5559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian Cedi random", 556059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedi (1979\\u20132007) random", 5561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedi random", 556259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ghanaian cedis (1979\\u20132007) random", 5563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ghanaian cedis random", 5564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar Pound random", 5565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pound random", 5566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gibraltar pounds random", 5567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Gold random", 5569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek Drachma random", 5570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachma random", 5571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Greek drachmas random", 5572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan Quetzal random", 5573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzal random", 5574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guatemalan quetzals random", 5575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Franc random", 5576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean Syli random", 5577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean franc random", 5578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean francs random", 5579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean syli random", 5580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinean sylis random", 5581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau Peso random", 5582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau peso random", 5583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guinea-Bissau pesos random", 5584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese Dollar random", 5585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollar random", 5586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Guyanaese dollars random", 5587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian Gourde random", 5588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourde random", 5589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Haitian gourdes random", 5590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran Lempira random", 5591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempira random", 5592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Honduran lempiras random", 5593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong Dollar random", 5594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollar random", 5595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hong Kong dollars random", 5596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian Forint random", 5597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forint random", 5598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Hungarian forints random", 5599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic Kr\\u00f3na random", 5600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3na random", 5601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Icelandic kr\\u00f3nur random", 5602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian Rupee random", 5603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupee random", 5604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indian rupees random", 5605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian Rupiah random", 5606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiah random", 5607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Indonesian rupiahs random", 5608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian Rial random", 5609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rial random", 5610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iranian rials random", 5611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi Dinar random", 5612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinar random", 5613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Iraqi dinars random", 5614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish Pound random", 5615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pound random", 5616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Irish pounds random", 5617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli Pound random", 561864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Israeli new shekel random", 5619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pound random", 5620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli pounds random", 5621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian Lira random", 5622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian lira random", 5623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Italian liras random", 5624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican Dollar random", 5625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollar random", 5626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jamaican dollars random", 5627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese Yen random", 5628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Japanese yen random", 5629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian Dinar random", 5630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinar random", 5631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Jordanian dinars random", 563227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani Tenge random", 563327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenge random", 563427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Kazakhstani tenges random", 5635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan Shilling random", 5636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shilling random", 5637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kenyan shillings random", 5638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti Dinar random", 5639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinar random", 5640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kuwaiti dinars random", 5641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani Som random", 5642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani som random", 5643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Kyrgystani soms random", 5644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian Kip random", 5645b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kip random", 5646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Laotian kips random", 5647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Lats random", 5648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian Ruble random", 5649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lats random", 5650b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian lati random", 5651b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian ruble random", 5652b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Latvian rubles random", 5653b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese Pound random", 5654b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pound random", 5655b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lebanese pounds random", 5656b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho Loti random", 5657b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho loti random", 5658b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lesotho lotis random", 5659b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian Dollar random", 5660b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollar random", 5661b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Liberian dollars random", 5662b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan Dinar random", 5663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinar random", 5664b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Libyan dinars random", 5665b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Litas random", 5666b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian Talonas random", 5667b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litas random", 5668b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian litai random", 5669b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonas random", 5670b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Lithuanian talonases random", 5671b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Convertible Franc random", 5672b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg Financial Franc random", 5673b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian Franc random", 5674b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible franc random", 5675b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian convertible francs random", 5676b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial franc random", 5677b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourg financial francs random", 5678b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian franc random", 5679b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Luxembourgian francs random", 5680b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese Pataca random", 5681b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese pataca random", 5682b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macanese patacas random", 5683b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian Denar random", 5684b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denar random", 5685b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Macedonian denari random", 5686b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariaries random", 5687b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5688b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Ariary random", 5689b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy Franc random", 5690b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy franc random", 5691b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malagasy francs random", 5692b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5693b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwacha random", 5694b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malawian Kwachas random", 5695b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian Ringgit random", 5696b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgit random", 5697b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malaysian ringgits random", 5698b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian Rufiyaa random", 5699b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaa random", 5700b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maldivian rufiyaas random", 5701b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian Franc random", 5702b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian franc random", 5703b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Malian francs random", 5704b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Lira random", 5705b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese Pound random", 5706b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese lira random", 5707b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese liras random", 5708b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pound random", 5709b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Maltese pounds random", 5710b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian Ouguiya random", 5711b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiya random", 5712b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritanian ouguiyas random", 5713b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian Rupee random", 5714b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupee random", 5715b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mauritian rupees random", 5716b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican Peso random", 571759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican Silver Peso (1861\\u20131992) random", 571827f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican Investment Unit random", 5719b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican peso random", 5720b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mexican pesos random", 572159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver peso (1861\\u20131992) random", 572259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mexican silver pesos (1861\\u20131992) random", 572327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment unit random", 572427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Mexican investment units random", 5725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan Leu random", 5726b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan leu random", 5727b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moldovan lei random", 5728b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian Tugrik random", 5729b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugrik random", 5730b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mongolian tugriks random", 5731b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Dirham random", 5732b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan Franc random", 5733b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirham random", 5734b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan dirhams random", 5735b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan franc random", 5736b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Moroccan francs random", 5737b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Escudo random", 5738b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican Metical random", 5739b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudo random", 5740b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican escudos random", 5741b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican metical random", 5742b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Mozambican meticals random", 574359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar Kyat random", 574459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyat random", 574559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Myanmar kyats random", 5746b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dollar random", 5747b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollar random", 5748b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dollars random", 5749b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupee random", 5750b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupee random", 5751b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupees random", 5752b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilder random", 5753b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilder random", 5754b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilders random", 5755b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilder random", 5756b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilder random", 5757b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilders random", 575864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Israeli New Shekel random", 575964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Israeli new shekels random", 5760b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dollar random", 5761b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollar random", 5762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dollars random", 576327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan C\\u00f3rdoba random", 576459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan C\\u00f3rdoba (1988\\u20131991) random", 576527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 576627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Nicaraguan c\\u00f3rdoba random", 576759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdoba (1988\\u20131991) random", 576859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Nicaraguan c\\u00f3rdobas (1988\\u20131991) random", 5769b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Naira random", 5770b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian naira random", 5771b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nairas random", 5772b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Won random", 5773b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5774b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean won random", 5775b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Krone random", 5776b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian krone random", 5777b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kroner random", 577859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican Metical (1980\\u20132006) random", 577959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican metical (1980\\u20132006) random", 578059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Mozambican meticals (1980\\u20132006) random", 578159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Lei (1952\\u20132006) random", 578259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian Leu (1952\\u20132006) random", 578359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Romanian leu (1952\\u20132006) random", 578459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian Dinar (2002\\u20132006) random", 578559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinar (2002\\u20132006) random", 578659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Serbian dinars (2002\\u20132006) random", 578759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Dinar (1992\\u20132007) random", 578859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese Pound (1957\\u20131998) random", 578959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinar (1992\\u20132007) random", 579059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese dinars (1992\\u20132007) random", 579159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pound (1957\\u20131998) random", 579259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Sudanese pounds (1957\\u20131998) random", 579359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 579459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish Lira (1922\\u20132005) random", 5795b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani Rial random", 5796b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rial random", 5797b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Omani rials random", 5798b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani Rupee random", 5799b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupee random", 5800b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Pakistani rupees random", 5801b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5802b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Palladium random", 5803b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian Balboa random", 5804b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboa random", 5805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Panamanian balboas random", 5806b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean Kina random", 5807b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5808b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Papua New Guinean kina random", 5809b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan Guarani random", 5810b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guarani random", 5811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Paraguayan guaranis random", 5812b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian Inti random", 581364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Peruvian Sol random", 581459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian Sol (1863\\u20131965) random", 5815b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian inti random", 5816b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Peruvian intis random", 581764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Peruvian sol random", 581864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "1.00 Peruvian soles random", 581959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian sol (1863\\u20131965) random", 582059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Peruvian soles (1863\\u20131965) random", 5821b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine Peso random", 5822b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine peso random", 5823b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Philippine pesos random", 5824b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 5825b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Platinum random", 582659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Polish Zloty (1950\\u20131995) random", 5827b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish Zloty random", 5828b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys random", 5829b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty (PLZ) random", 5830b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zloty random", 5831b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Polish zlotys (PLZ) random", 5832b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Escudo random", 5833b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea Escudo random", 5834b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudo random", 5835b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese Guinea escudos random", 5836b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudo random", 5837b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Portuguese escudos random", 5838b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari Rial random", 5839b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rial random", 5840b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Qatari rials random", 5841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5842b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 RINET Funds random", 5843b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian Dollar random", 5844b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollar random", 5845b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rhodesian dollars random", 5846b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian Leu random", 5847b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian lei random", 5848b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Romanian leu random", 584959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian Ruble (1991\\u20131998) random", 5850b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian Ruble random", 585159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian ruble (1991\\u20131998) random", 5852b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian ruble random", 585359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Russian rubles (1991\\u20131998) random", 5854b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Russian rubles random", 5855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan Franc random", 5856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan franc random", 5857b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Rwandan francs random", 5858f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena Pound random", 5859f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pound random", 5860f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 St. Helena pounds random", 5861f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobra random", 5862f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobra random", 5863f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe dobras random", 5864b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi Riyal random", 5865b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyal random", 5866b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Saudi riyals random", 5867b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian Dinar random", 5868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinar random", 5869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Serbian dinars random", 5870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois Rupee random", 5871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupee random", 5872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Seychellois rupees random", 5873b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean Leone random", 5874b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leone random", 5875b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sierra Leonean leones random", 5876b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore Dollar random", 5877b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollar random", 5878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Singapore dollars random", 5879b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak Koruna random", 5880b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak koruna random", 5881b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovak korunas random", 5882b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian Tolar random", 5883b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolar random", 5884b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Slovenian tolars random", 5885b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands Dollar random", 5886b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollar random", 5887b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Solomon Islands dollars random", 5888b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali Shilling random", 5889b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shilling random", 5890b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Somali shillings random", 5891b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand (financial) random", 5892b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African Rand random", 5893b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand (financial) random", 5894b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5895b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rands (financial) random", 5896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South African rand random", 5897b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean Won random", 5898b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5899b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 South Korean won random", 5900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet Rouble random", 5901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet rouble random", 5902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Soviet roubles random", 5903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (A account) random", 5904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta (convertible account) random", 5905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish Peseta random", 5906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (A account) random", 5907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta (convertible account) random", 5908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish peseta random", 5909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (A account) random", 5910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas (convertible account) random", 5911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Spanish pesetas random", 5912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Special Drawing Rights random", 591327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan Rupee random", 591427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupee random", 591527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Sri Lankan rupees random", 5916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese Pound random", 5917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pound random", 5918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Sudanese pounds random", 5919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese Dollar random", 5920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollar random", 5921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Surinamese dollars random", 592227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese Guilder random", 592327f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilder random", 592427f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Surinamese guilders random", 5925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi Lilangeni random", 5926b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi lilangeni random", 5927b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swazi emalangeni random", 5928b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish Krona random", 5929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish krona random", 5930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swedish kronor random", 5931b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss Franc random", 5932b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss franc random", 5933b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Swiss francs random", 5934b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian Pound random", 5935b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pound random", 5936b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Syrian pounds random", 5937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan Dollar random", 5938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollar random", 5939b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Taiwan dollars random", 5940b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Ruble random", 5941b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani Somoni random", 5942b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani ruble random", 5943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani rubles random", 5944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somoni random", 5945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tajikistani somonis random", 5946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian Shilling random", 5947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shilling random", 5948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tanzanian shillings random", 5949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Testing Currency Code random", 5951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai Baht random", 5952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Thai baht random", 5954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese Escudo random", 5955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudo random", 5956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Timorese escudos random", 5957f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago Dollar random", 5958f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollar random", 5959f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "1.00 Trinidad & Tobago dollars random", 5960b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian Dinar random", 5961b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinar random", 5962b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Tunisian dinars random", 5963b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5964b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish Lira random", 5965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkish lira random", 5966b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani Manat random", 5967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Turkmenistani manat random", 5969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Next day) random", 5970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar (Same day) random", 5971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US Dollar random", 5972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (next day) random", 5973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar (same day) random", 5974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollar random", 5975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (next day) random", 5976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars (same day) random", 5977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dollars random", 597859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan Shilling (1966\\u20131987) random", 5979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan Shilling random", 598059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shilling (1966\\u20131987) random", 5981b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shilling random", 598259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Ugandan shillings (1966\\u20131987) random", 5983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ugandan shillings random", 5984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Hryvnia random", 5985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian Karbovanets random", 5986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnia random", 5987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian hryvnias random", 5988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovanets random", 5989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Ukrainian karbovantsiv random", 599027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian Real Value Unit random", 5991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 United Arab Emirates Dirham random", 599227f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Unknown Currency random", 599359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan Peso (1975\\u20131993) random", 5994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan Peso random", 599527f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan Peso (Indexed Units) random", 599659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan peso (1975\\u20131993) random", 599727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan peso (indexed units) random", 5998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Uruguayan peso random", 599959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Uruguayan pesos (1975\\u20131993) random", 600027f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Uruguayan pesos (indexed units) random", 60011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani Som random", 60021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani som random", 60031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "1.00 Uzbekistani som random", 6004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu Vatu random", 6005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatu random", 6006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vanuatu vatus random", 6007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan Bol\\u00edvar random", 600859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan Bol\\u00edvar (1871\\u20132008) random", 6009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvar random", 6010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Venezuelan bol\\u00edvars random", 601159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvar (1871\\u20132008) random", 601259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Venezuelan bol\\u00edvars (1871\\u20132008) random", 6013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese Dong random", 6014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 6015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Vietnamese dong random", 6016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Euro random", 6017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR Franc random", 6018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euro random", 6019b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR euros random", 6020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR franc random", 6021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 WIR francs random", 6022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan Tala random", 6023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 6024b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Samoan tala random", 6025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Dinar random", 6026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni Rial random", 6027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinar random", 6028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni dinars random", 6029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rial random", 6030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Yemeni rials random", 603159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Convertible Dinar (1990\\u20131992) random", 603259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian Hard Dinar (1966\\u20131990) random", 603359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian New Dinar (1994\\u20132002) random", 603459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinar (1990\\u20131992) random", 603559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian convertible dinars (1990\\u20131992) random", 603659d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinar (1966\\u20131990) random", 603759d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian hard dinars (1966\\u20131990) random", 603859d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinar (1994\\u20132002) random", 603959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Yugoslavian new dinars (1994\\u20132002) random", 604059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean New Zaire (1993\\u20131998) random", 604159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean Zaire (1971\\u20131993) random", 604259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaire (1993\\u20131998) random", 604359d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean new zaires (1993\\u20131998) random", 604459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaire (1971\\u20131993) random", 604559d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zairean zaires (1971\\u20131993) random", 6046b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian Kwacha random", 6047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwacha random", 6048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Zambian kwachas random", 604959d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean Dollar (1980\\u20132008) random", 605059d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollar (1980\\u20132008) random", 605159d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Zimbabwean dollars (1980\\u20132008) random", 6052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euro random", 6053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 euros random", 605459d709d503bab6e2b61931737e662dd293b40578ccornelius "1.00 Turkish lira (1922\\u20132005) random", 6055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 special drawing rights random", 605627f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value unit random", 605727f654740f2a26ad62a5c155af9199af9e69b889claireho "1.00 Colombian real value units random", 6058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "1.00 unknown currency random", 6059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 6060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char* WRONG_DATA[] = { 6062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Following are missing one last char in the currency name 6063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "usd1.00", // case sensitive 6064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan Cordob", 6065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian Dolla", 6066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Namibian dolla", 6067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese Rupe", 6068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nepalese rupe", 6069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean Guilde", 6070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Netherlands Antillean guilde", 6071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch Guilde", 6072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Dutch guilde", 6073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Israeli New Sheqe", 6074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand Dolla", 6075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 New Zealand dolla", 6076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nicaraguan cordob", 6077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian Nair", 6078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Nigerian nair", 6079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean Wo", 6080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 North Korean wo", 6081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian Kron", 6082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 Norwegian kron", 6083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00 US dolla", 6084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "1.00", 6085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "A1.00", 6086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AD1.00", 6087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AE1.00", 6088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AF1.00", 6089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AL1.00", 6090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AM1.00", 6091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AN1.00", 6092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AO1.00", 6093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AR1.00", 6094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AT1.00", 6095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AU1.00", 6096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AW1.00", 6097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "AZ1.00", 6098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afghan Afghan1.00", 609959d709d503bab6e2b61931737e662dd293b40578ccornelius "Afghan Afghani (1927\\u201320021.00", 6100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Afl1.00", 6101b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Albanian Le1.00", 6102b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Algerian Dina1.00", 6103b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Andorran Peset1.00", 6104b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Angolan Kwanz1.00", 610559d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Kwanza (1977\\u201319901.00", 610659d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan Readjusted Kwanza (1995\\u201319991.00", 610759d709d503bab6e2b61931737e662dd293b40578ccornelius "Angolan New Kwanza (1990\\u201320001.00", 6108b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Austra1.00", 6109b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Argentine Pes1.00", 611059d709d503bab6e2b61931737e662dd293b40578ccornelius "Argentine Peso (1983\\u201319851.00", 6111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Armenian Dra1.00", 6112b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Aruban Flori1.00", 6113b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Australian Dolla1.00", 6114b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Austrian Schillin1.00", 6115b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Azerbaijani Mana1.00", 611659d709d503bab6e2b61931737e662dd293b40578ccornelius "Azerbaijani Manat (1993\\u201320061.00", 6117b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "B1.00", 6118b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BA1.00", 6119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BB1.00", 6120b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BE1.00", 6121b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BG1.00", 6122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BH1.00", 6123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BI1.00", 6124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BM1.00", 6125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BN1.00", 6126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BO1.00", 6127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BR1.00", 6128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BS1.00", 6129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BT1.00", 6130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BU1.00", 6131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BW1.00", 6132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BY1.00", 6133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "BZ1.00", 6134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahamian Dolla1.00", 6135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bahraini Dina1.00", 6136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bangladeshi Tak1.00", 6137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Barbadian Dolla1.00", 6138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bds1.00", 613964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert "Belarusian Ruble (1994\\u201319991.00", 6140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belarusian Rubl1.00", 6141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Fran1.00", 6142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (convertible1.00", 6143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belgian Franc (financial1.00", 6144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Belize Dolla1.00", 6145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bermudan Dolla1.00", 6146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bhutanese Ngultru1.00", 6147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Mvdo1.00", 6148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Pes1.00", 6149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bolivian Bolivian1.00", 6150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Convertible Mar1.00", 6151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bosnia-Herzegovina Dina1.00", 6152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Botswanan Pul1.00", 6153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzad1.00", 6154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzado Nov1.00", 6155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Cruzeir1.00", 615659d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian Cruzeiro (1990\\u201319931.00", 615759d709d503bab6e2b61931737e662dd293b40578ccornelius "Brazilian New Cruzeiro (1967\\u201319861.00", 6158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brazilian Rea1.00", 6159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "British Pound Sterlin1.00", 6160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Brunei Dolla1.00", 6161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Hard Le1.00", 6162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Bulgarian Le1.00", 6163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burmese Kya1.00", 6164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Burundian Fran1.00", 6165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "C1.00", 6166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CA1.00", 6167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CD1.00", 6168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP Fran1.00", 6169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CFP1.00", 6170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CH1.00", 6171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CL1.00", 6172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CN1.00", 6173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CO1.00", 6174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CS1.00", 6175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CU1.00", 6176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CV1.00", 6177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CY1.00", 6178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "CZ1.00", 6179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cambodian Rie1.00", 6180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Canadian Dolla1.00", 6181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cape Verdean Escud1.00", 6182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cayman Islands Dolla1.00", 6183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Chilean Pes1.00", 618427f654740f2a26ad62a5c155af9199af9e69b889claireho "Chilean Unit of Accoun1.00", 618527f654740f2a26ad62a5c155af9199af9e69b889claireho "Chinese Yua1.00", 6186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Colombian Pes1.00", 6187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Comoro Fran1.00", 6188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Congolese Fran1.00", 6189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Costa Rican Col\\u00f31.00", 6190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Dina1.00", 6191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Croatian Kun1.00", 6192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cuban Pes1.00", 6193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Cypriot Poun1.00", 6194b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czech Republic Korun1.00", 6195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Czechoslovak Hard Korun1.00", 6196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "D1.00", 6197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DD1.00", 6198b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DE1.00", 6199b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DJ1.00", 6200b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DK1.00", 6201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DO1.00", 6202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "DZ1.00", 6203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Danish Kron1.00", 6204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "German Mar1.00", 6205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Djiboutian Fran1.00", 6206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dk1.00", 6207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dominican Pes1.00", 6208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EC1.00", 6209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EE1.00", 6210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EG1.00", 6211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EQ1.00", 6212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ER1.00", 6213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ES1.00", 6214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ET1.00", 6215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "EU1.00", 6216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East Caribbean Dolla1.00", 6217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "East German Ostmar1.00", 6218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ecuadorian Sucr1.00", 621927f654740f2a26ad62a5c155af9199af9e69b889claireho "Ecuadorian Unit of Constant Valu1.00", 6220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Egyptian Poun1.00", 6221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ekwel1.00", 6222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Salvadoran Col\\u00f31.00", 6223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Equatorial Guinean Ekwel1.00", 6224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eritrean Nakf1.00", 6225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Es1.00", 6226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Estonian Kroo1.00", 6227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ethiopian Bir1.00", 6228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Eur1.00", 6229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Composite Uni1.00", 6230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Currency Uni1.00", 6231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Monetary Uni1.00", 6232b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBC1.00", 6233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "European Unit of Account (XBD1.00", 6234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "F1.00", 6235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FB1.00", 6236b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FI1.00", 6237b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FJ1.00", 6238b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FK1.00", 6239b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "FR1.00", 6240b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Falkland Islands Poun1.00", 6241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fd1.00", 6242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fijian Dolla1.00", 6243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Finnish Markk1.00", 6244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Fr1.00", 6245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Fran1.00", 6246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French Gold Fran1.00", 6247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "French UIC-Fran1.00", 6248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "G1.00", 6249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GB1.00", 6250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GE1.00", 6251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GH1.00", 6252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GI1.00", 6253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GM1.00", 6254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GN1.00", 6255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GQ1.00", 6256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GR1.00", 6257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GT1.00", 6258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GW1.00", 6259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "GY1.00", 6260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gambian Dalas1.00", 6261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Kupon Lari1.00", 6262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Georgian Lar1.00", 6263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ghanaian Ced1.00", 626459d709d503bab6e2b61931737e662dd293b40578ccornelius "Ghanaian Cedi (1979\\u201320071.00", 6265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gibraltar Poun1.00", 6266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Gol1.00", 6267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Greek Drachm1.00", 6268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guatemalan Quetza1.00", 6269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Fran1.00", 6270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinean Syl1.00", 6271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guinea-Bissau Pes1.00", 6272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Guyanaese Dolla1.00", 6273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HK1.00", 6274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HN1.00", 6275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HR1.00", 6276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HT1.00", 6277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "HU1.00", 6278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Haitian Gourd1.00", 6279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Honduran Lempir1.00", 6280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hong Kong Dolla1.00", 6281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Hungarian Forin1.00", 6282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "I1.00", 6283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IE1.00", 6284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IL1.00", 6285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IN1.00", 6286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IQ1.00", 6287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IR1.00", 6288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IS1.00", 6289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "IT1.00", 6290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Icelandic Kron1.00", 6291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indian Rupe1.00", 6292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Indonesian Rupia1.00", 6293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iranian Ria1.00", 6294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Iraqi Dina1.00", 6295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Irish Poun1.00", 6296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli Poun1.00", 6297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Italian Lir1.00", 6298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "J1.00", 6299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JM1.00", 6300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JO1.00", 6301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "JP1.00", 6302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jamaican Dolla1.00", 6303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Japanese Ye1.00", 6304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Jordanian Dina1.00", 6305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K S1.00", 6306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "K1.00", 6307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KE1.00", 6308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KG1.00", 6309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KH1.00", 6310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KP1.00", 6311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KR1.00", 6312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KW1.00", 6313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KY1.00", 6314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "KZ1.00", 631527f654740f2a26ad62a5c155af9199af9e69b889claireho "Kazakhstani Teng1.00", 6316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kenyan Shillin1.00", 6317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kuwaiti Dina1.00", 6318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Kyrgystani So1.00", 6319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LA1.00", 6320b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LB1.00", 6321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LK1.00", 6322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LR1.00", 6323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LT1.00", 6324b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LU1.00", 6325b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LV1.00", 6326b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "LY1.00", 6327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Laotian Ki1.00", 6328b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Lat1.00", 6329b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Latvian Rubl1.00", 6330b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lebanese Poun1.00", 6331b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lesotho Lot1.00", 6332b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Liberian Dolla1.00", 6333b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Libyan Dina1.00", 6334b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Lit1.00", 6335b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Lithuanian Talona1.00", 6336b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Convertible Fran1.00", 6337b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourg Financial Fran1.00", 6338b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Luxembourgian Fran1.00", 6339b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MA1.00", 6340b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MD1.00", 6341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MDe1.00", 6342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MEX1.00", 6343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MG1.00", 6344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ML1.00", 6345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MM1.00", 6346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MN1.00", 6347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MO1.00", 6348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MR1.00", 6349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MT1.00", 6350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MU1.00", 6351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MV1.00", 6352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MW1.00", 6353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MX1.00", 6354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MY1.00", 6355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "MZ1.00", 6356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macanese Patac1.00", 6357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Macedonian Dena1.00", 6358b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Ariar1.00", 6359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malagasy Fran1.00", 6360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malawian Kwach1.00", 6361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malaysian Ringgi1.00", 6362b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maldivian Rufiya1.00", 6363b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malian Fran1.00", 6364b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Malot1.00", 6365b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Lir1.00", 6366b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Maltese Poun1.00", 6367b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritanian Ouguiy1.00", 6368b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mauritian Rupe1.00", 6369b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mexican Pes1.00", 637059d709d503bab6e2b61931737e662dd293b40578ccornelius "Mexican Silver Peso (1861\\u201319921.00", 637127f654740f2a26ad62a5c155af9199af9e69b889claireho "Mexican Investment Uni1.00", 6372b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moldovan Le1.00", 6373b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mongolian Tugri1.00", 6374b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Dirha1.00", 6375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Moroccan Fran1.00", 6376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Escud1.00", 6377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Mozambican Metica1.00", 637859d709d503bab6e2b61931737e662dd293b40578ccornelius "Myanmar Kya1.00", 6379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "N1.00", 6380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NA1.00", 6381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NAf1.00", 6382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NG1.00", 6383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NI1.00", 6384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NK1.00", 6385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NL1.00", 6386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NO1.00", 6387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NP1.00", 6388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "NT1.00", 6389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Namibian Dolla1.00", 6390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nepalese Rupe1.00", 6391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Netherlands Antillean Guilde1.00", 6392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Dutch Guilde1.00", 6393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Israeli New Sheqe1.00", 6394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Zealand Dolla1.00", 639559d709d503bab6e2b61931737e662dd293b40578ccornelius "Nicaraguan C\\u00f3rdoba (1988\\u201319911.00", 639627f654740f2a26ad62a5c155af9199af9e69b889claireho "Nicaraguan C\\u00f3rdob1.00", 6397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nigerian Nair1.00", 6398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "North Korean Wo1.00", 6399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Norwegian Kron1.00", 6400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Nr1.00", 6401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "OM1.00", 6402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Old Mozambican Metica1.00", 640359d709d503bab6e2b61931737e662dd293b40578ccornelius "Romanian Leu (1952\\u201320061.00", 640459d709d503bab6e2b61931737e662dd293b40578ccornelius "Serbian Dinar (2002\\u201320061.00", 640559d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Dinar (1992\\u201320071.00", 640659d709d503bab6e2b61931737e662dd293b40578ccornelius "Sudanese Pound (1957\\u201319981.00", 640759d709d503bab6e2b61931737e662dd293b40578ccornelius "Turkish Lira (1922\\u201320051.00", 6408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Omani Ria1.00", 6409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PA1.00", 6410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PE1.00", 6411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PG1.00", 6412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PH1.00", 6413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PK1.00", 6414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PL1.00", 6415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PT1.00", 6416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "PY1.00", 6417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pakistani Rupe1.00", 6418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Palladiu1.00", 6419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Panamanian Balbo1.00", 6420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Papua New Guinean Kin1.00", 6421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Paraguayan Guaran1.00", 6422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Int1.00", 642359d709d503bab6e2b61931737e662dd293b40578ccornelius "Peruvian Sol (1863\\u201319651.00", 6424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Peruvian Sol Nuev1.00", 6425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Philippine Pes1.00", 6426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Platinu1.00", 6427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Polish Zlot1.00", 642859d709d503bab6e2b61931737e662dd293b40578ccornelius "Polish Zloty (1950\\u201319951.00", 6429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Escud1.00", 6430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Portuguese Guinea Escud1.00", 6431b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Pr1.00", 6432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "QA1.00", 6433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Qatari Ria1.00", 6434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RD1.00", 6435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RH1.00", 6436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RINET Fund1.00", 6437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RS1.00", 6438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RU1.00", 6439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "RW1.00", 6440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rb1.00", 6441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rhodesian Dolla1.00", 6442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Romanian Le1.00", 6443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Russian Rubl1.00", 644459d709d503bab6e2b61931737e662dd293b40578ccornelius "Russian Ruble (1991\\u201319981.00", 6445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Rwandan Fran1.00", 6446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "S1.00", 6447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SA1.00", 6448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SB1.00", 6449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SC1.00", 6450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SD1.00", 6451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SE1.00", 6452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SG1.00", 6453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SH1.00", 6454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SI1.00", 6455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SK1.00", 6456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL R1.00", 6457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SL1.00", 6458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SO1.00", 6459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ST1.00", 6460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SU1.00", 6461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SV1.00", 6462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SY1.00", 6463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "SZ1.00", 6464f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "St. Helena Poun1.00", 6465f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "S\\u00e3o Tom\\u00e9 & Pr\\u00edncipe Dobr1.00", 6466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Saudi Riya1.00", 6467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Serbian Dina1.00", 6468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Seychellois Rupe1.00", 6469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sh1.00", 6470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sierra Leonean Leon1.00", 6471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Silve1.00", 6472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Singapore Dolla1.00", 6473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovak Korun1.00", 6474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Slovenian Tola1.00", 6475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Solomon Islands Dolla1.00", 6476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Somali Shillin1.00", 6477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Ran1.00", 6478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South African Rand (financial1.00", 6479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "South Korean Wo1.00", 6480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Soviet Roubl1.00", 6481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peset1.00", 6482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (A account1.00", 6483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Spanish Peseta (convertible account1.00", 6484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Special Drawing Right1.00", 648527f654740f2a26ad62a5c155af9199af9e69b889claireho "Sri Lankan Rupe1.00", 6486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Sudanese Poun1.00", 6487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Surinamese Dolla1.00", 648827f654740f2a26ad62a5c155af9199af9e69b889claireho "Surinamese Guilde1.00", 6489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swazi Lilangen1.00", 6490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swedish Kron1.00", 6491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Swiss Fran1.00", 6492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Syrian Poun1.00", 6493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "T S1.00", 6494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TH1.00", 6495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TJ1.00", 6496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TM1.00", 6497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TN1.00", 6498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TO1.00", 6499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TP1.00", 6500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TR1.00", 6501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TT1.00", 6502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TW1.00", 6503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "TZ1.00", 6504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "New Taiwan Dolla1.00", 6505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Rubl1.00", 6506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tajikistani Somon1.00", 6507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tanzanian Shillin1.00", 6508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Testing Currency Cod1.00", 6509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Thai Bah1.00", 6510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Timorese Escud1.00", 6511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tongan Pa\\u20bbang1.00", 6512f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius "Trinidad & Tobago Dolla1.00", 6513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Tunisian Dina1.00", 6514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkish Lir1.00", 6515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Turkmenistani Mana1.00", 6516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U S1.00", 6517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "U1.00", 6518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UA1.00", 6519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UG1.00", 6520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dolla1.00", 6521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Next day1.00", 6522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US Dollar (Same day1.00", 6523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "US1.00", 6524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UY1.00", 6525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "UZ1.00", 6526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ugandan Shillin1.00", 652759d709d503bab6e2b61931737e662dd293b40578ccornelius "Ugandan Shilling (1966\\u201319871.00", 6528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Hryvni1.00", 6529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ukrainian Karbovanet1.00", 653027f654740f2a26ad62a5c155af9199af9e69b889claireho "Colombian Real Value Uni1.00", 6531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "United Arab Emirates Dirha1.00", 653227f654740f2a26ad62a5c155af9199af9e69b889claireho "Unknown Currenc1.00", 6533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Ur1.00", 653459d709d503bab6e2b61931737e662dd293b40578ccornelius "Uruguay Peso (1975\\u201319931.00", 6535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Uruguay Peso Uruguay1.00", 653627f654740f2a26ad62a5c155af9199af9e69b889claireho "Uruguay Peso (Indexed Units1.00", 65371b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Uzbekistani So1.00", 6538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "V1.00", 6539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VE1.00", 6540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VN1.00", 6541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "VU1.00", 6542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vanuatu Vat1.00", 6543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edva1.00", 6544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Venezuelan Bol\\u00edvar Fuert1.00", 6545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Vietnamese Don1.00", 65461b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "West African CFA Fran1.00", 65471b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert "Central African CFA Fran1.00", 6548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Eur1.00", 6549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WIR Fran1.00", 6550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "WS1.00", 6551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Samoa Tal1.00", 6552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XA1.00", 6553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XB1.00", 6554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XC1.00", 6555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XD1.00", 6556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XE1.00", 6557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XF1.00", 6558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XO1.00", 6559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XP1.00", 6560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XR1.00", 6561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XT1.00", 6562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "XX1.00", 6563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YD1.00", 6564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YE1.00", 6565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "YU1.00", 6566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Dina1.00", 6567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yemeni Ria1.00", 6568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Yugoslavian Convertible Dina1.00", 656959d709d503bab6e2b61931737e662dd293b40578ccornelius "Yugoslavian Hard Dinar (1966\\u201319901.00", 657027f654740f2a26ad62a5c155af9199af9e69b889claireho "Yugoslavian New Dina1.00", 6571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Z1.00", 6572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZA1.00", 6573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZM1.00", 6574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZR1.00", 6575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "ZW1.00", 657659d709d503bab6e2b61931737e662dd293b40578ccornelius "Zairean New Zaire (1993\\u201319981.00", 6577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zairean Zair1.00", 6578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "Zambian Kwach1.00", 657959d709d503bab6e2b61931737e662dd293b40578ccornelius "Zimbabwean Dollar (1980\\u201320081.00", 6580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "dra1.00", 6581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "lar1.00", 6582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "le1.00", 6583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "man1.00", 6584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "so1.00", 6585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 6586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 6587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru Locale locale("en_US"); 65888de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i=0; i<UPRV_LENGTHOF(DATA); ++i) { 6589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(DATA[i]); 6590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6591b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 65926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6593b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6594103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6595103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6596103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6597103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( doubleVal != 1.0 ) { 6598103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency value other than 1.0: " + formatted + " -> " + doubleVal); 6599103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 6600103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 6601103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Failed to parse as currency: " + formatted); 66026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 66036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 66046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 66056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 66066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 66118de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (uint32_t i=0; i<UPRV_LENGTHOF(WRONG_DATA); ++i) { 6612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString formatted = ctou(WRONG_DATA[i]); 6613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 6614b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat* numFmt = NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 66156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (numFmt != NULL && U_SUCCESS(status)) { 6616b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ParsePosition parsePos; 6617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius LocalPointer<CurrencyAmount> currAmt(numFmt->parseCurrency(formatted, parsePos)); 6618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (parsePos.getIndex() > 0) { 6619103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double doubleVal = currAmt->getNumber().getDouble(status); 6620103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("Parsed as currency, should not have: " + formatted + " -> " + doubleVal); 66216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 66226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 66236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Unable to create NumberFormat. - %s", u_errorName(status)); 66246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete numFmt; 66256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru break; 6626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete numFmt; 6628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 6629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 6630c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 663150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t); 663250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 663350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// UnicodeString s; 663450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::string ss; 663550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// std::cout << s.toUTF8String(ss) 663650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount, 663750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 663850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool found[10]; 663950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition fp; 664050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 664150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (tupleCount > 10) { 664250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("internal error, tupleCount too large", FALSE); 664350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 664450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 664550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = FALSE; 664650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 664750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 664850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 664950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 665050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho while (iter.next(fp)) { 665150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = FALSE; 665250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t id = fp.getField(); 665350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t start = fp.getBeginIndex(); 665450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t limit = fp.getEndIndex(); 665550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 665650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // is there a logln using printf? 665750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho char buf[128]; 665850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho sprintf(buf, "%24s %3d %3d %3d", attrString(id), id, start, limit); 665950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(buf); 666050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 666150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 666250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (found[i]) { 666350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho continue; 666450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 666550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (values[i*3] == id && 666650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+1] == start && 666750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho values[i*3+2] == limit) { 666850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho found[i] = ok = TRUE; 666950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 667050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 667150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 667250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 667350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"found [" + id + "," + start + "," + limit + "]", ok); 667450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 667550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 667650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // check that all were found 667750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool ok = TRUE; 667850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int i = 0; i < tupleCount; ++i) { 667950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!found[i]) { 668050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ok = FALSE; 668150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString) "missing [" + values[i*3] + "," + values[i*3+1] + "," + values[i*3+2] + "]", found[i]); 668250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 668350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 668450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue("no expected values were missing", ok); 668550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 668650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 668750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit, 668850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const UnicodeString& str) { 668950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln(str); 669050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"id " + id + " == " + pos.getField(), id == pos.getField()); 669150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"begin " + start + " == " + pos.getBeginIndex(), start == pos.getBeginIndex()); 669250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"end " + limit + " == " + pos.getEndIndex(), limit == pos.getEndIndex()); 669350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 669450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 669550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFieldPositionIterator() { 669650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // bug 7372 669750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 669850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter1; 669950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator iter2; 670050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPosition pos; 670150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 670250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(status); 670350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 670450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 670550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double num = 1234.56; 670650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str1; 670750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString str2; 670850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 670950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"self==", iter1 == iter1); 671050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1==iter2", iter1 == iter2); 671150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 671250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str1, &iter1, status); 671350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2", iter1 != iter2); 671450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, &iter2, status); 671550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (2)", iter1 == iter2); 671650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter1.next(pos); 671750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 != iter2 (2)", iter1 != iter2); 671850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho iter2.next(pos); 671950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertTrue((UnicodeString)"iter1 == iter2 (3)", iter1 == iter2); 672050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 672150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // should format ok with no iterator 672250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str2.remove(); 672350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(num, str2, NULL, status); 672450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho assertEquals("null fpiter", str1, str2); 672550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 672650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 672750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 672850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 672950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestFormatAttributes() { 673050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Locale locale("en_US"); 673150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6732b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho DecimalFormat *decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_CURRENCY, status); 673350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (failure(status, "NumberFormat::createInstance", TRUE)) return; 673450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho double val = 12345.67; 673550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 673650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 673750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6738103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_CURRENCY_FIELD, 0, 1, 6739103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_GROUPING_SEPARATOR_FIELD, 3, 4, 6740103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 7, 6741103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 7, 8, 6742103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 8, 10, 674350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 67448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t tupleCount = UPRV_LENGTHOF(expected)/3; 674550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 674650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 674750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 674850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 674950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 675050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 675150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6752103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 675350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 675450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6755103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 7, result); 675650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 675750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6758103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 675950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 676050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6761103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 8, 10, result); 676250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 676350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 676450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 6765b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho decFmt = (DecimalFormat *) NumberFormat::createInstance(locale, UNUM_SCIENTIFIC, status); 676650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho val = -0.0000123; 676750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 676850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t expected[] = { 6769103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_SIGN_FIELD, 0, 1, 6770103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_INTEGER_FIELD, 1, 2, 6771103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3, 6772103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_FRACTION_FIELD, 3, 5, 6773103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SYMBOL_FIELD, 5, 6, 6774103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_SIGN_FIELD, 6, 7, 6775103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNUM_EXPONENT_FIELD, 7, 8 677650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 67778de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert int32_t tupleCount = UPRV_LENGTHOF(expected)/3; 677850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 677950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho FieldPositionIterator posIter; 678050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 678150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, &posIter, status); 678250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho expectPositions(posIter, expected, tupleCount, result); 678350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 678450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6785103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 678650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 678750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6788103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_INTEGER_FIELD, 1, 2, result); 678950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 679050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 6791103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius FieldPosition fp(UNUM_FRACTION_FIELD); 679250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString result; 679350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho decFmt->format(val, result, fp); 6794103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expectPosition(fp, UNUM_FRACTION_FIELD, 3, 5, result); 679550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 679650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete decFmt; 679750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 679850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho fflush(stderr); 679950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 680050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 680150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoconst char* attrString(int32_t attrId) { 680250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho switch (attrId) { 6803103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_INTEGER_FIELD: return "integer"; 6804103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_FRACTION_FIELD: return "fraction"; 6805103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_DECIMAL_SEPARATOR_FIELD: return "decimal separator"; 6806103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SYMBOL_FIELD: return "exponent symbol"; 6807103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_SIGN_FIELD: return "exponent sign"; 6808103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_EXPONENT_FIELD: return "exponent"; 6809103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_GROUPING_SEPARATOR_FIELD: return "grouping separator"; 6810103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_CURRENCY_FIELD: return "currency"; 6811103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERCENT_FIELD: return "percent"; 6812103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_PERMILL_FIELD: return "permille"; 6813103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius case UNUM_SIGN_FIELD: return "sign"; 681450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho default: return ""; 681550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 681650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 681750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 681850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 681950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// Test formatting & parsing of big decimals. 682050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// API test, not a comprehensive test. 682150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// See DecimalFormatTest/DataDrivenTests 682250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// 682350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_SUCCESS(status) {if (U_FAILURE(status)) errln("file %s, line %d: status: %s", \ 682450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho __FILE__, __LINE__, u_errorName(status));} 682550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define ASSERT_EQUALS(expected, actual) {if ((expected) != (actual)) \ 682650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("file %s, line %d: %s != %s", __FILE__, __LINE__, #expected, #actual);} 682750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 682850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic UBool operator != (const char *s1, UnicodeString &s2) { 682950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // This function lets ASSERT_EQUALS("literal", UnicodeString) work. 683050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UnicodeString us1(s1); 683150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return us1 != s2; 683250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 683350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 683450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid NumberFormatTest::TestDecimal() { 683550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 683650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 683750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f("12.345678999987654321E666", status); 683850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 683950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho StringPiece s = f.getDecimalNumber(status); 684050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 684150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1.2345678999987654321E+667", s); 684250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho //printf("%s\n", s.data()); 684350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 684450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 684550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 684650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 684750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f1("this is not a number", status); 684850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(U_DECIMAL_NUMBER_SYNTAX_ERROR, status); 684950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 685050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 685150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 685250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 685350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho Formattable f; 685450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("123.45", status); 685550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 685650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kDouble, f.getType()); 685750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble()); 685850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(123.45, f.getDouble(status)); 685950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 686050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("123.45", f.getDecimalNumber(status)); 686150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 686250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 686350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("4.5678E7", status); 686450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t n; 686550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho n = f.getLong(); 686650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(45678000, n); 686750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 686850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 686950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("-123", status); 687050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 687150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kLong, f.getType()); 687250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong()); 687350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(-123, f.getLong(status)); 687450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 687550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("-123", f.getDecimalNumber(status)); 687650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 687750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 687850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status = U_ZERO_ERROR; 687950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f.setDecimalNumber("1234567890123", status); // Number too big for 32 bits 688050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 688150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS( Formattable::kInt64, f.getType()); 688250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64()); 688350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS(1234567890123LL, f.getInt64(status)); 688450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 688550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_EQUALS("1234567890123", f.getDecimalNumber(status)); 688650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ASSERT_SUCCESS(status); 688750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 688850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 688950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 689050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6891b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 689227f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 689327f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 689427f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 689527f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 689627f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("244444444444444444444444444444444444446.4"); 689727f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(num, formattedResult, NULL, status); 689827f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 689927f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("244,444,444,444,444,444,444,444,444,444,444,444,446.4", formattedResult); 690027f654740f2a26ad62a5c155af9199af9e69b889claireho //std::string ss; std::cout << formattedResult.toUTF8String(ss); 690127f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 690227f654740f2a26ad62a5c155af9199af9e69b889claireho } 690350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 690450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 690550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 690650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check formatting a DigitList. DigitList is internal, but this is 690750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // a critical interface that must work. 690850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6909b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 691027f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 691127f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 691227f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 691327f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString formattedResult; 691427f654740f2a26ad62a5c155af9199af9e69b889claireho DigitList dl; 691527f654740f2a26ad62a5c155af9199af9e69b889claireho StringPiece num("123.4566666666666666666666666666666666621E+40"); 691627f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 691727f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 691827f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, NULL, status); 691927f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 692027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("1,234,566,666,666,666,666,666,666,666,666,666,666,621,000", formattedResult); 692127f654740f2a26ad62a5c155af9199af9e69b889claireho 692227f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 692327f654740f2a26ad62a5c155af9199af9e69b889claireho num.set("666.666"); 692427f654740f2a26ad62a5c155af9199af9e69b889claireho dl.set(num, status); 692527f654740f2a26ad62a5c155af9199af9e69b889claireho FieldPosition pos(NumberFormat::FRACTION_FIELD); 692627f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 692727f654740f2a26ad62a5c155af9199af9e69b889claireho formattedResult.remove(); 692827f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->format(dl, formattedResult, pos, status); 692927f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 693027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS("666.666", formattedResult); 693127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(4, pos.getBeginIndex()); 693227f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(7, pos.getEndIndex()); 693327f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 693427f654740f2a26ad62a5c155af9199af9e69b889claireho } 693550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 693650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 693750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 693850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check a parse with a formatter with a multiplier. 693950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6940b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_PERCENT, status); 694127f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 694227f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 694327f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 694427f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.84%"; 694527f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 694627f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 694727f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 694827f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("0.0184", result.getDecimalNumber(status).data())); 694927f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 695027f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 695127f654740f2a26ad62a5c155af9199af9e69b889claireho } 695250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 695350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 695454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if U_PLATFORM != U_PF_CYGWIN || defined(CYGWINMSVC) 695554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* 695654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * This test fails on Cygwin (1.7.16) using GCC because of a rounding issue with strtod(). 695754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * See #9463 695854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 695950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 696050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // Check that a parse returns a decimal number with full accuracy 696150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 6962b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmtr = NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, status); 696327f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmtr == NULL) { 696427f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 696527f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 696627f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString input = "1.002200044400088880000070000"; 696727f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 696827f654740f2a26ad62a5c155af9199af9e69b889claireho fmtr->parse(input, result, status); 696927f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 697027f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(0, strcmp("1.00220004440008888000007", result.getDecimalNumber(status).data())); 697127f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_EQUALS(1.00220004440008888, result.getDouble()); 697227f654740f2a26ad62a5c155af9199af9e69b889claireho //std::cout << result.getDecimalNumber(status).data(); 697327f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmtr; 697427f654740f2a26ad62a5c155af9199af9e69b889claireho } 697550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 697654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 697750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 697850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 697950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 698027f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestCurrencyFractionDigits() { 698127f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 698227f654740f2a26ad62a5c155af9199af9e69b889claireho UnicodeString text1, text2; 698327f654740f2a26ad62a5c155af9199af9e69b889claireho double value = 99.12345; 698427f654740f2a26ad62a5c155af9199af9e69b889claireho 698527f654740f2a26ad62a5c155af9199af9e69b889claireho // Create currenct instance 698627f654740f2a26ad62a5c155af9199af9e69b889claireho NumberFormat* fmt = NumberFormat::createCurrencyInstance("ja_JP", status); 698727f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status) || fmt == NULL) { 698827f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln("Unable to create NumberFormat"); 698927f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 699027f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text1); 699127f654740f2a26ad62a5c155af9199af9e69b889claireho 699227f654740f2a26ad62a5c155af9199af9e69b889claireho // Reset the same currency and format the test value again 699327f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->setCurrency(fmt->getCurrency(), status); 699427f654740f2a26ad62a5c155af9199af9e69b889claireho ASSERT_SUCCESS(status); 699527f654740f2a26ad62a5c155af9199af9e69b889claireho fmt->format(value, text2); 699627f654740f2a26ad62a5c155af9199af9e69b889claireho 699727f654740f2a26ad62a5c155af9199af9e69b889claireho if (text1 != text2) { 699827f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"NumberFormat::format() should return the same result - text1=" 699927f654740f2a26ad62a5c155af9199af9e69b889claireho + text1 + " text2=" + text2); 700027f654740f2a26ad62a5c155af9199af9e69b889claireho } 700127f654740f2a26ad62a5c155af9199af9e69b889claireho delete fmt; 700227f654740f2a26ad62a5c155af9199af9e69b889claireho } 700327f654740f2a26ad62a5c155af9199af9e69b889claireho} 700427f654740f2a26ad62a5c155af9199af9e69b889claireho 700527f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberFormatTest::TestExponentParse() { 700627f654740f2a26ad62a5c155af9199af9e69b889claireho 700727f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 700827f654740f2a26ad62a5c155af9199af9e69b889claireho Formattable result; 700927f654740f2a26ad62a5c155af9199af9e69b889claireho ParsePosition parsePos(0); 701027f654740f2a26ad62a5c155af9199af9e69b889claireho 701127f654740f2a26ad62a5c155af9199af9e69b889claireho // set the exponent symbol 701227f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 701327f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getDefault(), status); 701427f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)) { 701527f654740f2a26ad62a5c155af9199af9e69b889claireho dataerrln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (Default)"); 701627f654740f2a26ad62a5c155af9199af9e69b889claireho return; 701727f654740f2a26ad62a5c155af9199af9e69b889claireho } 7018b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 701927f654740f2a26ad62a5c155af9199af9e69b889claireho // create format instance 702027f654740f2a26ad62a5c155af9199af9e69b889claireho status = U_ZERO_ERROR; 702127f654740f2a26ad62a5c155af9199af9e69b889claireho DecimalFormat fmt("#####", symbols, status); 7022b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)) { 702327f654740f2a26ad62a5c155af9199af9e69b889claireho errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); 702427f654740f2a26ad62a5c155af9199af9e69b889claireho } 7025b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 702627f654740f2a26ad62a5c155af9199af9e69b889claireho // parse the text 7027b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt.parse("5.06e-27", result, parsePos); 702827f654740f2a26ad62a5c155af9199af9e69b889claireho if(result.getType() != Formattable::kDouble && 7029b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble() != 5.06E-27 && 7030b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho parsePos.getIndex() != 8 703127f654740f2a26ad62a5c155af9199af9e69b889claireho ) 703227f654740f2a26ad62a5c155af9199af9e69b889claireho { 7033b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("ERROR: parse failed - expected 5.06E-27, 8 - returned %d, %i", 7034b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho result.getDouble(), parsePos.getIndex()); 703527f654740f2a26ad62a5c155af9199af9e69b889claireho } 703627f654740f2a26ad62a5c155af9199af9e69b889claireho} 703727f654740f2a26ad62a5c155af9199af9e69b889claireho 7038b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid NumberFormatTest::TestExplicitParents() { 7039b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 7040b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* Test that number formats are properly inherited from es_419 */ 7041b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* These could be subject to change if the CLDR data changes */ 7042b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho static const char* parentLocaleTests[][2]= { 7043b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* locale ID */ /* expected */ 7044b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_CO", "1.250,75" }, 7045fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_ES", "1.250,75" }, 7046fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius {"es_GQ", "1.250,75" }, 7047b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_MX", "1,250.75" }, 7048b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_US", "1,250.75" }, 7049b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho {"es_VE", "1.250,75" }, 7050b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho }; 7051b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 7052b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString s; 7053b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 70548de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for(int i=0; i < UPRV_LENGTHOF(parentLocaleTests); i++){ 7055b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 7056b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *localeID = parentLocaleTests[i][0]; 7057b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString expected(parentLocaleTests[i][1], -1, US_INV); 7058b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho expected = expected.unescape(); 7059b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char loc[256]={0}; 7060b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uloc_canonicalize(localeID, loc, 256, &status); 7061b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho NumberFormat *fmt= NumberFormat::createInstance(Locale(loc), status); 7062b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(U_FAILURE(status)){ 7063b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Could not create number formatter for locale %s - %s",localeID, u_errorName(status)); 7064b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho continue; 7065b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 7066b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho s.remove(); 7067b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho fmt->format(1250.75, s); 7068b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(s!=expected){ 7069b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln(UnicodeString("FAIL: Expected: ")+expected 7070b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString(" Got: ") + s 7071b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho + UnicodeString( " for locale: ")+ UnicodeString(localeID) ); 7072b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 7073b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)){ 7074b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln((UnicodeString)"FAIL: Status " + (int32_t)status); 7075b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 7076b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete fmt; 7077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 7078b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 7079b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 7080103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7081103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/** 7082103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * Test available numbering systems API. 7083103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */ 7084103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestAvailableNumberingSystems() { 7085103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 7086103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius StringEnumeration *availableNumberingSystems = NumberingSystem::getAvailableNames(status); 7087103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius CHECK_DATA(status, "NumberingSystem::getAvailableNames()") 7088103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7089103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t nsCount = availableNumberingSystems->count(status); 7090c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if ( nsCount < 74 ) { 7091c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("FAIL: Didn't get as many numbering systems as we had hoped for. Need at least 74, got %d",nsCount); 7092103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7093103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7094103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* A relatively simple test of the API. We call getAvailableNames() and cycle through */ 7095103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* each name returned, attempting to create a numbering system based on that name and */ 7096103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* verifying that the name returned from the resulting numbering system is the same */ 7097103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* one that we initially thought. */ 7098103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7099103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t len; 7100103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for ( int32_t i = 0 ; i < nsCount ; i++ ) { 7101103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char *nsname = availableNumberingSystems->next(&len,status); 7102103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius NumberingSystem* ns = NumberingSystem::createInstanceByName(nsname,status); 7103c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK for ns = %s",nsname); 7104103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( uprv_strcmp(nsname,ns->getName()) ) { 7105103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: Numbering system name didn't match for name = %s\n",nsname); 7106103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7107103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7108103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete ns; 7109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete availableNumberingSystems; 7112103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 7113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7114103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid 7115103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusNumberFormatTest::Test9087(void) 7116103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius{ 7117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(pattern,"#",1); 7118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(pattern,"#",1); 7119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7120103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(infstr,"INF",3); 7121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(infstr,"INF",3); 7122103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7123103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_DECL(nanstr,"NAN",3); 7124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_STRING_INIT(nanstr,"NAN",3); 7125103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7126103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar outputbuf[50] = {0}; 7127103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 7128103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UNumberFormat* fmt = unum_open(UNUM_PATTERN_DECIMAL,pattern,1,NULL,NULL,&status); 7129103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 7130103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius dataerrln("FAIL: error in unum_open() - %s", u_errorName(status)); 7131103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 7132103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_INFINITY_SYMBOL,infstr,3,&status); 7135103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setSymbol(fmt,UNUM_NAN_SYMBOL,nanstr,3,&status); 7136103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 7137103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln("FAIL: error setting symbols"); 7138103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7139103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7140103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius double inf = uprv_getInfinity(); 7141103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7142103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setAttribute(fmt,UNUM_ROUNDING_MODE,UNUM_ROUND_HALFEVEN); 7143103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_setDoubleAttribute(fmt,UNUM_ROUNDING_INCREMENT,0); 7144103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UFieldPosition position = { 0, 0, 0}; 7146103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_formatDouble(fmt,inf,outputbuf,50,&position,&status); 7147103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7148103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( u_strcmp(infstr, outputbuf)) { 7149103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius errln((UnicodeString)"FAIL: unexpected result for infinity - expected " + infstr + " got " + outputbuf); 7150103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7151103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius unum_close(fmt); 7153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 7154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "dcfmtimp.h" 7156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 7157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid NumberFormatTest::TestFormatFastpaths() { 7158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_FORMAT_FASTPATHS_49 715954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Sizeof DecimalFormat = %d, Sizeof DecimalFormatInternal=%d, UNUM_DECIMALFORMAT_INTERNAL_SIZE=%d\n", 7160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius sizeof(DecimalFormat), sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 716154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(UNUM_DECIMALFORMAT_INTERNAL_SIZE < sizeof(DecimalFormatInternal)) { 716254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is only %d. Increase the #define?\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE); 716354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(UNUM_DECIMALFORMAT_INTERNAL_SIZE > (sizeof(DecimalFormatInternal)+16)) { 716454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("Note: sizeof(DecimalFormatInternal)=%d but UNUM_DECIMALFORMAT_INTERNAL_SIZE is %d. Decrease the #define? sizeof(DecimalFormat)=%d\n", sizeof(DecimalFormatInternal), UNUM_DECIMALFORMAT_INTERNAL_SIZE, sizeof(DecimalFormat)); 716554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else 716754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius infoln("NOTE: UCONFIG_FORMAT_FASTPATHS not set, test skipped."); 7168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 7169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 717054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // get some additional case 717154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 717254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 717354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000",""),status); 7174c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 7175c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 717654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 7177c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t long_number = 1; 7178c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString expect = "0001"; 7179c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 7180c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition pos; 7181c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert df.format(long_number, result, pos); 7182c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if(U_FAILURE(status)||expect!=result) { 7183c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")); 7184c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else { 7185c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")); 7186c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 718754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7188103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 718954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 719054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 719154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 7192c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 7193c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 719454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 7195c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t long_number = U_INT64_MIN; // -9223372036854775808L; 7196c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // uint8_t bits[8]; 7197c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // memcpy(bits,&long_number,8); 7198c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // for(int i=0;i<8;i++) { 7199c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // logln("bits: %02X", (unsigned int)bits[i]); 7200c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // } 7201c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString expect = "-9223372036854775808"; 7202c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 7203c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition pos; 7204c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert df.format(long_number, result, pos); 7205c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if(U_FAILURE(status)||expect!=result) { 7206c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 7207c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else { 7208c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775808"); 7209c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 721054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 721254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 721354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 721454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 7215c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 7216c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 721754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 7218c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t long_number = U_INT64_MAX; // -9223372036854775808L; 7219c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // uint8_t bits[8]; 7220c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // memcpy(bits,&long_number,8); 7221c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // for(int i=0;i<8;i++) { 7222c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // logln("bits: %02X", (unsigned int)bits[i]); 7223c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // } 7224c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString expect = "9223372036854775807"; 7225c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 7226c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition pos; 7227c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert df.format(long_number, result, pos); 7228c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if(U_FAILURE(status)||expect!=result) { 7229c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 7230c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else { 7231c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on U_INT64_MAX"); 7232c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 723354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7234103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 723554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 723654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 723754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 7238c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 7239c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 724054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 7241c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t long_number = 0; 7242c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // uint8_t bits[8]; 7243c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // memcpy(bits,&long_number,8); 7244c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // for(int i=0;i<8;i++) { 7245c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // logln("bits: %02X", (unsigned int)bits[i]); 7246c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // } 7247c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString expect = "0000000000000000000"; 7248c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 7249c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition pos; 7250c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert df.format(long_number, result, pos); 7251c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if(U_FAILURE(status)||expect!=result) { 7252c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 7253c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else { 7254c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on 0"); 7255c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 725654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 725854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 725954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status=U_ZERO_ERROR; 726054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius DecimalFormat df(UnicodeString("0000000000000000000",""),status); 7261c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 7262c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 726354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 7264c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int64_t long_number = U_INT64_MIN + 1; 7265c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString expect = "-9223372036854775807"; 7266c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 7267c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition pos; 7268c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert df.format(long_number, result, pos); 7269c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if(U_FAILURE(status)||expect!=result) { 7270c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errcheckln(status, "FAIL: expected '"+expect+"' got '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 7271c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } else { 7272c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert logln("OK: got expected '"+result+"' status "+UnicodeString(u_errorName(status),"")+" on -9223372036854775807"); 7273c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 727454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 7275103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 727654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 727754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 727854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 727954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid NumberFormatTest::TestFormattableSize(void) { 728054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(sizeof(FmtStackData) > UNUM_INTERNAL_STACKARRAY_SIZE) { 728154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Error: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 728254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 728354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(sizeof(FmtStackData) < UNUM_INTERNAL_STACKARRAY_SIZE) { 728454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("Warning: sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 728554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 728654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 728754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius logln("sizeof(FmtStackData)=%d, UNUM_INTERNAL_STACKARRAY_SIZE=%d\n", 728854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sizeof(FmtStackData), UNUM_INTERNAL_STACKARRAY_SIZE); 7289103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 7290103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 7291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 729259d709d503bab6e2b61931737e662dd293b40578ccorneliusUBool NumberFormatTest::testFormattableAsUFormattable(const char *file, int line, Formattable &f) { 729359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString fileLine = UnicodeString(file)+UnicodeString(":")+line+UnicodeString(": "); 729459d709d503bab6e2b61931737e662dd293b40578ccornelius 729559d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *u = f.toUFormattable(); 729659d709d503bab6e2b61931737e662dd293b40578ccornelius logln(); 729759d709d503bab6e2b61931737e662dd293b40578ccornelius if (u == NULL) { 729859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error: f.toUFormattable() retuned NULL."); 729959d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 730059d709d503bab6e2b61931737e662dd293b40578ccornelius } 730159d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: comparing Formattable with UFormattable", file, line); 730259d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + toString(f)); 730359d709d503bab6e2b61931737e662dd293b40578ccornelius 730459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 730559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode valueStatus = U_ZERO_ERROR; 730659d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType expectUType = UFMT_COUNT; // invalid 730759d709d503bab6e2b61931737e662dd293b40578ccornelius 730859d709d503bab6e2b61931737e662dd293b40578ccornelius UBool triedExact = FALSE; // did we attempt an exact comparison? 730959d709d503bab6e2b61931737e662dd293b40578ccornelius UBool exactMatch = FALSE; // was the exact comparison true? 731059d709d503bab6e2b61931737e662dd293b40578ccornelius 731159d709d503bab6e2b61931737e662dd293b40578ccornelius switch( f.getType() ) { 731259d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDate: 731359d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DATE; 731459d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDate()==ufmt_getDate(u, &valueStatus)); 731559d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 731659d709d503bab6e2b61931737e662dd293b40578ccornelius break; 731759d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kDouble: 731859d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_DOUBLE; 731959d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getDouble()==ufmt_getDouble(u, &valueStatus)); 732059d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 732159d709d503bab6e2b61931737e662dd293b40578ccornelius break; 732259d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kLong: 732359d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_LONG; 732459d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getLong()==ufmt_getLong(u, &valueStatus)); 732559d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 732659d709d503bab6e2b61931737e662dd293b40578ccornelius break; 732759d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kString: 732859d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_STRING; 732959d709d503bab6e2b61931737e662dd293b40578ccornelius { 733059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str; 733159d709d503bab6e2b61931737e662dd293b40578ccornelius f.getString(str); 733259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 733359d709d503bab6e2b61931737e662dd293b40578ccornelius const UChar* uch = ufmt_getUChars(u, &len, &valueStatus); 733459d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_SUCCESS(valueStatus)) { 733559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString str2(uch, len); 733659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue("UChar* NULL-terminated", uch[len]==0); 733759d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (str == str2); 733859d709d503bab6e2b61931737e662dd293b40578ccornelius } 733959d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 734059d709d503bab6e2b61931737e662dd293b40578ccornelius } 734159d709d503bab6e2b61931737e662dd293b40578ccornelius break; 734259d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kArray: 734359d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_ARRAY; 734459d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 734559d709d503bab6e2b61931737e662dd293b40578ccornelius { 734659d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count = ufmt_getArrayLength(u, &valueStatus); 734759d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t count2; 734859d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable *array2 = f.getArray(count2); 734959d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = assertEquals(fileLine + " array count", count, count2); 735059d709d503bab6e2b61931737e662dd293b40578ccornelius 735159d709d503bab6e2b61931737e662dd293b40578ccornelius if(exactMatch) { 735259d709d503bab6e2b61931737e662dd293b40578ccornelius for(int i=0;U_SUCCESS(valueStatus) && i<count;i++) { 735359d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattable *uu = ufmt_getArrayItemByIndex(u, i, &valueStatus); 735459d709d503bab6e2b61931737e662dd293b40578ccornelius if(*Formattable::fromUFormattable(uu) != (array2[i])) { 735559d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: operator== did not match at index[%d] - %p vs %p", file, line, i, 735659d709d503bab6e2b61931737e662dd293b40578ccornelius (const void*)Formattable::fromUFormattable(uu), (const void*)&(array2[i])); 735759d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 735859d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 735959d709d503bab6e2b61931737e662dd293b40578ccornelius if(!testFormattableAsUFormattable("(sub item)",i,*Formattable::fromUFormattable(uu))) { 736059d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = FALSE; 736159d709d503bab6e2b61931737e662dd293b40578ccornelius } 736259d709d503bab6e2b61931737e662dd293b40578ccornelius } 736359d709d503bab6e2b61931737e662dd293b40578ccornelius } 736459d709d503bab6e2b61931737e662dd293b40578ccornelius } 736559d709d503bab6e2b61931737e662dd293b40578ccornelius } 736659d709d503bab6e2b61931737e662dd293b40578ccornelius break; 736759d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kInt64: 736859d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_INT64; 736959d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getInt64()==ufmt_getInt64(u, &valueStatus)); 737059d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 737159d709d503bab6e2b61931737e662dd293b40578ccornelius break; 737259d709d503bab6e2b61931737e662dd293b40578ccornelius case Formattable::kObject: 737359d709d503bab6e2b61931737e662dd293b40578ccornelius expectUType = UFMT_OBJECT; 737459d709d503bab6e2b61931737e662dd293b40578ccornelius exactMatch = (f.getObject()==ufmt_getObject(u, &valueStatus)); 737559d709d503bab6e2b61931737e662dd293b40578ccornelius triedExact = TRUE; 737659d709d503bab6e2b61931737e662dd293b40578ccornelius break; 737759d709d503bab6e2b61931737e662dd293b40578ccornelius } 737859d709d503bab6e2b61931737e662dd293b40578ccornelius UFormattableType uType = ufmt_getType(u, &status); 737959d709d503bab6e2b61931737e662dd293b40578ccornelius 738059d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(status)) { 738159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: Error calling ufmt_getType - %s", file, line, u_errorName(status)); 738259d709d503bab6e2b61931737e662dd293b40578ccornelius return FALSE; 738359d709d503bab6e2b61931737e662dd293b40578ccornelius } 738459d709d503bab6e2b61931737e662dd293b40578ccornelius 738559d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != expectUType) { 738659d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got type (%d) expected (%d) from ufmt_getType", file, line, (int) uType, (int) expectUType); 738759d709d503bab6e2b61931737e662dd293b40578ccornelius } 738859d709d503bab6e2b61931737e662dd293b40578ccornelius 738959d709d503bab6e2b61931737e662dd293b40578ccornelius if(triedExact) { 739059d709d503bab6e2b61931737e662dd293b40578ccornelius if(U_FAILURE(valueStatus)) { 739159d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: got err %s trying to ufmt_get...() for exact match check", file, line, u_errorName(valueStatus)); 739259d709d503bab6e2b61931737e662dd293b40578ccornelius } else if(!exactMatch) { 739359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("%s:%d: failed exact match for the Formattable type", file, line); 739459d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 739559d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: exact match OK", file, line); 739659d709d503bab6e2b61931737e662dd293b40578ccornelius } 739759d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 739859d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: note, did not attempt exact match for this formattable type", file, line); 739959d709d503bab6e2b61931737e662dd293b40578ccornelius } 740059d709d503bab6e2b61931737e662dd293b40578ccornelius 740159d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertEquals(fileLine + " isNumeric()", f.isNumeric(), ufmt_isNumeric(u)) 740259d709d503bab6e2b61931737e662dd293b40578ccornelius && f.isNumeric()) { 740359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode convStatus = U_ZERO_ERROR; 740459d709d503bab6e2b61931737e662dd293b40578ccornelius 740559d709d503bab6e2b61931737e662dd293b40578ccornelius if(uType != UFMT_INT64) { // may fail to compare 740659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(fileLine + " as doubles ==", f.getDouble(convStatus)==ufmt_getDouble(u, &convStatus)); 740759d709d503bab6e2b61931737e662dd293b40578ccornelius } 740859d709d503bab6e2b61931737e662dd293b40578ccornelius 740959d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (numeric conversion status)", convStatus) ) { 741059d709d503bab6e2b61931737e662dd293b40578ccornelius StringPiece fDecNum = f.getDecimalNumber(convStatus); 741159d709d503bab6e2b61931737e662dd293b40578ccornelius#if 1 741259d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 741359d709d503bab6e2b61931737e662dd293b40578ccornelius const char *decNumChars = ufmt_getDecNumChars(u, &len, &convStatus); 741459d709d503bab6e2b61931737e662dd293b40578ccornelius#else 741559d709d503bab6e2b61931737e662dd293b40578ccornelius // copy version 741659d709d503bab6e2b61931737e662dd293b40578ccornelius char decNumChars[200]; 741759d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len = ufmt_getDecNumChars(u, decNumChars, 200, &convStatus); 741859d709d503bab6e2b61931737e662dd293b40578ccornelius#endif 741959d709d503bab6e2b61931737e662dd293b40578ccornelius 742059d709d503bab6e2b61931737e662dd293b40578ccornelius if( assertSuccess(fileLine + " (decNumbers conversion)", convStatus) ) { 742159d709d503bab6e2b61931737e662dd293b40578ccornelius logln(fileLine + decNumChars); 742259d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars length==", len, fDecNum.length()); 742359d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " decNumChars digits", decNumChars, fDecNum.data()); 742459d709d503bab6e2b61931737e662dd293b40578ccornelius } 742559d709d503bab6e2b61931737e662dd293b40578ccornelius 742659d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionF = U_ZERO_ERROR; 742759d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t l = f.getInt64(int64ConversionF); 742859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode int64ConversionU = U_ZERO_ERROR; 742959d709d503bab6e2b61931737e662dd293b40578ccornelius int64_t r = ufmt_getInt64(u, &int64ConversionU); 743059d709d503bab6e2b61931737e662dd293b40578ccornelius 743159d709d503bab6e2b61931737e662dd293b40578ccornelius if( (l==r) 743259d709d503bab6e2b61931737e662dd293b40578ccornelius && ( uType != UFMT_INT64 ) // int64 better not overflow 743359d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionU) 743459d709d503bab6e2b61931737e662dd293b40578ccornelius && (U_INVALID_FORMAT_ERROR==int64ConversionF) ) { 743559d709d503bab6e2b61931737e662dd293b40578ccornelius logln("%s:%d: OK: 64 bit overflow", file, line); 743659d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 743759d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals(fileLine + " as int64 ==", l, r); 743859d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " Formattable.getnt64()", int64ConversionF); 743959d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess(fileLine + " ufmt_getInt64()", int64ConversionU); 744059d709d503bab6e2b61931737e662dd293b40578ccornelius } 744159d709d503bab6e2b61931737e662dd293b40578ccornelius } 744259d709d503bab6e2b61931737e662dd293b40578ccornelius } 744359d709d503bab6e2b61931737e662dd293b40578ccornelius return exactMatch || !triedExact; 744459d709d503bab6e2b61931737e662dd293b40578ccornelius} 744559d709d503bab6e2b61931737e662dd293b40578ccornelius 744659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestUFormattable(void) { 744759d709d503bab6e2b61931737e662dd293b40578ccornelius { 744859d709d503bab6e2b61931737e662dd293b40578ccornelius // test that a default formattable is equal to Formattable() 744959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 745059d709d503bab6e2b61931737e662dd293b40578ccornelius LocalUFormattablePointer defaultUFormattable(ufmt_open(&status)); 745159d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("calling umt_open", status); 745259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable defaultFormattable; 745359d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 745459d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 745559d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 745659d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing ufmt_open() with Formattable()", 745759d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 745859d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultUFormattable.getAlias())))); 745959d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing Formattable() round tripped through UFormattable", 746059d709d503bab6e2b61931737e662dd293b40578ccornelius (defaultFormattable 746159d709d503bab6e2b61931737e662dd293b40578ccornelius == *(Formattable::fromUFormattable(defaultFormattable.toUFormattable())))); 746259d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue((UnicodeString)"comparing &Formattable() round tripped through UFormattable", 746359d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 746459d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultFormattable.toUFormattable()))); 746559d709d503bab6e2b61931737e662dd293b40578ccornelius assertFalse((UnicodeString)"comparing &Formattable() with ufmt_open()", 746659d709d503bab6e2b61931737e662dd293b40578ccornelius ((&defaultFormattable) 746759d709d503bab6e2b61931737e662dd293b40578ccornelius == Formattable::fromUFormattable(defaultUFormattable.getAlias()))); 746859d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, defaultFormattable); 746959d709d503bab6e2b61931737e662dd293b40578ccornelius } 747059d709d503bab6e2b61931737e662dd293b40578ccornelius // test some random Formattables 747159d709d503bab6e2b61931737e662dd293b40578ccornelius { 747259d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(ucal_getNow(), Formattable::kIsDate); 747359d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 747459d709d503bab6e2b61931737e662dd293b40578ccornelius } 747559d709d503bab6e2b61931737e662dd293b40578ccornelius { 747659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((double)1.61803398874989484820); // golden ratio 747759d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 747859d709d503bab6e2b61931737e662dd293b40578ccornelius } 747959d709d503bab6e2b61931737e662dd293b40578ccornelius { 748059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int64_t)80994231587905127LL); // weight of the moon, in kilotons http://solarsystem.nasa.gov/planets/profile.cfm?Display=Facts&Object=Moon 748159d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 748259d709d503bab6e2b61931737e662dd293b40578ccornelius } 748359d709d503bab6e2b61931737e662dd293b40578ccornelius { 748459d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f((int32_t)4); // random number, source: http://www.xkcd.com/221/ 748559d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 748659d709d503bab6e2b61931737e662dd293b40578ccornelius } 748759d709d503bab6e2b61931737e662dd293b40578ccornelius { 748859d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f("Hello world."); // should be invariant? 748959d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 749059d709d503bab6e2b61931737e662dd293b40578ccornelius } 749159d709d503bab6e2b61931737e662dd293b40578ccornelius { 749259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 749359d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(StringPiece("73476730924573500000000.0"), status2); // weight of the moon, kg 749459d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a StringPiece", status2); 749559d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 749659d709d503bab6e2b61931737e662dd293b40578ccornelius } 749759d709d503bab6e2b61931737e662dd293b40578ccornelius { 749859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status2 = U_ZERO_ERROR; 749959d709d503bab6e2b61931737e662dd293b40578ccornelius UObject *obj = new Locale(); 750059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable f(obj); 750159d709d503bab6e2b61931737e662dd293b40578ccornelius assertSuccess("Constructing a Formattable from a default constructed Locale()", status2); 750259d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, f); 750359d709d503bab6e2b61931737e662dd293b40578ccornelius } 750459d709d503bab6e2b61931737e662dd293b40578ccornelius { 750559d709d503bab6e2b61931737e662dd293b40578ccornelius const Formattable array[] = { 750659d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable(ucal_getNow(), Formattable::kIsDate), 750759d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((int32_t)4), 750859d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable((double)1.234), 750959d709d503bab6e2b61931737e662dd293b40578ccornelius }; 751059d709d503bab6e2b61931737e662dd293b40578ccornelius 751159d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fa(array, 3); 751259d709d503bab6e2b61931737e662dd293b40578ccornelius testFormattableAsUFormattable(__FILE__, __LINE__, fa); 751359d709d503bab6e2b61931737e662dd293b40578ccornelius } 751459d709d503bab6e2b61931737e662dd293b40578ccornelius} 751559d709d503bab6e2b61931737e662dd293b40578ccornelius 751659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestSignificantDigits(void) { 751759d709d503bab6e2b61931737e662dd293b40578ccornelius double input[] = { 751859d709d503bab6e2b61931737e662dd293b40578ccornelius 0, 0, 751959d709d503bab6e2b61931737e662dd293b40578ccornelius 0.1, -0.1, 752059d709d503bab6e2b61931737e662dd293b40578ccornelius 123, -123, 752159d709d503bab6e2b61931737e662dd293b40578ccornelius 12345, -12345, 752259d709d503bab6e2b61931737e662dd293b40578ccornelius 123.45, -123.45, 752359d709d503bab6e2b61931737e662dd293b40578ccornelius 123.44501, -123.44501, 752459d709d503bab6e2b61931737e662dd293b40578ccornelius 0.001234, -0.001234, 752559d709d503bab6e2b61931737e662dd293b40578ccornelius 0.00000000123, -0.00000000123, 752659d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000000000000000123, -0.0000000000000000000123, 752759d709d503bab6e2b61931737e662dd293b40578ccornelius 1.2, -1.2, 752859d709d503bab6e2b61931737e662dd293b40578ccornelius 0.0000000012344501, -0.0000000012344501, 752959d709d503bab6e2b61931737e662dd293b40578ccornelius 123445.01, -123445.01, 753059d709d503bab6e2b61931737e662dd293b40578ccornelius 12344501000000000000000000000000000.0, -12344501000000000000000000000000000.0, 753159d709d503bab6e2b61931737e662dd293b40578ccornelius }; 753259d709d503bab6e2b61931737e662dd293b40578ccornelius const char* expected[] = { 753359d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00", "0.00", 753459d709d503bab6e2b61931737e662dd293b40578ccornelius "0.100", "-0.100", 753559d709d503bab6e2b61931737e662dd293b40578ccornelius "123", "-123", 753659d709d503bab6e2b61931737e662dd293b40578ccornelius "12345", "-12345", 753759d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 753859d709d503bab6e2b61931737e662dd293b40578ccornelius "123.45", "-123.45", 753959d709d503bab6e2b61931737e662dd293b40578ccornelius "0.001234", "-0.001234", 754059d709d503bab6e2b61931737e662dd293b40578ccornelius "0.00000000123", "-0.00000000123", 754159d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000000000000000123", "-0.0000000000000000000123", 754259d709d503bab6e2b61931737e662dd293b40578ccornelius "1.20", "-1.20", 754359d709d503bab6e2b61931737e662dd293b40578ccornelius "0.0000000012345", "-0.0000000012345", 754459d709d503bab6e2b61931737e662dd293b40578ccornelius "123450", "-123450", 754559d709d503bab6e2b61931737e662dd293b40578ccornelius "12345000000000000000000000000000000", "-12345000000000000000000000000000000", 754659d709d503bab6e2b61931737e662dd293b40578ccornelius }; 754759d709d503bab6e2b61931737e662dd293b40578ccornelius 754859d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 754959d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 755059d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 755159d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 755259d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status,"NumberFormat::createInstance") 755359d709d503bab6e2b61931737e662dd293b40578ccornelius 755459d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 755559d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 755659d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(5); 755759d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setGroupingUsed(false); 755859d709d503bab6e2b61931737e662dd293b40578ccornelius 755959d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 756059d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult; 75618de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (unsigned int i = 0; i < UPRV_LENGTHOF(input); ++i) { 756259d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(input[i], result); 756359d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString expectedResult(expected[i]); 756459d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != expectedResult) { 756559d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: '" + expectedResult + "' got '" + result); 756659d709d503bab6e2b61931737e662dd293b40578ccornelius } 756759d709d503bab6e2b61931737e662dd293b40578ccornelius result.remove(); 756859d709d503bab6e2b61931737e662dd293b40578ccornelius } 756959d709d503bab6e2b61931737e662dd293b40578ccornelius} 757059d709d503bab6e2b61931737e662dd293b40578ccornelius 757159d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestShowZero() { 757259d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 757359d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 757459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 757559d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 757659d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 757759d709d503bab6e2b61931737e662dd293b40578ccornelius 757859d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 757959d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(3); 758059d709d503bab6e2b61931737e662dd293b40578ccornelius 758159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString result; 758259d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->format(0.0, result); 758359d709d503bab6e2b61931737e662dd293b40578ccornelius if (result != "0") { 758459d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"Expected: 0, got " + result); 758559d709d503bab6e2b61931737e662dd293b40578ccornelius } 758659d709d503bab6e2b61931737e662dd293b40578ccornelius} 758759d709d503bab6e2b61931737e662dd293b40578ccornelius 758859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestBug9936() { 758959d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 759059d709d503bab6e2b61931737e662dd293b40578ccornelius Locale locale("en_US"); 759159d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> numberFormat(static_cast<DecimalFormat*>( 759259d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat::createInstance(locale, status))); 759359d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 759459d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("File %s, Line %d: status = %s.\n", __FILE__, __LINE__, u_errorName(status)); 759559d709d503bab6e2b61931737e662dd293b40578ccornelius return; 759659d709d503bab6e2b61931737e662dd293b40578ccornelius } 759759d709d503bab6e2b61931737e662dd293b40578ccornelius 759859d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 759959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 760059d709d503bab6e2b61931737e662dd293b40578ccornelius } 760159d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(TRUE); 760259d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 760359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 760459d709d503bab6e2b61931737e662dd293b40578ccornelius } 760559d709d503bab6e2b61931737e662dd293b40578ccornelius 760659d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 760759d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == TRUE) { 760859d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was TRUE, expected FALSE.\n", __FILE__, __LINE__); 760959d709d503bab6e2b61931737e662dd293b40578ccornelius } 761059d709d503bab6e2b61931737e662dd293b40578ccornelius 761159d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMinimumSignificantDigits(3); 761259d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 761359d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 761459d709d503bab6e2b61931737e662dd293b40578ccornelius } 761559d709d503bab6e2b61931737e662dd293b40578ccornelius 761659d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setSignificantDigitsUsed(FALSE); 761759d709d503bab6e2b61931737e662dd293b40578ccornelius numberFormat->setMaximumSignificantDigits(6); 761859d709d503bab6e2b61931737e662dd293b40578ccornelius if (numberFormat->areSignificantDigitsUsed() == FALSE) { 761959d709d503bab6e2b61931737e662dd293b40578ccornelius errln("File %s, Line %d: areSignificantDigitsUsed() was FALSE, expected TRUE.\n", __FILE__, __LINE__); 762059d709d503bab6e2b61931737e662dd293b40578ccornelius } 762159d709d503bab6e2b61931737e662dd293b40578ccornelius 762259d709d503bab6e2b61931737e662dd293b40578ccornelius} 762359d709d503bab6e2b61931737e662dd293b40578ccornelius 762459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithFaLocale() { 762559d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 762659d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("fa", status); 762759d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 762859d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 762959d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 763059d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 763159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u200e-0,5"); 763259d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 763359d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 763459d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 763559d709d503bab6e2b61931737e662dd293b40578ccornelius errln("Expected -0,5 to parse for Farsi."); 763659d709d503bab6e2b61931737e662dd293b40578ccornelius } 763759d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 763859d709d503bab6e2b61931737e662dd293b40578ccornelius} 763959d709d503bab6e2b61931737e662dd293b40578ccornelius 764059d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseNegativeWithAlternateMinusSign() { 764159d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 764259d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat *test = (DecimalFormat *) NumberFormat::createInstance("en", status); 764359d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK_DATA(status, "NumberFormat::createInstance") 764459d709d503bab6e2b61931737e662dd293b40578ccornelius test->setLenient(TRUE); 764559d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable af; 764659d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 764759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString value("\\u208B0.5"); 764859d709d503bab6e2b61931737e662dd293b40578ccornelius value = value.unescape(); 764959d709d503bab6e2b61931737e662dd293b40578ccornelius test->parse(value, af, ppos); 765059d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == 0) { 765159d709d503bab6e2b61931737e662dd293b40578ccornelius errln(UnicodeString("Expected ") + value + UnicodeString(" to parse.")); 765259d709d503bab6e2b61931737e662dd293b40578ccornelius } 765359d709d503bab6e2b61931737e662dd293b40578ccornelius delete test; 765459d709d503bab6e2b61931737e662dd293b40578ccornelius} 765559d709d503bab6e2b61931737e662dd293b40578ccornelius 765659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestCustomCurrencySignAndSeparator() { 765759d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 765859d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols custom(Locale::getUS(), status); 765959d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormatSymbols constructor"); 766059d709d503bab6e2b61931737e662dd293b40578ccornelius 766159d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kCurrencySymbol, "*"); 766259d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, "^"); 766359d709d503bab6e2b61931737e662dd293b40578ccornelius custom.setSymbol(DecimalFormatSymbols::kMonetarySeparatorSymbol, ":"); 766459d709d503bab6e2b61931737e662dd293b40578ccornelius 766559d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString pat(" #,##0.00"); 766659d709d503bab6e2b61931737e662dd293b40578ccornelius pat.insert(0, (UChar)0x00A4); 766759d709d503bab6e2b61931737e662dd293b40578ccornelius 766859d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat fmt(pat, custom, status); 766959d709d503bab6e2b61931737e662dd293b40578ccornelius CHECK(status, "DecimalFormat constructor"); 767059d709d503bab6e2b61931737e662dd293b40578ccornelius 767159d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numstr("* 1^234:56"); 767259d709d503bab6e2b61931737e662dd293b40578ccornelius expect2(fmt, (Formattable)((double)1234.56), numstr); 767359d709d503bab6e2b61931737e662dd293b40578ccornelius} 767459d709d503bab6e2b61931737e662dd293b40578ccornelius 767559d709d503bab6e2b61931737e662dd293b40578ccorneliustypedef struct { 767659d709d503bab6e2b61931737e662dd293b40578ccornelius const char * locale; 767759d709d503bab6e2b61931737e662dd293b40578ccornelius UBool lenient; 767859d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString numString; 767959d709d503bab6e2b61931737e662dd293b40578ccornelius double value; 768059d709d503bab6e2b61931737e662dd293b40578ccornelius} SignsAndMarksItem; 768159d709d503bab6e2b61931737e662dd293b40578ccornelius 768259d709d503bab6e2b61931737e662dd293b40578ccornelius 768359d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid NumberFormatTest::TestParseSignsAndMarks() { 768459d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem items[] = { 768559d709d503bab6e2b61931737e662dd293b40578ccornelius // locale lenient numString value 768659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("12"), 12 }, 768759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("12"), 12 }, 768859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("-23"), -23 }, 768959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("-23"), -23 }, 769059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("- 23"), -23 }, 769159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 769259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 769359d709d503bab6e2b61931737e662dd293b40578ccornelius { "en", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 769459d709d503bab6e2b61931737e662dd293b40578ccornelius 769559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 769659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 769759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 769859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 769959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 770059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 770159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 770259d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arab", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 770359d709d503bab6e2b61931737e662dd293b40578ccornelius 770459d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 770559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 770659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 770759d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 770859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 770959d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 771059d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 771159d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@numbers=arabext", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 771259d709d503bab6e2b61931737e662dd293b40578ccornelius 771359d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("12"), 12 }, 771459d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("12"), 12 }, 771559d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("-23"), -23 }, 771659d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("-23"), -23 }, 771759d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("- 23"), -23 }, 771859d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 771959d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 772059d709d503bab6e2b61931737e662dd293b40578ccornelius { "he", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 772159d709d503bab6e2b61931737e662dd293b40578ccornelius 772259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 772359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u0663\\u0664"), 34 }, 772459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 772559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("-\\u0664\\u0665"), -45 }, 772659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("- \\u0664\\u0665"), -45 }, 772759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", FALSE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 772859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F-\\u0664\\u0665"), -45 }, 772959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar", TRUE, CharsToUnicodeString("\\u200F- \\u0664\\u0665"), -45 }, 773059d709d503bab6e2b61931737e662dd293b40578ccornelius 773159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("12"), 12 }, 773259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("12"), 12 }, 773359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("-23"), -23 }, 773459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("-23"), -23 }, 773559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("- 23"), -23 }, 773659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", FALSE, CharsToUnicodeString("\\u200E-23"), -23 }, 773759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E-23"), -23 }, 773859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_MA", TRUE, CharsToUnicodeString("\\u200E- 23"), -23 }, 773959d709d503bab6e2b61931737e662dd293b40578ccornelius 774059d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 774159d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 774259d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 774359d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212\\u06F6\\u06F7"), -67 }, 774459d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u2212 \\u06F6\\u06F7"), -67 }, 774559d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", FALSE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 774659d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E\\u06F6\\u06F7"), -67 }, 774759d709d503bab6e2b61931737e662dd293b40578ccornelius { "fa", TRUE, CharsToUnicodeString("\\u200E\\u2212\\u200E \\u06F6\\u06F7"), -67 }, 774859d709d503bab6e2b61931737e662dd293b40578ccornelius 774959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 775059d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u06F5\\u06F6"), 56 }, 775159d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 775259d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u06F6\\u06F7"), -67 }, 775359d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("- \\u06F6\\u06F7"), -67 }, 775459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 775559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E\\u06F6\\u06F7"), -67 }, 775659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("\\u200E-\\u200E \\u06F6\\u06F7"), -67 }, 775759d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", FALSE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 775859d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E\\u06F6\\u06F7"), -67 }, 775959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps", TRUE, CharsToUnicodeString("-\\u200E \\u06F6\\u06F7"), -67 }, 776059d709d503bab6e2b61931737e662dd293b40578ccornelius // terminator 776159d709d503bab6e2b61931737e662dd293b40578ccornelius { NULL, 0, UnicodeString(""), 0 }, 776259d709d503bab6e2b61931737e662dd293b40578ccornelius }; 776359d709d503bab6e2b61931737e662dd293b40578ccornelius 776459d709d503bab6e2b61931737e662dd293b40578ccornelius const SignsAndMarksItem * itemPtr; 776559d709d503bab6e2b61931737e662dd293b40578ccornelius for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) { 776659d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 776759d709d503bab6e2b61931737e662dd293b40578ccornelius NumberFormat *numfmt = NumberFormat::createInstance(Locale(itemPtr->locale), status); 776859d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_SUCCESS(status)) { 776959d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->setLenient(itemPtr->lenient); 777059d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fmtobj; 777159d709d503bab6e2b61931737e662dd293b40578ccornelius ParsePosition ppos; 777259d709d503bab6e2b61931737e662dd293b40578ccornelius numfmt->parse(itemPtr->numString, fmtobj, ppos); 777359d709d503bab6e2b61931737e662dd293b40578ccornelius if (ppos.getIndex() == itemPtr->numString.length()) { 777459d709d503bab6e2b61931737e662dd293b40578ccornelius double parsedValue = fmtobj.getDouble(status); 777559d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status) || parsedValue != itemPtr->value) { 777659d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives value " + parsedValue); 777759d709d503bab6e2b61931737e662dd293b40578ccornelius } 777859d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 777959d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"FAIL: locale " + itemPtr->locale + ", lenient " + itemPtr->lenient + ", parse of \"" + itemPtr->numString + "\" gives position " + ppos.getIndex()); 778059d709d503bab6e2b61931737e662dd293b40578ccornelius } 778159d709d503bab6e2b61931737e662dd293b40578ccornelius } else { 778259d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("FAIL: NumberFormat::createInstance for locale % gives error %s", itemPtr->locale, u_errorName(status)); 778359d709d503bab6e2b61931737e662dd293b40578ccornelius } 778459d709d503bab6e2b61931737e662dd293b40578ccornelius delete numfmt; 778559d709d503bab6e2b61931737e662dd293b40578ccornelius } 778659d709d503bab6e2b61931737e662dd293b40578ccornelius} 778759d709d503bab6e2b61931737e662dd293b40578ccornelius 7788fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 7789fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode mode; 7790fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double value; 7791fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString expected; 7792fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} Test10419Data; 7793fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7794fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7795fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// Tests that rounding works right when fractional digits is set to 0. 7796fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10419RoundingWith0FractionDigits() { 7797fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const Test10419Data items[] = { 7798fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundCeiling, 1.488, "2"}, 7799fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundDown, 1.588, "1"}, 7800fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundFloor, 1.888, "1"}, 7801fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfDown, 1.5, "1"}, 7802fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfEven, 2.5, "2"}, 7803fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundHalfUp, 2.5, "3"}, 7804fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { DecimalFormat::kRoundUp, 1.5, "2"}, 7805fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius }; 7806fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7807fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<DecimalFormat> decfmt((DecimalFormat *) NumberFormat::createInstance(Locale("en_US"), status)); 7808fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7809fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Failure creating DecimalFormat %s", u_errorName(status)); 7810fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7811fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 78128de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert for (int32_t i = 0; i < UPRV_LENGTHOF(items); ++i) { 7813fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setRoundingMode(items[i].mode); 7814fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius decfmt->setMaximumFractionDigits(0); 7815fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 7816fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (items[i].expected != decfmt->format(items[i].value, actual)) { 7817fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Expected " + items[i].expected + ", got " + actual); 7818fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7819fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7820fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7821fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7822fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::Test10468ApplyPattern() { 7823fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt is now 'a' 7824fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7825fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("'I''ll'*a###.##", status); 7826fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7827fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7828fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7829fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7830fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7831fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7832fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (fmt.getPadCharacterString() != UnicodeString("a")) { 7833fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Padding character should be 'a'."); 7834fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7835fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7836fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7837fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Padding char of fmt ought to be '*' since that is the default and no 7838fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // explicit padding char is specified in the new pattern. 7839fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.applyPattern("AA#,##0.00ZZ", status); 7840fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7841fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Oops this still prints 'a' even though we changed the pattern. 7842c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (fmt.getPadCharacterString() != UnicodeString(" ")) { 7843fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("applyPattern did not clear padding character."); 7844fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7845fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 7846fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7847fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestRoundingScientific10542() { 7848fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 7849fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat format("0.00E0", status); 7850fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 7851fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errcheckln(status, "DecimalFormat constructor failed - %s", u_errorName(status)); 7852fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 7853fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7854fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7855fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::ERoundingMode roundingModes[] = { 7856fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundCeiling, 7857fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundDown, 7858fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundFloor, 7859fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfDown, 7860fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfEven, 7861fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundHalfUp, 7862fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat::kRoundUp}; 7863fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *descriptions[] = { 7864fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Ceiling", 7865fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Down", 7866fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round Floor", 7867fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half down", 7868fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half even", 7869fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round half up", 7870fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "Round up"}; 7871fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7872fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7873fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-0.003006, -0.003005, -0.003004, 0.003014, 0.003015, 0.003016}; 7874fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7875fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7876fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.02E-3", "3.02E-3", "3.02E-3", 7877fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7878fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.01E-3", "3.01E-3", "3.01E-3", 7879fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.01E-3", "3.02E-3", 7880fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.00E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7881fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.00E-3", "3.01E-3", "3.02E-3", "3.02E-3", 7882fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E-3", "-3.01E-3", "-3.01E-3", "3.02E-3", "3.02E-3", "3.02E-3"}; 7883fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7884fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7885fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7886fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7887fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7888fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 78898de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 78908de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7891fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7892fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7893fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-3006.0, -3005, -3004, 3014, 3015, 3016}; 7894fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7895fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7896fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.02E3", "3.02E3", "3.02E3", 7897fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.00E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.01E3", 7898fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.01E3", "3.01E3", "3.01E3", 7899fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.01E3", "3.02E3", 7900fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.00E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7901fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.00E3", "3.01E3", "3.02E3", "3.02E3", 7902fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-3.01E3", "-3.01E3", "-3.01E3", "3.02E3", "3.02E3", "3.02E3"}; 7903fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7904fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7905fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7906fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7907fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7908fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 79098de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 79108de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7911fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7912fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* Commented out for now until we decide how rounding to zero should work, +0 vs. -0 7913fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7914fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {0.0, -0.0}; 7915fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7916fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7917fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7918fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7919fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7920fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7921fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7922fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0", 7923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "0.00E0", "-0.00E0"}; 7924fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7925fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7926fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7927fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7928fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7929fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 79308de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 79318de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7932fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7933fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius*/ 7934fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7935fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 7936fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e25, 1e25 + 1e15, 1e25 - 1e15}; 7937fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7938fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7939fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25", 7940fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7941fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "9.99E24", 7942fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7943fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7944fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.00E25", "1.00E25", 7945fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E25", "1.01E25", "1.00E25"}; 7946fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7947fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7948fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7949fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7950fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7951fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 79528de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 79538de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7954fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7955fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7956fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e25, -1e25 + 1e15, -1e25 - 1e15}; 7957fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7958fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7959fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7960fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-9.99E24", "-1.00E25", 7961fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25", 7962fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7963fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7964fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.00E25", 7965fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E25", "-1.00E25", "-1.01E25"}; 7966fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7967fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7968fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7969fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7970fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7971fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 79728de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 79738de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7974fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7975fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7976fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {1e-25, 1e-25 + 1e-35, 1e-25 - 1e-35}; 7977fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7978fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7979fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25", 7980fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7981fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "9.99E-26", 7982fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7983fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7984fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.00E-25", "1.00E-25", 7985fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "1.00E-25", "1.01E-25", "1.00E-25"}; 7986fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 7987fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 7988fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 7989fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 7990fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 7991fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 79928de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 79938de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 7994fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 7995fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 7996fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius double values[] = {-1e-25, -1e-25 + 1e-35, -1e-25 - 1e-35}; 7997fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // The order of these expected values correspond to the order of roundingModes and the order of values. 7998fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char *expected[] = { 7999fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 8000fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-9.99E-26", "-1.00E-25", 8001fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25", 8002fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 8003fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 8004fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.00E-25", 8005fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "-1.00E-25", "-1.00E-25", "-1.01E-25"}; 8006fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius verifyRounding( 8007fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format, 8008fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values, 8009fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expected, 8010fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius roundingModes, 8011fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions, 80128de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(values), 80138de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UPRV_LENGTHOF(roundingModes)); 8014fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8015fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 8016fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8017fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestZeroScientific10547() { 8018fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 8019fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat fmt("0.00E0", status); 8020fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (!assertSuccess("Formt creation", status)) { 8021fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 8022fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8023fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString out; 8024fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.format(-0.0, out); 8025fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("format", "-0.00E0", out); 8026fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 8027fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8028fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::verifyRounding( 8029fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat& format, 8030fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const double *values, 8031fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *expected, 8032fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const DecimalFormat::ERoundingMode *roundingModes, 8033fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * const *descriptions, 8034fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t valueSize, 8035fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t roundingModeSize) { 8036fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t i = 0; i < roundingModeSize; ++i) { 8037fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.setRoundingMode(roundingModes[i]); 8038fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (int32_t j = 0; j < valueSize; j++) { 8039fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString currentExpected(expected[i * valueSize + j]); 8040fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius currentExpected = currentExpected.unescape(); 8041fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString actual; 8042fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius format.format(values[j], actual); 8043fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (currentExpected != actual) { 8044fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char buffer[256]; 8045fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sprintf( 8046fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius buffer, 8047fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius "For %s value %f, expected ", 8048fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius descriptions[i], 8049fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius values[j]); 8050fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln(UnicodeString(buffer) + currentExpected + ", got " + actual); 8051fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8052fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8053fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8054fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 8055fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8056fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestAccountingCurrency() { 8057fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 8058fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UNumberFormatStyle style = UNUM_CURRENCY_ACCOUNTING; 8059fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8060fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 806164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)1234.5, "$1,234.50", TRUE, status); 8062fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 806364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)-1234.5, "($1,234.50)", TRUE, status); 8064fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 806564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)0, "$0.00", TRUE, status); 8066fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("en_US", style, status), 806764339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)-0.2, "($0.20)", TRUE, status); 8068fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 806964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)10000, UnicodeString("\\uFFE510,000").unescape(), TRUE, status); 8070fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("ja_JP", style, status), 807164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)-1000.5, UnicodeString("(\\uFFE51,000)").unescape(), FALSE, status); 8072fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius expect(NumberFormat::createInstance("de_DE", style, status), 807364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert (Formattable)(double)-23456.7, UnicodeString("-23.456,70\\u00A0\\u20AC").unescape(), TRUE, status); 8074fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 8075fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8076fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// for #5186 8077fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid NumberFormatTest::TestEquality() { 8078fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 8079fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormatSymbols* symbols = new DecimalFormatSymbols(Locale("root"), status); 8080fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 8081fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormatSymbols for root"); 8082fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 8083fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8084fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString pattern("#,##0.###"); 8085fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtBase = new DecimalFormat(pattern, symbols, status); 8086fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 8087fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Fail: can't create DecimalFormat using root symbols"); 8088fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 8089fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8090fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8091fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius DecimalFormat* fmtClone = (DecimalFormat*)fmtBase->clone(); 8092fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmtClone->setFormatWidth(fmtBase->getFormatWidth() + 32); 8093fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (*fmtClone == *fmtBase) { 8094fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius errln("Error: DecimalFormat == does not distinguish objects that differ only in FormatWidth"); 8095fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 8096fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtClone; 8097fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8098fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete fmtBase; 8099fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 8100fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8101f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusvoid NumberFormatTest::TestCurrencyUsage() { 8102f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius double agent = 123.567; 8103f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8104f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UErrorCode status; 8105f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius DecimalFormat *fmt; 8106f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8107f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Digits 8108f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Note that as of CLDR 26: 8109f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // * TWD switches from 0 decimals to 2; PKR still has 0, so change test to that 81108de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert // * CAD rounds to .05 in cash mode only 8111f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 8112f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_PKR("en_US@currency=PKR"); 8113f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8114f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 8115f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 8116f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 8117f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CURRENCY, status); 8118f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CURRENCY", status, TRUE) == FALSE) { 8119f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8120f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8121f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8122f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original; 8123f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,original); 8124f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 1", UnicodeString("PKR124"), original); 8125f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8126f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // test the getter here 8127f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 812864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert assertEquals("Test usage getter - standard", (int32_t)curUsage, (int32_t)UCURR_USAGE_STANDARD); 8129f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8130f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 8131f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 8132f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_PKR, UNUM_CASH_CURRENCY, status); 8133f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=PKR/CASH", status, TRUE) == FALSE) { 8134f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8135f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8136f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8137f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8138f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // must be usage = cash 8139f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UCurrencyUsage curUsage = fmt->getCurrencyUsage(); 814064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert assertEquals("Test usage getter - cash", (int32_t)curUsage, (int32_t)UCURR_USAGE_CASH); 8141f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8142f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_currency; 8143f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent,cash_currency); 8144f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 2", UnicodeString("PKR124"), cash_currency); 8145f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 8146f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8147f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8148f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // compare the Currency and Currency Cash Rounding 8149f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 8150f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius Locale enUS_CAD("en_US@currency=CAD"); 8151f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 8152f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 8153f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 8154f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 8155f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 8156f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8157f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8158f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8159f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString original_rounding; 8160f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, original_rounding); 8161f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 3", UnicodeString("CA$123.57"), original_rounding); 8162f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 8163f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 8164f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 8165f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 8166f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8167f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8168f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8169f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8170f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cash_rounding_currency; 8171f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cash_rounding_currency); 81728de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert assertEquals("Test Currency Usage 4", UnicodeString("CA$123.55"), cash_rounding_currency); 8173f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 8174f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8175f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8176f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // Test the currency change 8177f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius // 1st time for getter/setter, 2nd time for factory method 8178f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius const UChar CUR_PKR[] = {0x50, 0x4B, 0x52, 0}; 8179f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius for(int i=0; i<2; i++){ 8180f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius status = U_ZERO_ERROR; 8181f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if(i == 0){ 8182f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CURRENCY, status); 8183f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CURRENCY", status, TRUE) == FALSE) { 8184f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8185f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8186f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrencyUsage(UCURR_USAGE_CASH, &status); 8187f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius }else{ 8188f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt = (DecimalFormat *) NumberFormat::createInstance(enUS_CAD, UNUM_CASH_CURRENCY, status); 8189f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius if (assertSuccess("en_US@currency=CAD/CASH", status, TRUE) == FALSE) { 8190f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius continue; 8191f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8192f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8193f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8194f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString cur_original; 81958de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert fmt->setCurrencyUsage(UCURR_USAGE_STANDARD, &status); 8196f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, cur_original); 8197f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 5", UnicodeString("CA$123.57"), cur_original); 8198f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8199f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->setCurrency(CUR_PKR, status); 8200f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertSuccess("Set currency to PKR", status); 8201f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius 8202f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius UnicodeString PKR_changed; 8203f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius fmt->format(agent, PKR_changed); 8204f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius assertEquals("Test Currency Usage 6", UnicodeString("PKR124"), PKR_changed); 8205f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius delete fmt; 8206f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius } 8207f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius} 82081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 8209c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestNumberFormatTestTuple() { 8210c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple tuple; 8211c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8212c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8213c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.setField( 8214c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple::getFieldByName("locale"), 8215c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "en", 8216c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 8217c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.setField( 8218c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple::getFieldByName("pattern"), 8219c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "#,##0.00", 8220c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 8221c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.setField( 8222c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple::getFieldByName("minIntegerDigits"), 8223c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "-10", 8224c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 8225c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8226c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8227c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8228c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8229c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // only what we set should be set. 8230c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "en", tuple.locale.getName()); 8231c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "#,##0.00", tuple.pattern); 8232c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", -10, tuple.minIntegerDigits); 8233c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", tuple.localeFlag); 8234c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", tuple.patternFlag); 8235c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", tuple.minIntegerDigitsFlag); 8236c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertFalse("", tuple.formatFlag); 8237c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8238c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 8239c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals( 8240c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "", 8241c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "{locale: en, pattern: #,##0.00, minIntegerDigits: -10}", 8242c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.toString(appendTo)); 8243c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8244c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.clear(); 8245c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendTo.remove(); 8246c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals( 8247c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "", 8248c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "{}", 8249c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.toString(appendTo)); 8250c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.setField( 8251c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple::getFieldByName("aBadFieldName"), 8252c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "someValue", 8253c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 8254c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (status != U_ILLEGAL_ARGUMENT_ERROR) { 8255c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Expected U_ILLEGAL_ARGUMENT_ERROR"); 8256c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8257c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status = U_ZERO_ERROR; 8258c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tuple.setField( 8259c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestTuple::getFieldByName("minIntegerDigits"), 8260c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "someBadValue", 8261c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert status); 8262c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (status != U_ILLEGAL_ARGUMENT_ERROR) { 8263c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Expected U_ILLEGAL_ARGUMENT_ERROR"); 8264c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8265c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8266c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8267c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid 8268c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik RoubertNumberFormatTest::TestDataDriven() { 8269c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTestDataDriven dd; 8270c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dd.setCaller(this); 8271c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dd.run("numberformattestspecification.txt", FALSE); 8272c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8273c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 82741b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 82751b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Check the constant MAX_INT64_IN_DOUBLE. 82761b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// The value should convert to a double with no loss of precision. 82771b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// A failure may indicate a platform with a different double format, requiring 82781b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// a revision to the constant. 82791b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// 82801b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// Note that this is actually hard to test, because the language standard gives 82811b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// compilers considerable flexibility to do unexpected things with rounding and 82821b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// with overflow in simple int to/from float conversions. Some compilers will completely optimize 82831b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert// away a simple round-trip conversion from int64_t -> double -> int64_t. 82841b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 82851b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestDoubleLimit11439() { 82861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert char buf[50]; 82871b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int64_t num = MAX_INT64_IN_DOUBLE-10; num<=MAX_INT64_IN_DOUBLE; num++) { 82881b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sprintf(buf, "%lld", (long long)num); 82891b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert double fNum = 0.0; 82901b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sscanf(buf, "%lf", &fNum); 82911b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int64_t rtNum = fNum; 82921b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (num != rtNum) { 82931b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum); 82941b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 82951b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 82961b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 82971b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert for (int64_t num = -MAX_INT64_IN_DOUBLE+10; num>=-MAX_INT64_IN_DOUBLE; num--) { 82981b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sprintf(buf, "%lld", (long long)num); 82991b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert double fNum = 0.0; 83001b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert sscanf(buf, "%lf", &fNum); 83011b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert int64_t rtNum = fNum; 83021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (num != rtNum) { 83031b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert errln("%s:%d MAX_INT64_IN_DOUBLE test, %lld did not round trip. Got %lld", __FILE__, __LINE__, (long long)num, (long long)rtNum); 83041b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 83051b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 83061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 83071b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 83081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 83091b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubertvoid NumberFormatTest::TestFastPathConsistent11524() { 83101b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UErrorCode status = U_ZERO_ERROR; 83111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert NumberFormat *fmt = NumberFormat::createInstance("en", status); 83121b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert if (U_FAILURE(status) || fmt == NULL) { 83131b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert dataerrln("Failed call to NumberFormat::createInstance() - %s", u_errorName(status)); 83141b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert return; 83151b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert } 83161b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert fmt->setMaximumIntegerDigits(INT32_MIN); 83171b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert UnicodeString appendTo; 831864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert assertEquals("", "0", fmt->format((int32_t)123, appendTo)); 83191b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert appendTo.remove(); 832064339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert assertEquals("", "0", fmt->format((int32_t)12345, appendTo)); 83211b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert delete fmt; 83221b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert} 83231b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 8324c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestGetAffixes() { 8325c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8326c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols sym("en_US", status); 8327c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString pattern("\\u00a4\\u00a4\\u00a4 0.00 %\\u00a4\\u00a4"); 8328c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert pattern = pattern.unescape(); 8329c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt(pattern, sym, status); 8330c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 8331c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 8332c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8333c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8334c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString affixStr; 8335c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "US dollars ", fmt.getPositivePrefix(affixStr)); 8336c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " %USD", fmt.getPositiveSuffix(affixStr)); 8337c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "-US dollars ", fmt.getNegativePrefix(affixStr)); 8338c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " %USD", fmt.getNegativeSuffix(affixStr)); 8339c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8340c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // Test equality with affixes. set affix methods can't capture special 8341c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // characters which is why equality should fail. 8342c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8343c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmtCopy(fmt); 8344c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt == fmtCopy); 8345c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString someAffix; 8346c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtCopy.setPositivePrefix(fmtCopy.getPositivePrefix(someAffix)); 8347c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt != fmtCopy); 8348c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8349c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8350c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmtCopy(fmt); 8351c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt == fmtCopy); 8352c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString someAffix; 8353c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtCopy.setPositiveSuffix(fmtCopy.getPositiveSuffix(someAffix)); 8354c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt != fmtCopy); 8355c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8356c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8357c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmtCopy(fmt); 8358c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt == fmtCopy); 8359c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString someAffix; 8360c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtCopy.setNegativePrefix(fmtCopy.getNegativePrefix(someAffix)); 8361c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt != fmtCopy); 8362c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8363c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8364c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmtCopy(fmt); 8365c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt == fmtCopy); 8366c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString someAffix; 8367c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmtCopy.setNegativeSuffix(fmtCopy.getNegativeSuffix(someAffix)); 8368c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertTrue("", fmt != fmtCopy); 8369c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8370c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPositivePrefix("Don't"); 8371c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setPositiveSuffix("do"); 8372c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString someAffix("be''eet\\u00a4\\u00a4\\u00a4 it."); 8373c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert someAffix = someAffix.unescape(); 8374c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setNegativePrefix(someAffix); 8375c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setNegativeSuffix("%"); 8376c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "Don't", fmt.getPositivePrefix(affixStr)); 8377c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "do", fmt.getPositiveSuffix(affixStr)); 8378c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", someAffix, fmt.getNegativePrefix(affixStr)); 8379c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "%", fmt.getNegativeSuffix(affixStr)); 8380c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8381c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8382c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestToPatternScientific11648() { 8383c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8384c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale en("en"); 8385c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols sym(en, status); 8386c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt("0.00", sym, status); 8387c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 8388c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 8389c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8390c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8391c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setScientificNotation(TRUE); 8392c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString pattern; 8393c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "0.00E0", fmt.toPattern(pattern)); 8394c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt2(pattern, sym, status); 8395c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertSuccess("", status); 8396c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8397c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8398c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestBenchmark() { 8399c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert/* 8400c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8401c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale en("en"); 8402c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols sym(en, status); 8403c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt("0.0000000", new DecimalFormatSymbols(sym), status); 8404c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// DecimalFormat fmt("0.00000E0", new DecimalFormatSymbols(sym), status); 8405c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// DecimalFormat fmt("0", new DecimalFormatSymbols(sym), status); 840664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition fpos(FieldPosition::DONT_CARE); 8407c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert clock_t start = clock(); 8408c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert for (int32_t i = 0; i < 1000000; ++i) { 8409c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString append; 8410c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(3.0, append, fpos, status); 8411c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// fmt.format(4.6692016, append, fpos, status); 8412c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// fmt.format(1234567.8901, append, fpos, status); 8413c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// fmt.format(2.99792458E8, append, fpos, status); 8414c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert// fmt.format(31, append); 8415c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8416c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Took %f", (double) (clock() - start) / CLOCKS_PER_SEC); 8417c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertSuccess("", status); 8418c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8419c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8420c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert MessageFormat fmt("{0, plural, one {I have # friend.} other {I have # friends.}}", status); 842164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition fpos(FieldPosition::DONT_CARE); 8422c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Formattable one(1.0); 8423c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Formattable three(3.0); 8424c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert clock_t start = clock(); 8425c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert for (int32_t i = 0; i < 500000; ++i) { 8426c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString append; 8427c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(&one, 1, append, fpos, status); 8428c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString append2; 8429c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(&three, 1, append2, fpos, status); 8430c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8431c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Took %f", (double) (clock() - start) / CLOCKS_PER_SEC); 8432c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertSuccess("", status); 8433c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8434c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8435c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale en("en"); 8436c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Measure measureC(23, MeasureUnit::createCelsius(status), status); 8437c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert MeasureFormat fmt(en, UMEASFMT_WIDTH_WIDE, status); 843864339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition fpos(FieldPosition::DONT_CARE); 8439c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert clock_t start = clock(); 8440c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert for (int32_t i = 0; i < 1000000; ++i) { 8441c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 8442c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.formatMeasures( 8443c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert &measureC, 1, appendTo, fpos, status); 8444c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8445c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Took %f", (double) (clock() - start) / CLOCKS_PER_SEC); 8446c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertSuccess("", status); 8447c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert*/ 8448c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8449c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8450c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestFractionalDigitsForCurrency() { 8451c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8452c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<NumberFormat> fmt(NumberFormat::createCurrencyInstance("en", status)); 8453c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 8454c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating NumberFormat - %s", u_errorName(status)); 8455c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8456c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8457c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UChar JPY[] = {0x4A, 0x50, 0x59, 0x0}; 8458c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->setCurrency(JPY, status); 8459c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8460c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8461c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8462c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", 0, fmt->getMaximumFractionDigits()); 8463c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8464c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8465c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8466c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestFormatCurrencyPlural() { 8467c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8468c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale locale = Locale::createCanonical("en_US"); 8469c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormat *fmt = NumberFormat::createInstance(locale, UNUM_CURRENCY_PLURAL, status); 8470c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 8471c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating NumberFormat - %s", u_errorName(status)); 8472c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8473c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8474c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString formattedNum; 8475c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->format(11234.567, formattedNum, NULL, status); 8476c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "11,234.57 US dollars", formattedNum); 8477c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert delete fmt; 8478c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8479c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8480c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::TestCtorApplyPatternDifference() { 8481c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8482c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols sym("en_US", status); 8483c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString pattern("\\u00a40"); 8484c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt(pattern.unescape(), sym, status); 8485c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (U_FAILURE(status)) { 8486c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dataerrln("Error creating DecimalFormat - %s", u_errorName(status)); 8487c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8488c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8489c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8490c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals( 8491c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "ctor favors precision of currency", 8492c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "$5.00", 849364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert fmt.format((double)5, result)); 8494c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert result.remove(); 8495c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.applyPattern(pattern.unescape(), status); 8496c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals( 8497c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "applyPattern favors precision of pattern", 8498c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert "$5", 849964339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert fmt.format((double)5, result)); 8500c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8501c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8502c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test11868() { 8503c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert double posAmt = 34.567; 8504c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert double negAmt = -9876.543; 8505c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8506c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert Locale selectedLocale("en_US"); 8507c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8508c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8509c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8510c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition fpCurr(UNUM_CURRENCY_FIELD); 8511c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<NumberFormat> fmt( 8512c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormat::createInstance( 8513c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert selectedLocale, UNUM_CURRENCY_PLURAL, status)); 8514c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("Format creation", status)) { 8515c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8516c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8517c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->format(posAmt, result, fpCurr, status); 8518c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "34.57 US dollars", result); 8519c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("begin index", 6, fpCurr.getBeginIndex()); 8520c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("end index", 16, fpCurr.getEndIndex()); 8521c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8522c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // Test field position iterator 8523c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8524c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes attributes[] = { 8525c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_INTEGER_FIELD, 0, 2}, 8526c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3}, 8527c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_FRACTION_FIELD, 3, 5}, 8528c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_CURRENCY_FIELD, 6, 16}, 8529c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {0, -1, 0}}; 8530c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8531c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPositionIterator iter; 8532c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->format(posAmt, result, &iter, status); 8533c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "34.57 US dollars", result); 8534c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert verifyFieldPositionIterator(attributes, iter); 8535c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8536c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8537c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert result.remove(); 8538c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->format(negAmt, result, fpCurr, status); 8539c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "-9,876.54 US dollars", result); 8540c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("begin index", 10, fpCurr.getBeginIndex()); 8541c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("end index", 20, fpCurr.getEndIndex()); 8542c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8543c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // Test field position iterator 8544c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8545c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes attributes[] = { 8546c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 0, 1}, 8547c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_GROUPING_SEPARATOR_FIELD, 2, 3}, 8548c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_INTEGER_FIELD, 1, 6}, 8549c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_DECIMAL_SEPARATOR_FIELD, 6, 7}, 8550c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_FRACTION_FIELD, 7, 9}, 8551c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_CURRENCY_FIELD, 10, 20}, 8552c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {0, -1, 0}}; 8553c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8554c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPositionIterator iter; 8555c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt->format(negAmt, result, &iter, status); 8556c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "-9,876.54 US dollars", result); 8557c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert verifyFieldPositionIterator(attributes, iter); 8558c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8559c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8560c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8561c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test10727_RoundingZero() { 8562c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DigitList d; 8563c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert d.set(-0.0); 8564c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertFalse("", d.isPositive()); 8565c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert d.round(3); 8566c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertFalse("", d.isPositive()); 8567c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8568c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8569c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test11376_getAndSetPositivePrefix() { 8570c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8571c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UChar USD[] = {0x55, 0x53, 0x44, 0x0}; 8572c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8573c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<NumberFormat> fmt( 8574c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormat::createCurrencyInstance("en", status)); 8575c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8576c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8577c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8578c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat *dfmt = (DecimalFormat *) fmt.getAlias(); 8579c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dfmt->setCurrency(USD); 8580c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8581c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8582c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // This line should be a no-op. I am setting the positive prefix 8583c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // to be the same thing it was before. 8584c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dfmt->setPositivePrefix(dfmt->getPositivePrefix(result)); 8585c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8586c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 8587c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "$3.78", dfmt->format(3.78, appendTo, status)); 8588c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertSuccess("", status); 8589c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8590c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8591c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert const UChar USD[] = {0x55, 0x53, 0x44, 0x0}; 8592c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8593c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert LocalPointer<NumberFormat> fmt( 8594c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormat::createInstance("en", UNUM_CURRENCY_PLURAL, status)); 8595c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8596c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8597c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8598c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat *dfmt = (DecimalFormat *) fmt.getAlias(); 8599c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8600c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString tripleIntlCurrency(" \\u00a4\\u00a4\\u00a4"); 8601c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert tripleIntlCurrency = tripleIntlCurrency.unescape(); 8602c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", tripleIntlCurrency, dfmt->getPositiveSuffix(result)); 8603c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dfmt->setCurrency(USD); 8604c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8605c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // getPositiveSuffix() always returns the suffix for the 8606c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert // "other" plural category 8607c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " US dollars", dfmt->getPositiveSuffix(result)); 8608c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 8609c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "3.78 US dollars", dfmt->format(3.78, appendTo, status)); 8610c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " US dollars", dfmt->getPositiveSuffix(result)); 8611c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert dfmt->setPositiveSuffix("booya"); 8612c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendTo.remove(); 8613c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "3.78booya", dfmt->format(3.78, appendTo, status)); 8614c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "booya", dfmt->getPositiveSuffix(result)); 8615c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8616c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8617c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8618c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test11475_signRecognition() { 8619c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8620c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols sym("en", status); 8621c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8622c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8623c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt("+0.00", sym, status); 8624c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8625c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8626c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8627c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes attributes[] = { 8628c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 0, 1}, 8629c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_INTEGER_FIELD, 1, 2}, 8630c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_DECIMAL_SEPARATOR_FIELD, 2, 3}, 8631c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_FRACTION_FIELD, 3, 5}, 8632c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {0, -1, 0}}; 8633c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8634c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPositionIterator iter; 8635c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(2.3, result, &iter, status); 8636c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "+2.30", result); 8637c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert verifyFieldPositionIterator(attributes, iter); 8638c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8639c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8640c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt("++0.00+;-(#)--", sym, status); 8641c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8642c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8643c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8644c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8645c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes attributes[] = { 8646c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 0, 2}, 8647c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_INTEGER_FIELD, 2, 3}, 8648c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_DECIMAL_SEPARATOR_FIELD, 3, 4}, 8649c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_FRACTION_FIELD, 4, 6}, 8650c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 6, 7}, 8651c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {0, -1, 0}}; 8652c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8653c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPositionIterator iter; 8654c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(2.3, result, &iter, status); 8655c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "++2.30+", result); 8656c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert verifyFieldPositionIterator(attributes, iter); 8657c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8658c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert { 8659c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes attributes[] = { 8660c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 0, 1}, 8661c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_INTEGER_FIELD, 2, 3}, 8662c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_DECIMAL_SEPARATOR_FIELD, 3, 4}, 8663c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_FRACTION_FIELD, 4, 6}, 8664c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {UNUM_SIGN_FIELD, 7, 9}, 8665c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert {0, -1, 0}}; 8666c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString result; 8667c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPositionIterator iter; 8668c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.format(-2.3, result, &iter, status); 8669c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "-(2.30)--", result); 8670c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert verifyFieldPositionIterator(attributes, iter); 8671c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8672c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8673c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8674c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8675c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test11640_getAffixes() { 8676c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8677c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormatSymbols symbols("en_US", status); 8678c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8679c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8680c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8681c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString pattern("\\u00a4\\u00a4\\u00a4 0.00 %\\u00a4\\u00a4"); 8682c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert pattern = pattern.unescape(); 8683c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt(pattern, symbols, status); 8684c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8685c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8686c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8687c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString affixStr; 8688c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "US dollars ", fmt.getPositivePrefix(affixStr)); 8689c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " %USD", fmt.getPositiveSuffix(affixStr)); 8690c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "-US dollars ", fmt.getNegativePrefix(affixStr)); 8691c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", " %USD", fmt.getNegativeSuffix(affixStr)); 8692c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8693c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8694c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::Test11649_toPatternWithMultiCurrency() { 8695c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString pattern("\\u00a4\\u00a4\\u00a4 0.00"); 8696c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert pattern = pattern.unescape(); 8697c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UErrorCode status = U_ZERO_ERROR; 8698c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt(pattern, status); 8699c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8700c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8701c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8702c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert static UChar USD[] = {0x55, 0x53, 0x44, 0x0}; 8703c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.setCurrency(USD); 8704c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString appendTo; 8705c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8706c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "US dollars 12.34", fmt.format(12.34, appendTo)); 8707c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8708c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert UnicodeString topattern; 8709c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt.toPattern(topattern); 8710c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert DecimalFormat fmt2(topattern, status); 8711c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (!assertSuccess("", status)) { 8712c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8713c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8714c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert fmt2.setCurrency(USD); 8715c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8716c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert appendTo.remove(); 8717c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("", "US dollars 12.34", fmt2.format(12.34, appendTo)); 8718c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8719c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8720c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 8721c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubertvoid NumberFormatTest::verifyFieldPositionIterator( 8722c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert NumberFormatTest_Attributes *expected, FieldPositionIterator &iter) { 8723c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert int32_t idx = 0; 8724c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert FieldPosition fp; 8725c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert while (iter.next(fp)) { 8726c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (expected[idx].spos == -1) { 8727c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Iterator should have ended. got %d", fp.getField()); 8728c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert return; 8729c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8730c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("id", expected[idx].id, fp.getField()); 8731c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("start", expected[idx].spos, fp.getBeginIndex()); 8732c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert assertEquals("end", expected[idx].epos, fp.getEndIndex()); 8733c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert ++idx; 8734c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8735c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert if (expected[idx].spos != -1) { 8736c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert errln("Premature end of iterator. expected %d", expected[idx].id); 8737c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert } 8738c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert} 8739c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 87408de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubertvoid NumberFormatTest::checkExceptionIssue11735() { 87418de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert UErrorCode status; 87428de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert Locale enLocale("en"); 87438de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert DecimalFormatSymbols symbols(enLocale, status); 87448de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 87458de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert if (U_FAILURE(status)) { 87468de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert errln((UnicodeString) 87478de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "Fail: Construct DecimalFormatSymbols"); 87488de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 8749c14898b482f76ecab9026615e2e4c6fe78358bdcFredrik Roubert 87508de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert DecimalFormat fmt("0", symbols, status); 87518de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert if (U_FAILURE(status)) { 87528de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert errln((UnicodeString) 87538de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert "Fail: Construct DecimalFormat formatter"); 87548de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert } 87558de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert 87568de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert ParsePosition ppos(0); 87578de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert fmt.parseCurrency("53.45", ppos); // NPE thrown here in ICU4J. 87588de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert assertEquals("Issue11735 ppos", 0, ppos.getIndex()); 87598de051c3d18a56cc126f0f44e368495a52f9148cFredrik Roubert} 87601b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert 8761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 8762