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