1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Copyright (c) 1997-2013, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dcfmapts.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h" 1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/currpinf.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln((UnicodeString)"TestSuite DecimalFormatAPI"); 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "DecimalFormat API test"; 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalFormat API test---"); logln((UnicodeString)""); 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not set default locale, test may not give correct results"); 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(/*par*/); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "Rounding test"; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalFormat Rounding test---"); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testRounding(/*par*/); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 45b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 2: name = "Test6354"; 46b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 47b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln((UnicodeString)"DecimalFormat Rounding Increment test---"); 48b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru testRoundingInc(/*par*/); 49b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 50b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 3: name = "TestCurrencyPluralInfo"; 5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(exec) { 5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln((UnicodeString)"CurrencyPluralInfo API test---"); 5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TestCurrencyPluralInfo(); 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case 4: name = "TestScale"; 588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(exec) { 598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln((UnicodeString)"Scale test---"); 608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TestScale(); 618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test checks various generic API methods in DecimalFormat to achieve 100% 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API coverage. 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testAPI(/*char *par*/) 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test constructors 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing DecimalFormat constructors"); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat def(status); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString pattern("#,##0.# FF"); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat pat(pattern, status); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern)"); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getFrench(), status); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (French)"); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat cust1(pattern, symbols, status); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat cust2(pattern, *symbols, status); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols)"); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat copy(pat); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test clone(), assignment, and equality 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing clone(), assignment and equality operators"); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ! (copy == pat) || copy != pat) { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Copy constructor or == failed"); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy = cust1; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(copy != cust1) { 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Assignment (or !=) failed"); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *clone = def.clone(); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ! (*clone == def) ) { 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Clone() failed"); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete clone; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test various format() methods 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing various format() methods"); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double d = -10456.0037; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = 100000000; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fD(d); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fL(l); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString res1, res2, res3, res4; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos1(0), pos2(0), pos3(0), pos4(0); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res1 = def.format(d, res1, pos1); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res1); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res2 = pat.format(l, res2, pos2); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) l + " formatted to " + res2); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res3 = cust1.format(fD, res3, pos3, status); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: format(Formattable [double]) failed"); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) fD.getDouble() + " formatted to " + res3); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res4 = cust2.format(fL, res4, pos4, status); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: format(Formattable [long]) failed"); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + fL.getLong() + " formatted to " + res4); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test parse() 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing parse()"); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("-10,456.0037"); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result1, result2; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patt("#,##0.#"); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyPattern(patt, status); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed"); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.parse(text, result1, pos); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result1.getType() != Formattable::kDouble && result1.getDouble() != d) { 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result1.getDouble()); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.parse(text, result2, status); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: parse() failed"); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result2.getType() != Formattable::kDouble && result2.getDouble() != d) { 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result2.getDouble()); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getters and setters 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getters and setters"); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DecimalFormatSymbols *syms = pat.getDecimalFormatSymbols(); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *newSyms = new DecimalFormatSymbols(*syms); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def.setDecimalFormatSymbols(*newSyms); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def.adoptDecimalFormatSymbols(newSyms); // don't use newSyms after this 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *(pat.getDecimalFormatSymbols()) != *(def.getDecimalFormatSymbols())) { 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: adopt or set DecimalFormatSymbols() failed"); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString posPrefix; 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setPositivePrefix("+"); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru posPrefix = pat.getPositivePrefix(posPrefix); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Positive prefix (should be +): " + posPrefix); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(posPrefix != "+") { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setPositivePrefix() failed"); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString negPrefix; 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setNegativePrefix("-"); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru negPrefix = pat.getNegativePrefix(negPrefix); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Negative prefix (should be -): " + negPrefix); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(negPrefix != "-") { 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setNegativePrefix() failed"); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString posSuffix; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setPositiveSuffix("_"); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru posSuffix = pat.getPositiveSuffix(posSuffix); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Positive suffix (should be _): " + posSuffix); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(posSuffix != "_") { 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setPositiveSuffix() failed"); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString negSuffix; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setNegativeSuffix("~"); 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru negSuffix = pat.getNegativeSuffix(negSuffix); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Negative suffix (should be ~): " + negSuffix); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(negSuffix != "~") { 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setNegativeSuffix() failed"); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t multiplier = 0; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setMultiplier(8); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru multiplier = pat.getMultiplier(); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Multiplier (should be 8): " + multiplier); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(multiplier != 8) { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setMultiplier() failed"); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t groupingSize = 0; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setGroupingSize(2); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru groupingSize = pat.getGroupingSize(); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Grouping size (should be 2): " + (int32_t) groupingSize); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(groupingSize != 2) { 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setGroupingSize() failed"); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setDecimalSeparatorAlwaysShown(TRUE); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool tf = pat.isDecimalSeparatorAlwaysShown(); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalSeparatorIsAlwaysShown (should be TRUE) is " + (UnicodeString) (tf ? "TRUE" : "FALSE")); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(tf != TRUE) { 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setDecimalSeparatorAlwaysShown() failed"); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/isExponentSignAlwaysShown 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setExponentSignAlwaysShown(TRUE); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool esas = pat.isExponentSignAlwaysShown(); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"ExponentSignAlwaysShown (should be TRUE) is " + (UnicodeString) (esas ? "TRUE" : "FALSE")); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(esas != TRUE) { 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: ExponentSignAlwaysShown() failed"); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/isScientificNotation 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setScientificNotation(TRUE); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool sn = pat.isScientificNotation(); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"isScientificNotation (should be TRUE) is " + (UnicodeString) (sn ? "TRUE" : "FALSE")); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(sn != TRUE) { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setScientificNotation() failed"); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/getMinimumExponentDigits 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t MinimumExponentDigits = 0; 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setMinimumExponentDigits(2); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MinimumExponentDigits = pat.getMinimumExponentDigits(); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"MinimumExponentDigits (should be 2) is " + (int8_t) MinimumExponentDigits); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(MinimumExponentDigits != 2) { 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setMinimumExponentDigits() failed"); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/getRoundingIncrement 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double RoundingIncrement = 0.0; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingIncrement(2.0); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundingIncrement = pat.getRoundingIncrement(); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"RoundingIncrement (should be 2.0) is " + (double) RoundingIncrement); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(RoundingIncrement != 2.0) { 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setRoundingIncrement() failed"); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //end of Ken's Adding 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString funkyPat; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru funkyPat = pat.toPattern(funkyPat); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern is " + funkyPat); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString locPat; 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locPat = pat.toLocalizedPattern(locPat); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Localized pattern is " + locPat); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test applyPattern() 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing applyPattern()"); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString p1("#,##0.0#;(#,##0.0#)"); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Applying pattern " + p1); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyPattern(p1, status); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s2; 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s2 = pat.toPattern(s2); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s2); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s2 != p1) { 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toPattern() result did not match pattern applied"); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getSecondaryGroupingSize() != 0) { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Secondary Grouping Size should be 0, not %d\n", pat.getSecondaryGroupingSize()); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getGroupingSize() != 3) { 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString p2("#,##,##0.0# FF;(#,##,##0.0# FF)"); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Applying pattern " + p2); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyLocalizedPattern(p2, status); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s3; 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s3 = pat.toLocalizedPattern(s3); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s3); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s3 != p2) { 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toLocalizedPattern() result did not match pattern applied"); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError pe; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyLocalizedPattern(p2, pe, status); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern((with ParseError)) failed with " + (int32_t) status); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s4; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s4 = pat.toLocalizedPattern(s3); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s4); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s4 != p2) { 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toLocalizedPattern(with ParseErr) result did not match pattern applied"); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getSecondaryGroupingSize() != 2) { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Secondary Grouping Size should be 2, not %d\n", pat.getSecondaryGroupingSize()); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getGroupingSize() != 3) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getStaticClassID() 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getStaticClassID()"); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = new DecimalFormat(status); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Couldn't create a DecimalFormat"); 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != DecimalFormat::getStaticClassID()) { 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: getDynamicClassID() didn't return the expected value"); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDecimalFormatAPI::TestCurrencyPluralInfo(){ 38250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 38350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 38450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho CurrencyPluralInfo *cpi = new CurrencyPluralInfo(status); 38550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 38650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo(UErrorCode) could not be created"); 38750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 38850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 38950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho CurrencyPluralInfo cpi1 = *cpi; 39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(cpi->getDynamicClassID() != CurrencyPluralInfo::getStaticClassID()){ 39250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::getDynamicClassID() didn't return the expected value"); 39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setCurrencyPluralPattern("","",status); 39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setCurrencyPluralPattern"); 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setLocale(Locale::getCanada(), status); 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setLocale"); 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setPluralRules("",status); 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setPluralRules"); 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DecimalFormat *df = new DecimalFormat(status); 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errcheckln(status, "ERROR: Could not create DecimalFormat - %s", u_errorName(status)); 41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->adoptCurrencyPluralInfo(cpi); 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->getCurrencyPluralInfo(); 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->setCurrencyPluralInfo(cpi1); 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete df; 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testRounding(/*char *par*/) 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double Roundingnumber = 2.55; 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double Roundingnumber1 = -2.55; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //+2.55 results -2.55 results 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double result[]={ 3.0, -2.0, // kRoundCeiling 0, 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2.0, -3.0, // kRoundFloor 1, 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2.0, -2.0, // kRoundDown 2, 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundUp 3, 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundHalfEven 4, 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundHalfDown 5, 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0 // kRoundHalfUp 6 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat pat(status); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 4406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t mode; 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t i=0; 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString message; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString resultStr; 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(mode=0;mode < 7;mode++){ 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingMode((DecimalFormat::ERoundingMode)mode); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getRoundingMode() != (DecimalFormat::ERoundingMode)mode){ 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"SetRoundingMode or GetRoundingMode failed for mode=" + mode); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for +2.55 with RoundingIncrement=1.0 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingIncrement(1.0); 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.format(Roundingnumber, resultStr); 4578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message= (UnicodeString)"Round() failed: round(" + (double)Roundingnumber + UnicodeString(",") + mode + UnicodeString(",FALSE) with RoundingIncrement=1.0==>"); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify(message, resultStr, result[i++]); 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru message.remove(); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.remove(); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for -2.55 with RoundingIncrement=1.0 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.format(Roundingnumber1, resultStr); 4648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message= (UnicodeString)"Round() failed: round(" + (double)Roundingnumber1 + UnicodeString(",") + mode + UnicodeString(",FALSE) with RoundingIncrement=1.0==>"); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify(message, resultStr, result[i++]); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru message.remove(); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.remove(); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::verify(const UnicodeString& message, const UnicodeString& got, double expected){ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)message + got + (UnicodeString)" Expected : " + expected); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedStr(""); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedStr=expectedStr + expected; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != expectedStr ) { 4768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln((UnicodeString)"ERROR: " + message + got + (UnicodeString)" Expected : " + expectedStr); 4778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 4788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 4798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 4808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IntlTestDecimalFormatAPI::verifyString(const UnicodeString& message, const UnicodeString& got, UnicodeString& expected){ 4818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln((UnicodeString)message + got + (UnicodeString)" Expected : " + expected); 4828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(got != expected ) { 4838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln((UnicodeString)"ERROR: " + message + got + (UnicodeString)" Expected : " + expected); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testRoundingInc(/*char *par*/) 488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat pat(UnicodeString("#,##0.00"),status); 491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(U_FAILURE(status)) { 4926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // get default rounding increment 497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double roundingInc = pat.getRoundingIncrement(); 498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (roundingInc != 0.0) { 499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"ERROR: Rounding increment not zero"); 500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 50350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // With rounding now being handled by decNumber, we no longer 50450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // set a rounding increment to enable non-default mode rounding, 50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // checking of which was the original point of this test. 50650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // set rounding mode with zero increment. Rounding 50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // increment should not be set by this operation 509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat.setRoundingMode((DecimalFormat::ERoundingMode)0); 510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru roundingInc = pat.getRoundingIncrement(); 51150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (roundingInc != 0.0) { 51250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: Rounding increment not zero after setRoundingMode"); 513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IntlTestDecimalFormatAPI::TestScale() 5188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 5198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius typedef struct TestData { 5208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius double inputValue; 5218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int inputScale; 5228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius char *expectedOutput; 5238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } TestData; 5248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius static TestData testData[] = { 5268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 100.0, 3, "100,000" }, 5278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 10034.0, -2, "100.34" }, 5288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.86, -3, "0.0009" }, 5298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { -0.000455, 1, "-0%" }, 5308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { -0.000555, 1, "-1%" }, 5318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.000455, 1, "0%" }, 5328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.000555, 1, "1%" }, 5338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius }; 5348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 5368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius DecimalFormat pat(status); 5378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(U_FAILURE(status)) { 5388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 5398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 5408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString message; 5438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString resultStr; 5448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString exp; 5458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString percentPattern("#,##0%"); 5468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.setMaximumFractionDigits(4); 5478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius for(int32_t i=0;i < sizeof(testData)/sizeof(testData[0]);i++) { 5498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if ( i > 2 ) { 5508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.applyPattern(percentPattern,status); 5518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.setAttribute(UNUM_SCALE,testData[i].inputScale,status); 5538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.format(testData[i].inputValue, resultStr); 5548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message = UnicodeString("Unexpected output for ") + testData[i].inputValue + UnicodeString(" and scale ") + testData[i].inputScale + UnicodeString(". Got: "); 5558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius exp = testData[i].expectedOutput; 5568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius verifyString(message, resultStr, exp); 5578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message.remove(); 5588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius resultStr.remove(); 5598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius exp.remove(); 5608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 563