1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, 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 1359d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/currpinf.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 1559d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/decimfmt.h" 1659d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/fmtable.h" 1759d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/localpointer.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h" 1959d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/stringpiece.h" 2059d709d503bab6e2b61931737e662dd293b40578ccornelius 2159d709d503bab6e2b61931737e662dd293b40578ccornelius#include "putilimp.h" 2259d709d503bab6e2b61931737e662dd293b40578ccornelius#include "plurrule_impl.h" 2359d709d503bab6e2b61931737e662dd293b40578ccornelius#include <stdio.h> 2459d709d503bab6e2b61931737e662dd293b40578ccornelius 2559d709d503bab6e2b61931737e662dd293b40578ccornelius#define LENGTHOF(array) ((int32_t)(sizeof(array)/sizeof((array)[0]))) 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln((UnicodeString)"TestSuite DecimalFormatAPI"); 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 35fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 0: name = "DecimalFormat API test"; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalFormat API test---"); logln((UnicodeString)""); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not set default locale, test may not give correct results"); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(/*par*/); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "Rounding test"; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(exec) { 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalFormat Rounding test---"); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testRounding(/*par*/); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 54b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 2: name = "Test6354"; 55b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(exec) { 56b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln((UnicodeString)"DecimalFormat Rounding Increment test---"); 57b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru testRoundingInc(/*par*/); 58b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 59b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 3: name = "TestCurrencyPluralInfo"; 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(exec) { 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln((UnicodeString)"CurrencyPluralInfo API test---"); 6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TestCurrencyPluralInfo(); 6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case 4: name = "TestScale"; 678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(exec) { 688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln((UnicodeString)"Scale test---"); 698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TestScale(); 708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 7259d709d503bab6e2b61931737e662dd293b40578ccornelius case 5: name = "TestFixedDecimal"; 7359d709d503bab6e2b61931737e662dd293b40578ccornelius if(exec) { 7459d709d503bab6e2b61931737e662dd293b40578ccornelius logln((UnicodeString)"TestFixedDecimal ---"); 7559d709d503bab6e2b61931737e662dd293b40578ccornelius TestFixedDecimal(); 7659d709d503bab6e2b61931737e662dd293b40578ccornelius } 7759d709d503bab6e2b61931737e662dd293b40578ccornelius break; 78fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 6: name = "TestBadFastpath"; 79fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(exec) { 80fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln((UnicodeString)"TestBadFastpath ---"); 81fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TestBadFastpath(); 82fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 83fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius break; 8459d709d503bab6e2b61931737e662dd293b40578ccornelius default: name = ""; break; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test checks various generic API methods in DecimalFormat to achieve 100% 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API coverage. 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testAPI(/*char *par*/) 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test constructors 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing DecimalFormat constructors"); 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat def(status); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString pattern("#,##0.# FF"); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat pat(pattern, status); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern)"); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *symbols = new DecimalFormatSymbols(Locale::getFrench(), status); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormatSymbols (French)"); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat cust1(pattern, symbols, status); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)"); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat cust2(pattern, *symbols, status); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols)"); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat copy(pat); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test clone(), assignment, and equality 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing clone(), assignment and equality operators"); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ! (copy == pat) || copy != pat) { 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Copy constructor or == failed"); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy = cust1; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(copy != cust1) { 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Assignment (or !=) failed"); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Format *clone = def.clone(); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ! (*clone == def) ) { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Clone() failed"); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete clone; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test various format() methods 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing various format() methods"); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double d = -10456.0037; 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = 100000000; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fD(d); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fL(l); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString res1, res2, res3, res4; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos1(0), pos2(0), pos3(0), pos4(0); 165fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res1 = def.format(d, res1, pos1); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res1); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res2 = pat.format(l, res2, pos2); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) l + " formatted to " + res2); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res3 = cust1.format(fD, res3, pos3, status); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: format(Formattable [double]) failed"); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) fD.getDouble() + " formatted to " + res3); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res4 = cust2.format(fL, res4, pos4, status); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: format(Formattable [long]) failed"); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + fL.getLong() + " formatted to " + res4); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test parse() 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing parse()"); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("-10,456.0037"); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result1, result2; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString patt("#,##0.#"); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyPattern(patt, status); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed"); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.parse(text, result1, pos); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result1.getType() != Formattable::kDouble && result1.getDouble() != d) { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result1.getDouble()); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.parse(text, result2, status); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: parse() failed"); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result2.getType() != Formattable::kDouble && result2.getDouble() != d) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Roundtrip failed (via parse()) for " + text); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result2.getDouble()); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getters and setters 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getters and setters"); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DecimalFormatSymbols *syms = pat.getDecimalFormatSymbols(); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormatSymbols *newSyms = new DecimalFormatSymbols(*syms); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def.setDecimalFormatSymbols(*newSyms); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def.adoptDecimalFormatSymbols(newSyms); // don't use newSyms after this 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *(pat.getDecimalFormatSymbols()) != *(def.getDecimalFormatSymbols())) { 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: adopt or set DecimalFormatSymbols() failed"); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString posPrefix; 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setPositivePrefix("+"); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru posPrefix = pat.getPositivePrefix(posPrefix); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Positive prefix (should be +): " + posPrefix); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(posPrefix != "+") { 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setPositivePrefix() failed"); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString negPrefix; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setNegativePrefix("-"); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru negPrefix = pat.getNegativePrefix(negPrefix); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Negative prefix (should be -): " + negPrefix); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(negPrefix != "-") { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setNegativePrefix() failed"); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString posSuffix; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setPositiveSuffix("_"); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru posSuffix = pat.getPositiveSuffix(posSuffix); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Positive suffix (should be _): " + posSuffix); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(posSuffix != "_") { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setPositiveSuffix() failed"); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString negSuffix; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setNegativeSuffix("~"); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru negSuffix = pat.getNegativeSuffix(negSuffix); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Negative suffix (should be ~): " + negSuffix); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(negSuffix != "~") { 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setNegativeSuffix() failed"); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t multiplier = 0; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setMultiplier(8); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru multiplier = pat.getMultiplier(); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Multiplier (should be 8): " + multiplier); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(multiplier != 8) { 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setMultiplier() failed"); 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t groupingSize = 0; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setGroupingSize(2); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru groupingSize = pat.getGroupingSize(); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Grouping size (should be 2): " + (int32_t) groupingSize); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(groupingSize != 2) { 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setGroupingSize() failed"); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setDecimalSeparatorAlwaysShown(TRUE); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool tf = pat.isDecimalSeparatorAlwaysShown(); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"DecimalSeparatorIsAlwaysShown (should be TRUE) is " + (UnicodeString) (tf ? "TRUE" : "FALSE")); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(tf != TRUE) { 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setDecimalSeparatorAlwaysShown() failed"); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/isExponentSignAlwaysShown 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setExponentSignAlwaysShown(TRUE); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool esas = pat.isExponentSignAlwaysShown(); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"ExponentSignAlwaysShown (should be TRUE) is " + (UnicodeString) (esas ? "TRUE" : "FALSE")); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(esas != TRUE) { 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: ExponentSignAlwaysShown() failed"); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/isScientificNotation 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setScientificNotation(TRUE); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool sn = pat.isScientificNotation(); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"isScientificNotation (should be TRUE) is " + (UnicodeString) (sn ? "TRUE" : "FALSE")); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(sn != TRUE) { 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setScientificNotation() failed"); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 296fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/getMinimumExponentDigits 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t MinimumExponentDigits = 0; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setMinimumExponentDigits(2); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MinimumExponentDigits = pat.getMinimumExponentDigits(); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"MinimumExponentDigits (should be 2) is " + (int8_t) MinimumExponentDigits); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(MinimumExponentDigits != 2) { 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setMinimumExponentDigits() failed"); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Added by Ken Liu testing set/getRoundingIncrement 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double RoundingIncrement = 0.0; 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingIncrement(2.0); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundingIncrement = pat.getRoundingIncrement(); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"RoundingIncrement (should be 2.0) is " + (double) RoundingIncrement); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(RoundingIncrement != 2.0) { 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: setRoundingIncrement() failed"); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //end of Ken's Adding 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString funkyPat; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru funkyPat = pat.toPattern(funkyPat); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Pattern is " + funkyPat); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString locPat; 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locPat = pat.toLocalizedPattern(locPat); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Localized pattern is " + locPat); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test applyPattern() 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing applyPattern()"); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString p1("#,##0.0#;(#,##0.0#)"); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Applying pattern " + p1); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyPattern(p1, status); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s2; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s2 = pat.toPattern(s2); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s2); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s2 != p1) { 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toPattern() result did not match pattern applied"); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getSecondaryGroupingSize() != 0) { 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Secondary Grouping Size should be 0, not %d\n", pat.getSecondaryGroupingSize()); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getGroupingSize() != 3) { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString p2("#,##,##0.0# FF;(#,##,##0.0# FF)"); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Applying pattern " + p2); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyLocalizedPattern(p2, status); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern() failed with " + (int32_t) status); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s3; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s3 = pat.toLocalizedPattern(s3); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s3); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s3 != p2) { 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toLocalizedPattern() result did not match pattern applied"); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError pe; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.applyLocalizedPattern(p2, pe, status); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: applyPattern((with ParseError)) failed with " + (int32_t) status); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s4; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru s4 = pat.toLocalizedPattern(s3); 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Extracted pattern is " + s4); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(s4 != p2) { 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: toLocalizedPattern(with ParseErr) result did not match pattern applied"); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getSecondaryGroupingSize() != 2) { 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Secondary Grouping Size should be 2, not %d\n", pat.getSecondaryGroupingSize()); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getGroupingSize() != 3) { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Primary Grouping Size should be 3, not %d\n", pat.getGroupingSize()); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getStaticClassID() 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getStaticClassID()"); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = new DecimalFormat(status); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: Couldn't create a DecimalFormat"); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != DecimalFormat::getStaticClassID()) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: getDynamicClassID() didn't return the expected value"); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDecimalFormatAPI::TestCurrencyPluralInfo(){ 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho CurrencyPluralInfo *cpi = new CurrencyPluralInfo(status); 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo(UErrorCode) could not be created"); 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho CurrencyPluralInfo cpi1 = *cpi; 41150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(cpi->getDynamicClassID() != CurrencyPluralInfo::getStaticClassID()){ 41350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::getDynamicClassID() didn't return the expected value"); 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 41650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setCurrencyPluralPattern("","",status); 41750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 41850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setCurrencyPluralPattern"); 41950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 42050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 42150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setLocale(Locale::getCanada(), status); 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 42350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setLocale"); 42450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 42650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho cpi->setPluralRules("",status); 42750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 42850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: CurrencyPluralInfo::setPluralRules"); 42950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 43050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 43150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DecimalFormat *df = new DecimalFormat(status); 43250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)) { 43350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errcheckln(status, "ERROR: Could not create DecimalFormat - %s", u_errorName(status)); 43450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 43550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 43650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->adoptCurrencyPluralInfo(cpi); 43750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 43850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->getCurrencyPluralInfo(); 43950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 44050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho df->setCurrencyPluralInfo(cpi1); 44150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 44250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete df; 44350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 44450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testRounding(/*char *par*/) 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double Roundingnumber = 2.55; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double Roundingnumber1 = -2.55; 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //+2.55 results -2.55 results 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double result[]={ 3.0, -2.0, // kRoundCeiling 0, 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2.0, -3.0, // kRoundFloor 1, 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2.0, -2.0, // kRoundDown 2, 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundUp 3, 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundHalfEven 4, 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3.0, -3.0, // kRoundHalfDown 5, 457fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 3.0, -3.0 // kRoundHalfUp 6 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat pat(status); 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 4616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t mode; 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t i=0; 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString message; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString resultStr; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(mode=0;mode < 7;mode++){ 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingMode((DecimalFormat::ERoundingMode)mode); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pat.getRoundingMode() != (DecimalFormat::ERoundingMode)mode){ 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"SetRoundingMode or GetRoundingMode failed for mode=" + mode); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for +2.55 with RoundingIncrement=1.0 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.setRoundingIncrement(1.0); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.format(Roundingnumber, resultStr); 4788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message= (UnicodeString)"Round() failed: round(" + (double)Roundingnumber + UnicodeString(",") + mode + UnicodeString(",FALSE) with RoundingIncrement=1.0==>"); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify(message, resultStr, result[i++]); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru message.remove(); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.remove(); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //for -2.55 with RoundingIncrement=1.0 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pat.format(Roundingnumber1, resultStr); 4858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message= (UnicodeString)"Round() failed: round(" + (double)Roundingnumber1 + UnicodeString(",") + mode + UnicodeString(",FALSE) with RoundingIncrement=1.0==>"); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify(message, resultStr, result[i++]); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru message.remove(); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultStr.remove(); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDecimalFormatAPI::verify(const UnicodeString& message, const UnicodeString& got, double expected){ 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)message + got + (UnicodeString)" Expected : " + expected); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expectedStr(""); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedStr=expectedStr + expected; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(got != expectedStr ) { 4978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln((UnicodeString)"ERROR: " + message + got + (UnicodeString)" Expected : " + expectedStr); 4988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 4998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 5008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IntlTestDecimalFormatAPI::verifyString(const UnicodeString& message, const UnicodeString& got, UnicodeString& expected){ 5028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln((UnicodeString)message + got + (UnicodeString)" Expected : " + expected); 5038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(got != expected ) { 5048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln((UnicodeString)"ERROR: " + message + got + (UnicodeString)" Expected : " + expected); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid IntlTestDecimalFormatAPI::testRoundingInc(/*char *par*/) 509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru DecimalFormat pat(UnicodeString("#,##0.00"),status); 512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(U_FAILURE(status)) { 5136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // get default rounding increment 518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru double roundingInc = pat.getRoundingIncrement(); 519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (roundingInc != 0.0) { 520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln((UnicodeString)"ERROR: Rounding increment not zero"); 521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // With rounding now being handled by decNumber, we no longer 52550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // set a rounding increment to enable non-default mode rounding, 52650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // checking of which was the original point of this test. 52750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // set rounding mode with zero increment. Rounding 52950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho // increment should not be set by this operation 530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pat.setRoundingMode((DecimalFormat::ERoundingMode)0); 531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru roundingInc = pat.getRoundingIncrement(); 53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (roundingInc != 0.0) { 53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln((UnicodeString)"ERROR: Rounding increment not zero after setRoundingMode"); 534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 5388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IntlTestDecimalFormatAPI::TestScale() 5398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 5408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius typedef struct TestData { 5418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius double inputValue; 5428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int inputScale; 54359d709d503bab6e2b61931737e662dd293b40578ccornelius const char *expectedOutput; 5448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } TestData; 5458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius static TestData testData[] = { 5478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 100.0, 3, "100,000" }, 5488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 10034.0, -2, "100.34" }, 5498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.86, -3, "0.0009" }, 5508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { -0.000455, 1, "-0%" }, 5518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { -0.000555, 1, "-1%" }, 5528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.000455, 1, "0%" }, 5538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 0.000555, 1, "1%" }, 5548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius }; 5558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 5578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius DecimalFormat pat(status); 5588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if(U_FAILURE(status)) { 5598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errcheckln(status, "ERROR: Could not create DecimalFormat (default) - %s", u_errorName(status)); 5608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 5618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 5638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString message; 5648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString resultStr; 5658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString exp; 5668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString percentPattern("#,##0%"); 5678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.setMaximumFractionDigits(4); 5688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 56959d709d503bab6e2b61931737e662dd293b40578ccornelius for(int32_t i=0; i < LENGTHOF(testData); i++) { 5708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if ( i > 2 ) { 5718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.applyPattern(percentPattern,status); 5728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.setAttribute(UNUM_SCALE,testData[i].inputScale,status); 5748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius pat.format(testData[i].inputValue, resultStr); 575fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius message = UnicodeString("Unexpected output for ") + testData[i].inputValue + UnicodeString(" and scale ") + 57659d709d503bab6e2b61931737e662dd293b40578ccornelius testData[i].inputScale + UnicodeString(". Got: "); 5778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius exp = testData[i].expectedOutput; 5788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius verifyString(message, resultStr, exp); 5798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius message.remove(); 5808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius resultStr.remove(); 5818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius exp.remove(); 5828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 5838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 58459d709d503bab6e2b61931737e662dd293b40578ccornelius 58559d709d503bab6e2b61931737e662dd293b40578ccornelius 58659d709d503bab6e2b61931737e662dd293b40578ccornelius#define ASSERT_EQUAL(expect, actual) { char tmp[200]; sprintf(tmp, "(%g==%g)", (double)(expect), (double)(actual)); \ 58759d709d503bab6e2b61931737e662dd293b40578ccornelius assertTrue(tmp, ((expect)==(actual)), FALSE, TRUE, __FILE__, __LINE__); } 58859d709d503bab6e2b61931737e662dd293b40578ccornelius 58959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid IntlTestDecimalFormatAPI::TestFixedDecimal() { 59059d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status = U_ZERO_ERROR; 59159d709d503bab6e2b61931737e662dd293b40578ccornelius 59259d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormat> df(new DecimalFormat("###", status)); 59359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 59459d709d503bab6e2b61931737e662dd293b40578ccornelius FixedDecimal fd = df->getFixedDecimal(44, status); 59559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 59659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(44, fd.source); 59759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.visibleDecimalDigitCount); 59859d709d503bab6e2b61931737e662dd293b40578ccornelius 59959d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("###.00##", status)); 60059d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 60159d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(123.456, status); 60259d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 60359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(3, fd.visibleDecimalDigitCount); 60459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(456, fd.decimalDigits); 60559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(456, fd.decimalDigitsWithoutTrailingZeros); 60659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123, fd.intValue); 60759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 60859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 60959d709d503bab6e2b61931737e662dd293b40578ccornelius 61059d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("###", status)); 61159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 61259d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(123.456, status); 61359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 61459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.visibleDecimalDigitCount); 61559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 61659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 61759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123, fd.intValue); 61859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 61959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 62059d709d503bab6e2b61931737e662dd293b40578ccornelius 62159d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("###.0", status)); 62259d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 62359d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(123.01, status); 62459d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 62559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.visibleDecimalDigitCount); 62659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 62759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 62859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123, fd.intValue); 62959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 63059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 63159d709d503bab6e2b61931737e662dd293b40578ccornelius 63259d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("###.0", status)); 63359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 63459d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(123.06, status); 63559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 63659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.visibleDecimalDigitCount); 63759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.decimalDigits); 63859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.decimalDigitsWithoutTrailingZeros); 63959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123, fd.intValue); 64059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 64159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 64259d709d503bab6e2b61931737e662dd293b40578ccornelius 64359d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("@@@@@", status)); // Significant Digits 64459d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 64559d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(123, status); 64659d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 64759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 64859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 64959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 65059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123, fd.intValue); 65159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 65259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 65359d709d503bab6e2b61931737e662dd293b40578ccornelius 65459d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("@@@@@", status)); // Significant Digits 65559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 65659d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(1.23, status); 65759d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 65859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(4, fd.visibleDecimalDigitCount); 65959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2300, fd.decimalDigits); 66059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(23, fd.decimalDigitsWithoutTrailingZeros); 66159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.intValue); 66259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 66359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 66459d709d503bab6e2b61931737e662dd293b40578ccornelius 66559d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(uprv_getInfinity(), status); 66659d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 66759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.isNanOrInfinity); 66859d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(0.0, status); 66959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNanOrInfinity); 67059d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(uprv_getNaN(), status); 67159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.isNanOrInfinity); 67259d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 67359d709d503bab6e2b61931737e662dd293b40578ccornelius 67459d709d503bab6e2b61931737e662dd293b40578ccornelius // Test Big Decimal input. 67559d709d503bab6e2b61931737e662dd293b40578ccornelius // 22 digits before and after decimal, will exceed the precision of a double 67659d709d503bab6e2b61931737e662dd293b40578ccornelius // and force DecimalFormat::getFixedDecimal() to work with a digit list. 67759d709d503bab6e2b61931737e662dd293b40578ccornelius df.adoptInstead(new DecimalFormat("#####################0.00####################", status)); 67859d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 67959d709d503bab6e2b61931737e662dd293b40578ccornelius Formattable fable("12.34", status); 68059d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 68159d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 68259d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 68359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 68459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(34, fd.decimalDigits); 68559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(34, fd.decimalDigitsWithoutTrailingZeros); 68659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.intValue); 68759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 68859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 68959d709d503bab6e2b61931737e662dd293b40578ccornelius 69059d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("12.345678901234567890123456789", status); 69159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 69259d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 69359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 69459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(22, fd.visibleDecimalDigitCount); 69559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(345678901234567890LL, fd.decimalDigits); 69659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(34567890123456789LL, fd.decimalDigitsWithoutTrailingZeros); 69759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.intValue); 69859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 69959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 70059d709d503bab6e2b61931737e662dd293b40578ccornelius 70159d709d503bab6e2b61931737e662dd293b40578ccornelius // On field overflow, Integer part is truncated on the left, fraction part on the right. 70259d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("123456789012345678901234567890.123456789012345678901234567890", status); 70359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 70459d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 70559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 70659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(22, fd.visibleDecimalDigitCount); 70759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123456789012345678LL, fd.decimalDigits); 70859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(123456789012345678LL, fd.decimalDigitsWithoutTrailingZeros); 70959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(345678901234567890LL, fd.intValue); 71059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 71159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 71259d709d503bab6e2b61931737e662dd293b40578ccornelius 71359d709d503bab6e2b61931737e662dd293b40578ccornelius // Digits way to the right of the decimal but within the format's precision aren't truncated 71459d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("1.0000000000000000000012", status); 71559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 71659d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 71759d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 71859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(22, fd.visibleDecimalDigitCount); 71959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.decimalDigits); 72059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.decimalDigitsWithoutTrailingZeros); 72159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.intValue); 72259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 72359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 72459d709d503bab6e2b61931737e662dd293b40578ccornelius 72559d709d503bab6e2b61931737e662dd293b40578ccornelius // Digits beyond the precision of the format are rounded away 72659d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("1.000000000000000000000012", status); 72759d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 72859d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 72959d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 73059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 73159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 73259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 73359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.intValue); 73459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 73559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 73659d709d503bab6e2b61931737e662dd293b40578ccornelius 73759d709d503bab6e2b61931737e662dd293b40578ccornelius // Negative numbers come through 73859d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("-1.0000000000000000000012", status); 73959d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 74059d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 74159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 74259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(22, fd.visibleDecimalDigitCount); 74359d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.decimalDigits); 74459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(12, fd.decimalDigitsWithoutTrailingZeros); 74559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(1, fd.intValue); 74659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 74759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.isNegative); 74859d709d503bab6e2b61931737e662dd293b40578ccornelius 74959d709d503bab6e2b61931737e662dd293b40578ccornelius // MinFractionDigits from format larger than from number. 75059d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setDecimalNumber("1000000000000000000000.3", status); 75159d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 75259d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 75359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 75459d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 75559d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(30, fd.decimalDigits); 75659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(3, fd.decimalDigitsWithoutTrailingZeros); 75759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(100000000000000000LL, fd.intValue); 75859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.hasIntegerValue); 75959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 76059d709d503bab6e2b61931737e662dd293b40578ccornelius 76159d709d503bab6e2b61931737e662dd293b40578ccornelius // Test some int64_t values that are out of the range of a double 76259d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setInt64(4503599627370496LL); 76359d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 76459d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 76559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 76659d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 76759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 76859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 76959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(4503599627370496LL, fd.intValue); 77059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 77159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 77259d709d503bab6e2b61931737e662dd293b40578ccornelius 77359d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setInt64(4503599627370497LL); 77459d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 77559d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 77659d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 77759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 77859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 77959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 78059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(4503599627370497LL, fd.intValue); 78159d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 78259d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 78359d709d503bab6e2b61931737e662dd293b40578ccornelius 78459d709d503bab6e2b61931737e662dd293b40578ccornelius fable.setInt64(9223372036854775807LL); 78559d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 78659d709d503bab6e2b61931737e662dd293b40578ccornelius fd = df->getFixedDecimal(fable, status); 78759d709d503bab6e2b61931737e662dd293b40578ccornelius TEST_ASSERT_STATUS(status); 78859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(2, fd.visibleDecimalDigitCount); 78959d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigits); 79059d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(0, fd.decimalDigitsWithoutTrailingZeros); 79159d709d503bab6e2b61931737e662dd293b40578ccornelius // note: going through DigitList path to FixedDecimal, which is trimming 79259d709d503bab6e2b61931737e662dd293b40578ccornelius // int64_t fields to 18 digits. See ticket Ticket #10374 79359d709d503bab6e2b61931737e662dd293b40578ccornelius // ASSERT_EQUAL(223372036854775807LL, fd.intValue); 79459d709d503bab6e2b61931737e662dd293b40578ccornelius if (!(fd.intValue == 223372036854775807LL || fd.intValue == 9223372036854775807LL)) { 79559d709d503bab6e2b61931737e662dd293b40578ccornelius dataerrln("File %s, Line %d, fd.intValue = %lld", __FILE__, __LINE__, fd.intValue); 79659d709d503bab6e2b61931737e662dd293b40578ccornelius } 79759d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(TRUE, fd.hasIntegerValue); 79859d709d503bab6e2b61931737e662dd293b40578ccornelius ASSERT_EQUAL(FALSE, fd.isNegative); 79959d709d503bab6e2b61931737e662dd293b40578ccornelius 80059d709d503bab6e2b61931737e662dd293b40578ccornelius} 801fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 802fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid IntlTestDecimalFormatAPI::TestBadFastpath() { 803fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 804fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 805fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<DecimalFormat> df(new DecimalFormat("###", status)); 806fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if (U_FAILURE(status)) { 807fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius dataerrln("Error creating new DecimalFormat - %s", u_errorName(status)); 808fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 809fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 810fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 811fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString fmt; 812fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.remove(); 813fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("Format 1234", "1234", df->format(1234, fmt)); 814fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius df->setGroupingUsed(FALSE); 815fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.remove(); 816fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("Format 1234", "1234", df->format(1234, fmt)); 817fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius df->setGroupingUsed(TRUE); 818fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius fmt.remove(); 819fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius assertEquals("Format 1234 w/ grouping", "1,234", df->format(1234, fmt)); 820fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 821fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 823