]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/intltest/numfmtst.h
ICU-59117.0.1.tar.gz
[apple/icu.git] / icuSources / test / intltest / numfmtst.h
CommitLineData
f3c0d7a5
A
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
729e4ab9
A
3/************************************************************************
4 * COPYRIGHT:
2ca993e8 5 * Copyright (c) 1997-2016, International Business Machines Corporation
729e4ab9
A
6 * and others. All Rights Reserved.
7 ************************************************************************/
8
b75a7d8f
A
9#ifndef _NUMBERFORMATTEST_
10#define _NUMBERFORMATTEST_
11
12#include "unicode/utypes.h"
13
14#if !UCONFIG_NO_FORMATTING
15
16#include "unicode/numfmt.h"
729e4ab9 17#include "unicode/decimfmt.h"
b75a7d8f
A
18#include "caltztst.h"
19
2ca993e8
A
20/**
21 * Expected field positions from field position iterator. Tests should
22 * stack allocate an array of these making sure that the last element is
23 * {0, -1, 0} (The sentinel element indicating end of iterator). Then test
24 * should call verifyFieldPositionIterator() passing both this array of
25 * expected results and the field position iterator from the format method.
26 */
27struct NumberFormatTest_Attributes {
28 int32_t id;
29 int32_t spos;
30 int32_t epos;
31};
32
b75a7d8f
A
33/**
34 * Performs various in-depth test on NumberFormat
35 **/
36class NumberFormatTest: public CalendarTimeZoneTest {
37
38 // IntlTest override
39 void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
40 public:
41
42 /**
43 * Test APIs (to increase code coverage)
729e4ab9 44 */
b75a7d8f 45 void TestAPI(void);
73c04bcf
A
46
47 void TestCoverage(void);
48
b75a7d8f
A
49 /**
50 * Test the handling of quotes
51 **/
52 void TestQuotes(void);
53 /**
54 * Test patterns with exponential representation
55 **/
56 void TestExponential(void);
57 /**
58 * Test handling of patterns with currency symbols
59 **/
60 void TestCurrencySign(void);
61 /**
62 * Test different format patterns
63 **/
64 void TestPatterns(void);
65 /**
66 * API coverage for DigitList
67 **/
46f4442e 68 //void TestDigitList(void);
729e4ab9 69
b75a7d8f
A
70 /**
71 * Test localized currency patterns.
72 */
73 void TestCurrency(void);
74
75 /**
76 * Test the Currency object handling, new as of ICU 2.2.
77 */
78 void TestCurrencyObject(void);
79
80 void TestCurrencyPatterns(void);
81
82 /**
83 * Do rudimentary testing of parsing.
84 */
85 void TestParse(void);
86 /**
87 * Test proper rounding by the format method.
88 */
89 void TestRounding487(void);
90
91 // New tests for alphaWorks upgrade
92 void TestExponent(void);
93
94 void TestScientific(void);
95
374ca955
A
96 void TestScientific2(void);
97
98 void TestScientificGrouping(void);
99
100 void TestInt64(void);
101
b75a7d8f
A
102 void TestSurrogateSupport(void);
103
104 /**
105 * Test the functioning of the secondary grouping value.
106 */
107 void TestSecondaryGrouping(void);
108
109 void TestWhiteSpaceParsing(void);
729e4ab9 110
b75a7d8f 111 void TestComplexCurrency(void);
729e4ab9 112
b75a7d8f
A
113 void TestPad(void);
114 void TestPatterns2(void);
115
116 /**
117 * Test currency registration.
118 */
119 void TestRegCurrency(void);
120
374ca955
A
121 void TestCurrencyNames(void);
122
73c04bcf
A
123 void TestCurrencyAmount(void);
124
125 void TestCurrencyUnit(void);
126
b75a7d8f
A
127 void TestSymbolsWithBadLocale(void);
128
129 void TestAdoptDecimalFormatSymbols(void);
130
374ca955
A
131 void TestPerMill(void);
132
133 void TestIllegalPatterns(void);
729e4ab9 134
374ca955
A
135 void TestCases(void);
136
73c04bcf
A
137 void TestJB3832(void);
138
139 void TestHost(void);
140
46f4442e
A
141 void TestHostClone(void);
142
73c04bcf 143 void TestCurrencyFormat(void);
729e4ab9 144
46f4442e
A
145 /* Port of ICU4J rounding test. */
146 void TestRounding(void);
147
4388f060
A
148 void TestRoundingPattern(void);
149
46f4442e 150 void TestNonpositiveMultiplier(void);
729e4ab9
A
151
152 void TestNumberingSystems();
153
154
155 void TestSpaceParsing();
156 void TestMultiCurrencySign();
157 void TestCurrencyFormatForMixParsing();
158 void TestDecimalFormatCurrencyParse();
159 void TestCurrencyIsoPluralFormat();
160 void TestCurrencyParsing();
161 void TestParseCurrencyInUCurr();
162 void TestFormatAttributes();
163 void TestFieldPositionIterator();
164
165 void TestLenientParse();
166
167 void TestDecimal();
168 void TestCurrencyFractionDigits();
169
170 void TestExponentParse();
4388f060
A
171 void TestExplicitParents();
172 void TestAvailableNumberingSystems();
173 void Test9087();
51004dcb 174 void TestFormatFastpaths();
4388f060 175
51004dcb
A
176 void TestFormattableSize();
177
57a6839d
A
178 void TestUFormattable();
179
51004dcb 180 void TestEnumSet();
729e4ab9 181
57a6839d
A
182 void TestSignificantDigits();
183 void TestShowZero();
184
185 void TestCompatibleCurrencies();
186 void TestBug9936();
187 void TestParseNegativeWithFaLocale();
188 void TestParseNegativeWithAlternateMinusSign();
189
190 void TestCustomCurrencySignAndSeparator();
191
192 void TestParseSignsAndMarks();
193 void Test10419RoundingWith0FractionDigits();
194 void Test10468ApplyPattern();
195 void TestRoundingScientific10542();
196 void TestZeroScientific10547();
197 void TestAccountingCurrency();
198 void TestEquality();
199
b331163b 200 void TestCurrencyUsage();
2ca993e8
A
201 void TestNumberFormatTestTuple();
202 void TestDataDriven();
203
b331163b
A
204 void TestDoubleLimit11439();
205 void TestFastPathConsistent11524();
2ca993e8
A
206 void TestGetAffixes();
207 void TestToPatternScientific11648();
208 void TestBenchmark();
209 void TestCtorApplyPatternDifference();
210 void TestFractionalDigitsForCurrency();
211 void TestFormatCurrencyPlural();
212 void Test11868();
213 void Test10727_RoundingZero();
214 void Test11376_getAndSetPositivePrefix();
215 void Test11475_signRecognition();
216 void Test11640_getAffixes();
217 void Test11649_toPatternWithMultiCurrency();
218
219 void checkExceptionIssue11735();
b331163b 220
b75a7d8f 221 private:
57a6839d
A
222 UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
223
224 void expectParseCurrency(const NumberFormat &fmt, const UChar* currency, double amount, const char *text);
b75a7d8f
A
225
226 static UBool equalValue(const Formattable& a, const Formattable& b);
227
729e4ab9
A
228 void expectPositions(FieldPositionIterator& iter, int32_t *values, int32_t tupleCount,
229 const UnicodeString& str);
230
231 void expectPosition(FieldPosition& pos, int32_t id, int32_t start, int32_t limit,
232 const UnicodeString& str);
233
b75a7d8f
A
234 void expect2(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
235
729e4ab9
A
236 void expect3(NumberFormat& fmt, const Formattable& n, const UnicodeString& str);
237
b75a7d8f
A
238 void expect2(NumberFormat& fmt, const Formattable& n, const char* str) {
239 expect2(fmt, n, UnicodeString(str, ""));
240 }
241
242 void expect2(NumberFormat* fmt, const Formattable& n, const UnicodeString& str, UErrorCode ec);
243
244 void expect2(NumberFormat* fmt, const Formattable& n, const char* str, UErrorCode ec) {
245 expect2(fmt, n, UnicodeString(str, ""), ec);
246 }
247
248 void expect(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
249
250 void expect(NumberFormat& fmt, const char *str, const Formattable& n) {
251 expect(fmt, UnicodeString(str, ""), n);
252 }
253
254 void expect(NumberFormat& fmt, const Formattable& n,
255 const UnicodeString& exp, UBool rt=TRUE);
256
257 void expect(NumberFormat& fmt, const Formattable& n,
258 const char *exp, UBool rt=TRUE) {
259 expect(fmt, n, UnicodeString(exp, ""), rt);
260 }
261
262 void expect(NumberFormat* fmt, const Formattable& n,
57a6839d
A
263 const UnicodeString& exp, UBool rt, UErrorCode errorCode);
264
265 void expect(NumberFormat* fmt, const Formattable& n,
266 const char *exp, UBool rt, UErrorCode errorCode) {
267 expect(fmt, n, UnicodeString(exp, ""), rt, errorCode);
268 }
269
270 void expect(NumberFormat* fmt, const Formattable& n,
271 const UnicodeString& exp, UErrorCode errorCode) {
272 expect(fmt, n, exp, TRUE, errorCode);
273 }
b75a7d8f
A
274
275 void expect(NumberFormat* fmt, const Formattable& n,
276 const char *exp, UErrorCode errorCode) {
57a6839d 277 expect(fmt, n, UnicodeString(exp, ""), TRUE, errorCode);
b75a7d8f
A
278 }
279
280 void expectCurrency(NumberFormat& nf, const Locale& locale,
281 double value, const UnicodeString& string);
282
b75a7d8f
A
283 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
284 int32_t pos, int32_t width, UChar pad);
285
286 void expectPad(DecimalFormat& fmt, const char *pat,
287 int32_t pos, int32_t width, UChar pad) {
288 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
289 }
290
291 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
292 int32_t pos, int32_t width, const UnicodeString& pad);
293
294 void expectPad(DecimalFormat& fmt, const char *pat,
295 int32_t pos, int32_t width, const UnicodeString& pad) {
296 expectPad(fmt, UnicodeString(pat, ""), pos, width, pad);
297 }
298
73c04bcf
A
299 void expectPat(DecimalFormat& fmt, const UnicodeString& exp);
300
301 void expectPat(DecimalFormat& fmt, const char *exp) {
302 expectPat(fmt, UnicodeString(exp, ""));
303 }
304
305 void expectPad(DecimalFormat& fmt, const UnicodeString& pat,
306 int32_t pos);
307
308 void expectPad(DecimalFormat& fmt, const char *pat,
309 int32_t pos) {
310 expectPad(fmt, pat, pos, 0, (UChar)0);
311 }
312
729e4ab9
A
313 void expect_rbnf(NumberFormat& fmt, const UnicodeString& str, const Formattable& n);
314
315 void expect_rbnf(NumberFormat& fmt, const Formattable& n,
316 const UnicodeString& exp, UBool rt=TRUE);
317
b75a7d8f
A
318 // internal utility routine
319 static UnicodeString& escape(UnicodeString& s);
320
321 enum { ILLEGAL = -1 };
322
323 // internal subtest used by TestRounding487
324 void roundingTest(NumberFormat& nf, double x, int32_t maxFractionDigits, const char* expected);
729e4ab9 325
46f4442e
A
326 // internal rounding checking for TestRounding
327 void checkRounding(DecimalFormat* df, double base, int iterations, double increment);
729e4ab9 328
46f4442e 329 double checkRound(DecimalFormat* df, double iValue, double lastParsed);
57a6839d
A
330
331 void verifyRounding(
332 DecimalFormat& format,
333 const double *values,
334 const char * const *expected,
335 const DecimalFormat::ERoundingMode *roundingModes,
336 const char * const *descriptions,
337 int32_t valueSize,
338 int32_t roundingModeSize);
339
2ca993e8
A
340 void verifyFieldPositionIterator(
341 NumberFormatTest_Attributes *expected,
342 FieldPositionIterator &iter);
343
b75a7d8f
A
344};
345
346#endif /* #if !UCONFIG_NO_FORMATTING */
729e4ab9 347
b75a7d8f 348#endif // _NUMBERFORMATTEST_