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