150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/************************************************************************
2b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * COPYRIGHT:
395bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep * Copyright (c) 1997-2015, International Business Machines Corporation
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * and others. All Rights Reserved.
550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ************************************************************************/
6b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef _NUMBERFORMATTEST_
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define _NUMBERFORMATTEST_
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/numfmt.h"
15b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/decimfmt.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "caltztst.h"
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Performs various in-depth test on NumberFormat
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru **/
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass NumberFormatTest: public CalendarTimeZoneTest {
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // IntlTest override
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public:
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test APIs (to increase code coverage)
29b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     */
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestAPI(void);
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCoverage(void);
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test the handling of quotes
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     **/
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestQuotes(void);
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test patterns with exponential representation
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     **/
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestExponential(void);
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test handling of patterns with currency symbols
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     **/
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencySign(void);
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test different format patterns
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     **/
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestPatterns(void);
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * API coverage for DigitList
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     **/
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    //void TestDigitList(void);
54b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test localized currency patterns.
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrency(void);
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test the Currency object handling, new as of ICU 2.2.
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyObject(void);
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyPatterns(void);
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Do rudimentary testing of parsing.
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestParse(void);
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test proper rounding by the format method.
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestRounding487(void);
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // New tests for alphaWorks upgrade
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestExponent(void);
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestScientific(void);
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestScientific2(void);
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestScientificGrouping(void);
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestInt64(void);
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestSurrogateSupport(void);
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test the functioning of the secondary grouping value.
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestSecondaryGrouping(void);
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestWhiteSpaceParsing(void);
95b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestComplexCurrency(void);
97b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestPad(void);
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestPatterns2(void);
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Test currency registration.
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestRegCurrency(void);
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyNames(void);
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyAmount(void);
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyUnit(void);
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestSymbolsWithBadLocale(void);
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestAdoptDecimalFormatSymbols(void);
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestPerMill(void);
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestIllegalPatterns(void);
119b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCases(void);
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestJB3832(void);
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestHost(void);
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestHostClone(void);
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestCurrencyFormat(void);
129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Port of ICU4J rounding test. */
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void TestRounding(void);
132c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru
133103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    void TestRoundingPattern(void);
134103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
135c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    void TestNonpositiveMultiplier(void);
136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestNumberingSystems();
138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestSpaceParsing();
141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestMultiCurrencySign();
142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestCurrencyFormatForMixParsing();
143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestDecimalFormatCurrencyParse();
144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestCurrencyIsoPluralFormat();
145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestCurrencyParsing();
146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void TestParseCurrencyInUCurr();
14750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestFormatAttributes();
14850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestFieldPositionIterator();
14950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    void TestLenientParse();
151b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
15250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void TestDecimal();
15327f654740f2a26ad62a5c155af9199af9e69b889claireho    void TestCurrencyFractionDigits();
15427f654740f2a26ad62a5c155af9199af9e69b889claireho
15527f654740f2a26ad62a5c155af9199af9e69b889claireho    void TestExponentParse();
156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    void TestExplicitParents();
157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    void TestAvailableNumberingSystems();
158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    void Test9087();
159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    void TestFormatFastpaths();
160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
16154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    void TestFormattableSize();
16254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
16359d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestUFormattable();
16459d709d503bab6e2b61931737e662dd293b40578ccornelius
16554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius    void TestEnumSet();
166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
16759d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestSignificantDigits();
16859d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestShowZero();
16959d709d503bab6e2b61931737e662dd293b40578ccornelius
17059d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestCompatibleCurrencies();
17159d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestBug9936();
17259d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestParseNegativeWithFaLocale();
17359d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestParseNegativeWithAlternateMinusSign();
17459d709d503bab6e2b61931737e662dd293b40578ccornelius
17559d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestCustomCurrencySignAndSeparator();
17659d709d503bab6e2b61931737e662dd293b40578ccornelius
17759d709d503bab6e2b61931737e662dd293b40578ccornelius    void TestParseSignsAndMarks();
178fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void Test10419RoundingWith0FractionDigits();
179fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void Test10468ApplyPattern();
180fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void TestRoundingScientific10542();
181fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void TestZeroScientific10547();
182fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void TestAccountingCurrency();
183fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void TestEquality();
18459d709d503bab6e2b61931737e662dd293b40578ccornelius
185f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    void TestCurrencyUsage();
1861b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert    void TestDoubleLimit11439();
18795bba3074fbe8ba9d29e736334ae3bad704102aaTravis Keep    void TestFastPathConsistent11524();
188f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private:
19059d709d503bab6e2b61931737e662dd293b40578ccornelius    UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
19159d709d503bab6e2b61931737e662dd293b40578ccornelius
19259d709d503bab6e2b61931737e662dd293b40578ccornelius    void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text);
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static UBool equalValue(const Formattable& a, const Formattable& b);
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
19650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
19750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         const UnicodeString& str);
19850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
19950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                        const UnicodeString& str);
20150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect2(fmt, n, UnicodeString(str, ""));
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect2(fmt, n, UnicodeString(str, ""), ec);
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, UnicodeString(str, ""), n);
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat& fmt, const Formattable& n,
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const UnicodeString& exp, UBool rt=TRUE);
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat& fmt, const Formattable& n,
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const char *exp, UBool rt=TRUE) {
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect(fmt, n, UnicodeString(exp, ""), rt);
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat* fmt, const Formattable& n,
231fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                const UnicodeString& exp, UBool rt, UErrorCode errorCode);
232fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
233fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void expect(NumberFormat* fmt, const Formattable& n,
234fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                const char *exp, UBool rt, UErrorCode errorCode) {
235fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(fmt, n, UnicodeString(exp, ""), rt, errorCode);
236fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
237fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
238fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void expect(NumberFormat* fmt, const Formattable& n,
239fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius                const UnicodeString& exp, UErrorCode errorCode) {
240fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(fmt, n, exp, TRUE, errorCode);
241fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    }
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expect(NumberFormat* fmt, const Formattable& n,
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const char *exp, UErrorCode errorCode) {
245fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        expect(fmt, n, UnicodeString(exp, ""), TRUE, errorCode);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectCurrency(NumberFormat& nf, const Locale& locale,
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        double value, const UnicodeString& string);
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos, int32_t width, UChar pad);
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const char *pat,
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos, int32_t width, UChar pad) {
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos, int32_t width, const UnicodeString& pad);
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const char *pat,
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos, int32_t width, const UnicodeString& pad) {
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPat(DecimalFormat& fmt, const char *exp) {
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectPat(fmt, UnicodeString(exp, ""));
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos);
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void expectPad(DecimalFormat& fmt, const char *pat,
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                   int32_t pos) {
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectPad(fmt, pat, pos, 0, (UChar)0);
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    void expect_rbnf(NumberFormat& fmt, const Formattable& n,
284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru                const UnicodeString& exp, UBool rt=TRUE);
285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // internal utility routine
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static UnicodeString& escape(UnicodeString& s);
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    enum { ILLEGAL = -1 };
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // internal subtest used by TestRounding487
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    // internal rounding checking for TestRounding
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    double checkRound(DecimalFormat* df, double iValue, double lastParsed);
298fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
299fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    void verifyRounding(
300fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        DecimalFormat& format,
301fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const double *values,
302fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *expected,
303fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const DecimalFormat::ERoundingMode *roundingModes,
304fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        const char * const *descriptions,
305fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t valueSize,
306fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius        int32_t roundingModeSize);
307fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // _NUMBERFORMATTEST_
313