]>
Commit | Line | Data |
---|---|---|
f3c0d7a5 A |
1 | // Copyright (C) 2016 and later: Unicode, Inc. and others. |
2 | // License & terms of use: http://www.unicode.org/copyright.html | |
3 | // Copyright (C) 2015-2016, International Business Machines | |
2ca993e8 A |
4 | // Corporation and others. All Rights Reserved. |
5 | // | |
6 | // This file is divided into test suites separated by whitespace. Each test | |
7 | // suite starts with the name of the test followed by global field settings | |
8 | // for that test suite. After the global settings, comes "begin", the | |
9 | // per-test field names, and finally the test specific field values, 1 test | |
10 | // per line. | |
11 | // For more information on the format of this file, including all the available | |
12 | // field names, please see | |
13 | // https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing | |
14 | ||
15 | test plus sign | |
16 | set locale ar | |
17 | set pattern +0;-# | |
18 | begin | |
19 | format output breaks | |
f3c0d7a5 A |
20 | 6 \u061C+\u0666 JK |
21 | -6 \u061C-\u0666 JK | |
2ca993e8 A |
22 | |
23 | test basic patterns | |
24 | set locale fr_FR | |
25 | set format 1234.567 | |
26 | begin | |
27 | pattern output | |
28 | #,##0.## 1\u00a0234,57 | |
29 | 0.## 1234,57 | |
30 | 0 1235 | |
31 | #,##0.### 1\u00a0234,567 | |
32 | ###0.###### 1234,567 | |
33 | ###0.0000# 1234,5670 | |
34 | 00000.0000 01234,5670 | |
35 | #,##0.00 \u00a4 1\u00a0234,57 \u20ac | |
36 | 'tick''bitten '0.00 tick'bitten 1234,57 | |
37 | 'tick' 'bitten '0.00 tick bitten 1234,57 | |
38 | ||
39 | ||
40 | test minimum and maximum fraction digits | |
41 | set locale en | |
42 | set minIntegerDigits 2 | |
43 | set maxIntegerDigits 4 | |
44 | set minFractionDigits 3 | |
45 | set maxFractionDigits 5 | |
46 | begin | |
47 | format output | |
48 | 6 06.000 | |
49 | 6.000005 06.000 | |
50 | 6.000006 06.00001 | |
51 | 1002003004005 4005.000 | |
52 | -1002003004005 -4005.000 | |
53 | 12 12.000 | |
54 | 12345 2345.000 | |
55 | 72.1234 72.1234 | |
56 | ||
57 | test int64 | |
58 | set locale en | |
59 | begin | |
60 | format output | |
61 | 1002003004005 1002003004005 | |
62 | -1002003004005 -1002003004005 | |
63 | ||
64 | test rounding | |
65 | set locale fr | |
66 | begin | |
67 | pattern format output breaks | |
68 | 0.5 1.25 1,0 K | |
69 | 0.5 1.75 2,0 K | |
70 | 0.5 -1.25 -1,0 K | |
71 | 00.5 -1.75 -02,0 K | |
72 | 4 2.0 0 K | |
73 | 4 6.0 8 K | |
74 | 4 10.0 8 K | |
75 | 2.70 99.0 99,90 K | |
76 | 2.73 272.0 273,00 K | |
77 | #,#3.70 104.0 1\u00a003,60 K | |
78 | ||
79 | test significant digits | |
80 | set locale en | |
81 | set pattern #,#@,@### | |
82 | begin | |
83 | format output breaks | |
84 | 7 7.0 K | |
85 | 23 23 K | |
86 | 100 100 K | |
87 | 1000 1000 K | |
88 | 10000 1,0000 K | |
89 | 10001 1,0001 K | |
90 | 10001.5 1,0002 K | |
91 | 1234567 1,23,4600 K | |
92 | -1234567 -1,23,4600 K | |
93 | 3.14159 3.1416 K | |
94 | ||
95 | test scientific notation | |
96 | set locale fr | |
97 | begin | |
98 | pattern format output breaks | |
99 | 0.00E0 12345 1,23E4 | |
100 | 000.00E0 12300 123,00E2 | |
101 | 000.0#E0 12300 123,0E2 | |
102 | 000.0#E0 12300.1 123,0E2 | |
103 | 000.0#E0 12301.0 123,01E2 | |
104 | // JDK does not support exponent signs | |
105 | 000.0#E+00 12301.0 123,01E+02 K | |
106 | // JDK gives 12,345E3. JDK seems to include the hashes in significant digits | |
107 | ##0.00E0 12345 12,3E3 K | |
108 | // JDK gives 12,3001E3 | |
109 | ##0.0000E0 12300.1 12,300E3 K | |
110 | // JDK gives 12,3001E3 | |
111 | ##0.000#E0 12300.1 12,30E3 K | |
112 | ##0.000#E0 12301 12,301E3 | |
113 | 0.05E0 12301.2 1,25E4 JK | |
114 | ##0.000#E0 0.17 170,0E-3 | |
115 | // JDK doesn't support significant digits in exponents | |
116 | @@@E0 6235 6,24E3 K | |
117 | @@@#E0 6200 6,20E3 K | |
118 | @@@#E0 6201 6,201E3 K | |
119 | @@@#E0 6201.7 6,202E3 K | |
120 | @@@#E00 6201.7 6,202E03 K | |
121 | @@@#E+00 6201.7 6,202E+03 K | |
122 | ||
123 | test percents | |
124 | set locale fr | |
125 | begin | |
126 | pattern format output breaks | |
127 | 0.0% 0.573 57,3% | |
128 | %0.0 0.573 %57,3 | |
129 | p%p0.0 0.573 p%p57,3 | |
130 | p'%'p0.0 0.573 p%p0,6 | |
131 | %@@@@ 0.0326 %3,260 K | |
132 | %#,@@@ 15.43 %1\u00a0540 K | |
133 | // JDK does not support rounding increments | |
134 | %#,##4.1 16.55 %1\u00a0656,4 K | |
135 | // JDK gives %16,255E3 | |
136 | %##0.00E0 162.55 %16,3E3 K | |
137 | ||
138 | test permille | |
139 | set locale fr | |
140 | begin | |
141 | pattern format output breaks | |
142 | 0.0\u2030 0.573 573,0‰ | |
143 | \u20300.0 0.573 \u2030573,0 | |
144 | p\u2030p0.0 0.573 p\u2030p573,0 | |
145 | p'\u2030'p0.0 0.573 p\u2030p0,6 | |
146 | \u2030@@@@ 0.0326 \u203032,60 K | |
147 | \u2030#,@@@ 15.43 \u203015\u00a0400 K | |
148 | \u2030#,##4.1 16.55 \u203016\u00a0551,7 K | |
149 | // JDK gives \u2030162,55E3 | |
150 | \u2030##0.00E0 162.55 \u2030163E3 K | |
151 | ||
152 | test padding | |
153 | set locale fr_FR | |
154 | begin | |
155 | pattern format output breaks | |
156 | // JDK does not seem to support padding | |
157 | $**####,##0 1234 $***1\u00a0234 K | |
158 | *x$####,##0 1234 xxx$1\u00a0234 K | |
159 | ####,##0*x$ 1234 1\u00a0234xxx$ K | |
160 | ####,##0$*x 1234 1\u00a0234$xxx K | |
161 | // JDK doesn't seem to handle suffixes correctly dropping the 'nx' entirely | |
162 | ####,##0$*x;ne#n -1234 ne1\u00a0234nx K | |
163 | ####,##0$*x;n#'*' -1234 n1\u00a0234*xx K | |
164 | *y%4.2###### 4.33 yyyy%432,6 K | |
165 | // In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) | |
166 | \u00a4\u00a4 **####0.00 433.0 EUR *433,00 JK | |
167 | // In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) | |
168 | \u00a4\u00a4 **#######0 433.0 EUR *433,00 JK | |
169 | ||
170 | test padding and currencies | |
171 | begin | |
172 | locale currency pattern format output breaks | |
173 | // In J, JPY is considered 2 char (2 * 0xa4) even though padding is done | |
174 | // after prefix. In C this test works. | |
175 | fr JPY \u00a4\u00a4 **#######0 433.22 JPY ****433 JK | |
176 | // JDK doesn't correct rounding for currency, shows USD (433 | |
177 | en USD \u00a4\u00a4 **#######0;\u00a4\u00a4 (#) -433.22 USD (433.22) K | |
178 | ||
179 | test currencies | |
180 | set locale fr | |
181 | set format 1234.567 | |
182 | begin | |
183 | pattern currency output breaks | |
184 | // JDK gives shows EUR instead of the euro symbol in this case | |
185 | #,##0.00 \u00a4 EUR 1\u00a0234,57 \u20ac K | |
186 | // JDK gives 1\u00A0234,57. JDK doesn't seem to correct rounding | |
187 | // based on currency. | |
188 | #,##0.00 \u00a4 JPY 1\u00a0235 JPY K | |
189 | ||
190 | test prefixes and suffixes | |
191 | set locale en | |
192 | set pattern 0.00+;(#) | |
193 | begin | |
194 | format output breaks | |
195 | 7 7.00+ | |
196 | // JDK does not support negative suffixes | |
197 | -3.5 (3.50) K | |
198 | ||
199 | test minimum grouping digits | |
200 | set locale en | |
201 | set pattern #,##0 | |
202 | set minGroupingDigits 2 | |
203 | begin | |
204 | format output breaks | |
205 | // min grouping digits not supported in any existing implementation | |
206 | // but could be easily added to the new DecimalFormat C code. | |
207 | 1000 1000 JK | |
208 | 10000 10,000 | |
209 | 100000 100,000 | |
210 | 1000000 1,000,000 | |
211 | ||
212 | test min max fraction digits | |
213 | set locale en | |
214 | set pattern #,##0.### | |
215 | set format 1234.567 | |
216 | begin | |
217 | minFractionDigits maxFractionDigits output | |
218 | 0 0 1,235 | |
219 | 0 2 1,234.57 | |
220 | 4 5 1,234.5670 | |
221 | ||
222 | test min max integer digits | |
223 | set locale en | |
224 | set pattern #,##0.### | |
225 | set format 1234.567 | |
226 | begin | |
227 | minIntegerDigits maxIntegerDigits output | |
228 | 0 0 .567 | |
229 | 0 3 234.567 | |
230 | 5 5 01,234.567 | |
231 | ||
232 | test min max fraction digits scientific | |
233 | set locale en | |
234 | set pattern #E0 | |
235 | set format 299792458.0 | |
236 | begin | |
237 | minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks | |
238 | // JDK gives .3E9 instead of unlimited precision. | |
239 | 0 1 0 0 2.99792458E8 K | |
240 | 1 1 0 0 3E8 | |
241 | // JDK gives E0 instead of allowing for unlimited precision | |
242 | 0 0 0 0 2.99792458E8 K | |
243 | // JDK gives .299792E9 | |
244 | 0 1 0 5 2.9979E8 K | |
245 | // JDK gives 300E6 | |
246 | 0 3 0 0 299.792458E6 K | |
247 | // JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)? | |
248 | 0 3 0 1 300E6 K | |
249 | // JDK gives 299.7925E6 | |
250 | 2 3 0 4 299.792E6 K | |
251 | // JDK gives 299.79246E6 | |
252 | 2 3 0 5 299.7925E6 K | |
253 | 3 3 0 5 299.79246E6 | |
254 | 3 3 0 4 299.7925E6 | |
255 | 2 2 0 3 29.979E7 | |
256 | 4 4 0 0 2998E5 | |
257 | 0 0 1 5 .29979E9 | |
258 | // JDK gives E0 | |
259 | 0 0 1 0 2.99792458E8 K | |
260 | // JDK gives .2998E9 | |
261 | 0 0 0 4 2.998E8 K | |
262 | // JDK uses 8 + 6 for significant digits instead of 2 + 6 | |
263 | 2 8 1 6 2.9979246E8 K | |
264 | // Treat max int digits > 8 as being the same as min int digits. | |
265 | // This behavior is not spelled out in the specification. | |
266 | // JDK fails here because it tries to use 9 + 6 = 15 sig digits. | |
267 | 2 9 1 6 29.979246E7 K | |
268 | ||
269 | test significant digits scientific | |
270 | set locale en | |
271 | set pattern #E0 | |
272 | set format 290000000.0 | |
273 | begin | |
274 | minSigDigits maxSigDigits output breaks | |
275 | 0 1 3E8 K | |
276 | 0 2 2.9E8 K | |
277 | 0 3 2.9E8 K | |
278 | 1 1 3E8 K | |
279 | 1 2 2.9E8 K | |
280 | 1 3 2.9E8 K | |
281 | 2 2 2.9E8 K | |
282 | 2 3 2.9E8 K | |
283 | 3 3 2.90E8 K | |
284 | 3 4 2.90E8 K | |
285 | ||
286 | test min max fraction digits scientific 2 | |
287 | set locale en | |
288 | set pattern #E0 | |
289 | set format 29979245.0 | |
290 | begin | |
291 | minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks | |
292 | // JDK gives E0 | |
293 | 0 0 0 0 2.9979245E7 K | |
294 | // JDK gives .3E8 | |
295 | 0 1 0 0 2.9979245E7 K | |
296 | // JDK gives 2998E4. | |
297 | 0 4 0 0 2997.9245E4 K | |
298 | ||
299 | test ticket 11524 | |
300 | set locale en | |
301 | set pattern #,##0.### | |
302 | begin | |
303 | format maxIntegerDigits output | |
304 | 123 1 3 | |
305 | 123 -2147483648 0 | |
306 | 12345 1 5 | |
307 | 12345 -2147483648 0 | |
308 | 5.3 1 5.3 | |
309 | 5.3 -2147483648 .3 | |
310 | ||
311 | test patterns with zero | |
312 | set locale en | |
313 | set format 0 | |
314 | begin | |
315 | pattern output | |
316 | #.# 0 | |
317 | #. 0. | |
318 | .# .0 | |
319 | # 0 | |
320 | 00.000E00 00.000E00 | |
321 | 0.####E0 0E0 | |
322 | ##0.######E000 0E000 | |
323 | ||
324 | test significant digits manually set | |
325 | set locale en_US | |
326 | set pattern 0.0 | |
327 | set useSigDigits 1 | |
328 | set minSigDigits 3 | |
329 | set maxSigDigits 5 | |
330 | begin | |
331 | format output breaks | |
332 | 0.0012 0.00120 K | |
333 | 0.00123 0.00123 K | |
334 | 0.001234 0.001234 K | |
335 | 0.0012345 0.0012345 K | |
336 | 0.00123456 0.0012346 K | |
337 | -43 -43.0 K | |
338 | -43.7 -43.7 K | |
339 | -43.76 -43.76 K | |
340 | -43.762 -43.762 K | |
341 | -43.7626 -43.763 K | |
342 | ||
343 | test grouping used setters | |
344 | set locale en_US | |
345 | set pattern #,##0 | |
346 | set format 12345 | |
347 | begin | |
348 | output useGrouping | |
349 | 12,345 | |
350 | 12,345 1 | |
351 | 12345 0 | |
352 | ||
353 | test grouping setters | |
354 | set locale en_US | |
355 | set pattern 0 | |
356 | set format 123456789 | |
357 | set useGrouping 1 | |
358 | begin | |
359 | output grouping breaks grouping2 minGroupingDigits | |
360 | 1,2345,6789 4 | |
361 | 1,23,45,6789 4 K 2 | |
362 | 1,23,45,6789 4 K 2 2 | |
363 | 123,456789 6 K 6 3 | |
364 | 123456789 6 JK 6 4 | |
365 | ||
366 | test multiplier setters | |
367 | set locale en_US | |
368 | begin | |
369 | format multiplier output breaks | |
370 | 23 -12 -276 | |
371 | 23 -1 -23 | |
372 | // ICU4J and JDK throw exception on zero multiplier. ICU4C does not. | |
373 | 23 0 23 JK | |
374 | 23 1 23 | |
375 | 23 12 276 | |
376 | -23 12 -276 | |
377 | -23 -12 276 | |
378 | ||
379 | test rounding setters | |
380 | set locale en_US | |
381 | set pattern 0.0# | |
382 | set roundingIncrement 0.25 | |
383 | begin | |
384 | format output breaks | |
385 | -0.35 -0.25 K | |
386 | 0.35 0.25 K | |
387 | 0.39 0.5 K | |
388 | 0.62 0.5 K | |
389 | 0.63 0.75 K | |
390 | ||
391 | test padding setters | |
392 | set locale en_US | |
393 | set pattern bill0 | |
394 | set format 1357 | |
395 | begin | |
396 | padCharacter formatWidth output breaks | |
397 | * 8 bill1357 K | |
398 | * 9 *bill1357 K | |
399 | ^ 10 ^^bill1357 K | |
400 | ||
401 | test use scientific setter | |
402 | set locale en_US | |
403 | set pattern 0.00 | |
404 | set format 186283 | |
405 | begin | |
406 | output breaks useScientific | |
407 | 186283.00 | |
408 | 1.86E5 K 1 | |
409 | 186283.00 K 0 | |
410 | ||
411 | test rounding mode setters | |
412 | set locale en_US | |
413 | set pattern 0.# | |
414 | set roundingIncrement 0.5 | |
415 | begin | |
416 | format roundingMode output breaks | |
417 | 1.24 halfUp 1 K | |
418 | 1.25 halfUp 1.5 K | |
419 | 1.25 halfDown 1 K | |
420 | 1.26 halfDown 1.5 K | |
421 | 1.25 halfEven 1 K | |
422 | -1.01 up -1.5 K | |
423 | -1.49 down -1 K | |
424 | 1.01 up 1.5 K | |
425 | 1.49 down 1 K | |
426 | -1.01 ceiling -1 K | |
427 | -1.49 floor -1.5 K | |
428 | ||
429 | test currency usage setters | |
430 | // TODO: Find a country and currency where standard and cash differ | |
431 | set locale CH | |
432 | set currency CHF | |
433 | set pattern \u00a4\u00a4 0 | |
434 | begin | |
435 | format currencyUsage output breaks | |
436 | 0.37 standard CHF 0.37 K | |
437 | // TODO: Get the rounding data into ICU4C and ICU4J | |
438 | 0.37 cash CHF 0.35 CJK | |
439 | ||
440 | test exponent parameter setters | |
441 | set locale en_US | |
442 | set pattern 0.##E0 | |
443 | set format 299792458 | |
444 | begin | |
445 | decimalSeparatorAlwaysShown exponentSignAlwaysShown minimumExponentDigits output breaks | |
446 | 0 0 2 3E08 K | |
447 | 0 1 3 3E+008 K | |
448 | // ICU DecimalFormat J does not honor decimalSeparatorAlwaysShown | |
449 | // for scientific notation. But JDK DecimalFormat does honor | |
450 | // decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J | |
451 | // See ticket 11621 | |
452 | 1 0 2 3.E08 JK | |
453 | 1 1 3 3.E+008 JK | |
f3c0d7a5 | 454 | 1 0 1 3.E8 |
2ca993e8 A |
455 | 0 0 1 3E8 |
456 | ||
457 | test exponent decimalSeparatorAlwaysShown default | |
458 | set locale en_US | |
459 | set pattern 0.##E0 | |
460 | begin | |
461 | format output breaks decimalSeparatorAlwaysShown | |
462 | // decimalSeparatorAlwaysShown off by default | |
463 | 299792458 3E8 | |
464 | 299000000 2.99E8 | |
465 | 299792458 3.E8 J 1 | |
466 | ||
467 | test pad position setters | |
468 | set locale en_US | |
469 | set pattern **[#####0.##];((#)) | |
470 | begin | |
471 | format padPosition output breaks | |
472 | 12.34 beforePrefix ****[12.34] K | |
473 | 12.34 afterPrefix [****12.34] K | |
474 | 12.34 beforeSuffix [12.34****] K | |
475 | 12.34 afterSuffix [12.34]**** K | |
476 | -12.34 beforePrefix **((12.34)) K | |
477 | -12.34 afterPrefix ((**12.34)) K | |
478 | -12.34 beforeSuffix ((12.34**)) K | |
479 | -12.34 afterSuffix ((12.34))** K | |
480 | ||
481 | test affix setters | |
482 | set locale fr_FR | |
483 | set currency EUR | |
484 | set pattern 0.00 | |
485 | begin | |
486 | format positivePrefix positiveSuffix negativePrefix negativeSuffix output | |
487 | 12.34 % %12,34 | |
488 | 12.34 \u00a4\u00a4 12,34\u00a4\u00a4 | |
489 | 12.34 - + 12,34 | |
490 | -12.34 - + -12,34+ | |
491 | -12.34 \u00a4 \u00a412,34 | |
492 | 12.34 \u00a4 12,34 | |
493 | -12.34 % 12,34% | |
494 | 12.34 % 12,34 | |
495 | ||
496 | test more affix setters | |
497 | set locale fr_FR | |
498 | set pattern %0.00 | |
499 | begin | |
500 | format positivePrefix negativePrefix output | |
501 | 0.648 booya cooya booya64,80 | |
502 | ||
503 | test nan and infinity | |
504 | set locale en_US | |
505 | set pattern [0.00];(#) | |
506 | begin | |
507 | format output breaks | |
508 | Inf [\u221e] K | |
509 | -Inf (\u221e) K | |
510 | NaN NaN K | |
511 | ||
512 | test nan and infinity with multiplication | |
513 | set locale en | |
514 | set multiplier 100 | |
515 | begin | |
516 | format output breaks | |
517 | Inf \u221e | |
518 | -Inf -\u221e | |
519 | NaN NaN K | |
520 | ||
521 | test nan and infinity with padding | |
522 | set locale en_US | |
523 | set pattern $$$0.00$ | |
524 | set formatWidth 7 | |
525 | begin | |
526 | format padPosition output breaks | |
527 | Inf beforePrefix $$$\u221e$ K | |
528 | Inf afterPrefix $$$ \u221e$ K | |
529 | Inf beforeSuffix $$$\u221e $ K | |
530 | Inf afterSuffix $$$\u221e$ K | |
531 | NaN beforePrefix NaN K | |
532 | NaN afterPrefix NaN K | |
533 | NaN beforeSuffix NaN K | |
534 | NaN afterSuffix NaN K | |
535 | ||
f3c0d7a5 | 536 | test apply formerly localized patterns |
2ca993e8 | 537 | begin |
f3c0d7a5 A |
538 | // documentation says localizedPattern is not supported, change to pattern |
539 | locale pattern format output breaks | |
540 | en #0% 0.4376 44% | |
2ca993e8 | 541 | // This next test breaks JDK. JDK doesn't multiply by 100. |
f3c0d7a5 A |
542 | // It also is now broken in ICU4J until #10368 is fixed. |
543 | fa \u0025\u00a0\u0023\u0030 0.4376 \u200e\u066a\u00a0\u06f4\u06f4 JK | |
2ca993e8 A |
544 | |
545 | test toPattern | |
546 | set locale en | |
547 | begin | |
548 | pattern toPattern breaks | |
549 | // JDK doesn't support any patterns with padding or both negative prefix and suffix | |
550 | // Breaks ICU4J See ticket 11671 | |
551 | **0,000 **0,000 JK | |
552 | **##0,000 **##0,000 K | |
553 | **###0,000 **###0,000 K | |
554 | **####0,000 **#,##0,000 K | |
555 | ###,000. #,000. | |
556 | 0,000 #0,000 | |
557 | .00 #.00 | |
558 | 000 #000 | |
559 | 000,000 #,000,000 | |
560 | pp#,000 pp#,000 | |
561 | 00.## #00.## | |
562 | #,#00.025 #,#00.025 | |
563 | // No secondary grouping in JDK | |
564 | #,##,###.02500 #,##,###.02500 K | |
565 | pp#,000;(#) pp#,000;(#,000) K | |
566 | **####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) K | |
567 | // No significant digits in JDK | |
568 | @@### @@### K | |
569 | @,@#,### @,@#,### K | |
570 | 0.00E0 0.00E0 | |
571 | @@@##E0 @@@##E0 K | |
572 | ###0.00#E0 ###0.00#E0 | |
573 | ##00.00#E0 ##00.00#E0 | |
574 | 0.00E+00 0.00E+00 K | |
575 | 000.00E00 000.00E00 | |
576 | ###0.00#E00 ###0.00#E00 | |
577 | ||
578 | test parse | |
579 | set locale en | |
580 | set pattern +#,##0.0###;(#) | |
581 | begin | |
582 | parse output breaks | |
583 | +5,347.25 5347.25 | |
584 | +5,347,.25 5347.25 | |
585 | +5,347, 5347 | |
586 | +5347,,, 5347 | |
587 | +5347,,,d8 5347 | |
588 | (5,347.25) -5347.25 | |
589 | // J requires prefix and suffix for lenient parsing, but C doesn't | |
590 | 5,347.25 5347.25 JK | |
591 | (5,347.25 -5347.25 J | |
592 | -5,347.25 fail | |
593 | +3.52E4 35200 | |
594 | (34.8E-3) -0.0348 | |
595 | // JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator | |
596 | (34 25E-1) -342.5 K | |
597 | (34,,25E-1) -342.5 | |
598 | // J doesn't allow trailing separators before E but C does | |
599 | (34,,25,E-1) -342.5 J | |
600 | (34 25 E-1) -342.5 JK | |
601 | (34,,25 E-1) -3425 J | |
602 | // Spaces are not allowed after exponent symbol | |
603 | // C parses up to the E but J bails | |
604 | (34 25E -1) -3425 JK | |
605 | +3.52EE4 3.52 | |
606 | +1,234,567.8901 1234567.8901 | |
607 | +1,23,4567.8901 1234567.8901 | |
608 | +1,23,4567.89,01 1234567.89 | |
609 | +1,23,456.78.9 123456.78 | |
610 | +12.34,56 12.34 | |
611 | +79,,20,3 79203 | |
612 | +79 20 3 79203 K | |
613 | // Parsing stops at comma as it is different from other separators | |
614 | +79 20,3 7920 K | |
615 | +79,,20 3 7920 | |
616 | + 79 79 K | |
617 | +,79,,20,3 79203 | |
618 | +7920d3 7920 | |
619 | // Whitespace immediately after prefix doesn't count as digit separator | |
620 | // in C but is does in J | |
621 | + ,79,,20,3 79203 JK | |
622 | ( 19 45) -1945 K | |
623 | // C allows trailing separators when there is a prefix and suffix. | |
624 | // J allows trailing separators only when there is just a prefix. | |
625 | // In this case, J just bails | |
626 | ( 19 45 ) -1945 JK | |
627 | (,,19,45) -1945 | |
628 | // C parses to the space, but J bails | |
629 | (,,19 45) -19 J | |
630 | // J bails b/c comma different separator than space. C doesn't treat leading spaces | |
631 | // as a separator. | |
632 | ( 19,45) -1945 JK | |
633 | // J bails. Doesn't allow trailing separators when there is prefix and suffix. | |
634 | (,,19,45,) -1945 J | |
635 | // J bails on next 4 because J doesn't allow letters inside prefix and suffix. | |
636 | // C will parse up to the letter. | |
637 | (,,19,45,d1) -1945 J | |
638 | (,,19,45d1) -1945 J | |
639 | ( 19 45 d1) -1945 JK | |
640 | ( 19 45d1) -1945 JK | |
641 | // J does allow trailing separator before a decimal point | |
642 | (19,45,.25) -1945.25 | |
643 | // 2nd decimal points are ignored | |
644 | +4.12.926 4.12 | |
645 | ||
646 | test parse suffix | |
647 | set locale en | |
648 | set pattern #,##0.0###+;#- | |
649 | begin | |
650 | parse output breaks | |
651 | // C sees this as -3426, don't understand why | |
652 | 3426 -3426 JK | |
653 | 3426+ 3426 | |
654 | // J bails, but JDK will parse up to the space and get 34. | |
655 | // C sees -34 | |
656 | 34 d1+ -34 JK | |
657 | // JDK sees this as -1234 for some reason | |
658 | // J bails b/c of trailing separators | |
659 | // C parses until trailing separators, but sees -1234 | |
660 | 1,234,,,+ -1234 JK | |
661 | 1,234- -1234 | |
662 | // J bails because of trailing separators | |
663 | 1,234,- -1234 J | |
664 | // J bails here too | |
665 | 1234 - -1234 J | |
666 | ||
667 | ||
668 | ||
669 | test parse strict | |
670 | set locale en | |
671 | set pattern +#,##0.0###;(#) | |
672 | set lenient 0 | |
673 | begin | |
674 | parse output breaks | |
675 | +123d5 123 | |
676 | +5347.25 5347.25 | |
677 | // separators in wrong place cause failure, no separators ok. | |
678 | +5,347.25 5347.25 | |
679 | (5347.25) -5347.25 | |
680 | (5,347.25) -5347.25 | |
681 | // JDK does allow separators in the wrong place and parses as -5347.25 | |
682 | (53,47.25) fail K | |
683 | // strict requires prefix or suffix | |
684 | 5,347.25 fail | |
685 | +3.52E4 35200 | |
686 | (34.8E-3) -0.0348 | |
687 | (3425E-1) -342.5 | |
688 | // Strict doesn't allow separators in sci notation. | |
689 | (3,425) -3425 | |
690 | // JDK allows separators in sci notation and parses as -342.5 | |
691 | (3,425E-1) fail K | |
692 | // Both prefix and suffix needed for strict. | |
693 | // JDK accepts this and parses as -342.5 | |
694 | (3425E-1 fail K | |
695 | +3.52EE4 3.52 | |
696 | +1,234,567.8901 1234567.8901 | |
697 | // With strict digit separators don't have to be the right type | |
698 | // JDK doesn't acknowledge space as a separator | |
699 | +1 234 567.8901 1234567.8901 K | |
700 | // In general the grouping separators have to match their expected | |
701 | // location exactly. The only exception is when string being parsed | |
702 | // have no separators at all. | |
703 | +1,234,567.8901 1234567.8901 | |
704 | // JDK doesn't require separators to be in the right place | |
705 | +1,23,4567.8901 fail K | |
706 | +1234,567.8901 fail K | |
707 | +1,234567.8901 fail K | |
708 | +1234567.8901 1234567.8901 | |
709 | // Comma after decimal means parse to a comma | |
710 | +123,456.78,9 123456.78 | |
711 | // A decimal after a decimal means bail | |
712 | // JDK parses as 123456.78 | |
713 | +123,456.78.9 fail K | |
714 | +79 79 | |
715 | +79 79 | |
716 | + 79 fail | |
717 | // JDK parses as -1945 | |
718 | (1,945d1) fail K | |
719 | ||
720 | test parse integer only | |
721 | set locale en | |
722 | set pattern 0.00 | |
723 | set parseIntegerOnly 1 | |
724 | begin | |
725 | parse output breaks | |
726 | 35 35 | |
727 | +35 fail | |
728 | -35 -35 | |
729 | 2.63 2 | |
730 | -39.99 -39 | |
731 | ||
732 | test parse no exponent flag | |
733 | set pattern 0 | |
734 | set locale en | |
735 | begin | |
736 | parseNoExponent parse output breaks | |
737 | // JDK doesn't allow lowercase exponent but ICU4J and ICU4C do. | |
738 | 0 5e2 500 K | |
739 | 0 5.3E2 530 | |
740 | // See ticket 11725 | |
741 | 1 5e2 5 J | |
742 | 1 5.3E2 5.3 JK | |
743 | ||
744 | test parse currency fail | |
745 | set pattern 0 | |
746 | set locale en | |
747 | begin | |
748 | parse output outputCurrency breaks | |
749 | // See ticket 11735 | |
750 | 53.45 fail USD J | |
751 | ||
752 | test parse strange prefix | |
753 | set locale en | |
754 | set positivePrefix dd | |
755 | set negativePrefix ddd | |
756 | begin | |
757 | parse output | |
758 | dd4582 4582 | |
759 | ddd4582 -4582 | |
760 | ||
761 | test parse strange suffix | |
762 | set locale en | |
763 | set positiveSuffix dd | |
764 | set negativePrefix | |
765 | set negativeSuffix ddd | |
766 | begin | |
767 | parse output | |
768 | 4582dd 4582 | |
769 | 4582ddd -4582 | |
770 | ||
771 | test really strange suffix | |
772 | set locale en | |
773 | set positiveSuffix 9K | |
774 | set negativePrefix | |
775 | set negativeSuffix 9N | |
776 | begin | |
777 | parse output breaks | |
778 | // C consumes the '9' as a digit and assumes number is negative | |
779 | // J and JDK bail | |
780 | // 6549K 654 CJK | |
781 | // C consumes the '9' as a digit and assumes number is negative | |
782 | // J and JDK bail | |
783 | // 6549N -654 CJK | |
784 | ||
785 | test really strange prefix | |
786 | set locale en | |
787 | set positivePrefix 82 | |
788 | set negativePrefix 28 | |
789 | begin | |
790 | parse output | |
791 | 8245 45 | |
792 | 2845 -45 | |
793 | ||
794 | test select | |
795 | set locale sr | |
796 | begin | |
797 | format pattern plural | |
798 | Inf 0 other | |
799 | -Inf 0 other | |
800 | NaN 0 other | |
801 | Inf 0.0 other | |
802 | -Inf 0.0 other | |
803 | NaN 0.0 other | |
804 | 1 0 one | |
805 | 1 0.0 other | |
806 | 2 0 few | |
807 | 2 0.0 other | |
808 | 2 0E0 other | |
809 | 5.1 0.0 one | |
810 | 5.09 0.0 one | |
811 | ||
812 | test parse currency ISO | |
813 | set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 | |
814 | set locale en_US | |
815 | begin | |
816 | parse output outputCurrency breaks | |
817 | $53.45 53.45 USD | |
818 | 53.45 USD 53.45 USD | |
819 | USD 53.45 53.45 USD J | |
820 | 53.45USD fail USD | |
821 | USD53.45 53.45 USD | |
822 | (7.92) USD -7.92 USD | |
823 | (7.92) EUR -7.92 EUR | |
824 | (7.926) USD -7.926 USD | |
825 | (7.926 USD) fail USD | |
826 | (USD 7.926) fail USD | |
827 | USD (7.926) fail USD | |
828 | USD (7.92) fail USD | |
829 | (7.92)USD fail USD | |
830 | USD(7.92) fail USD | |
831 | (8) USD -8 USD | |
832 | -8 USD fail USD | |
833 | 67 USD 67 USD | |
834 | 53.45$ fail USD | |
835 | US Dollars 53.45 53.45 USD J | |
836 | 53.45 US Dollars 53.45 USD | |
837 | US Dollar 53.45 53.45 USD J | |
838 | 53.45 US Dollar 53.45 USD | |
839 | US Dollars53.45 53.45 USD | |
840 | 53.45US Dollars fail USD | |
841 | US Dollar53.45 53.45 USD | |
842 | US Dollat53.45 fail USD | |
843 | 53.45US Dollar fail USD | |
844 | US Dollars (53.45) fail USD | |
845 | (53.45) US Dollars -53.45 USD | |
846 | US Dollar (53.45) fail USD | |
847 | (53.45) US Dollar -53.45 USD | |
848 | US Dollars(53.45) fail USD | |
849 | (53.45)US Dollars fail USD | |
850 | US Dollar(53.45) fail USD | |
851 | US Dollat(53.45) fail USD | |
852 | (53.45)US Dollar fail USD | |
853 | ||
854 | ||
855 | test parse currency ISO negative | |
856 | set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4 | |
857 | set locale en_US | |
858 | begin | |
859 | parse output outputCurrency breaks | |
860 | $53.45 53.45 USD | |
861 | 53.45 USD 53.45 USD | |
862 | USD 53.45 53.45 USD J | |
863 | 53.45USD fail USD | |
864 | USD53.45 53.45 USD | |
865 | -7.92 USD -7.92 USD | |
866 | -7.92 EUR -7.92 EUR | |
867 | -7.926 USD -7.926 USD | |
868 | USD -7.926 fail USD | |
869 | -7.92USD fail USD | |
870 | USD-7.92 fail USD | |
871 | -8 USD -8 USD | |
872 | 67 USD 67 USD | |
873 | 53.45$ fail USD | |
874 | US Dollars 53.45 53.45 USD J | |
875 | 53.45 US Dollars 53.45 USD | |
876 | US Dollar 53.45 53.45 USD J | |
877 | 53.45 US Dollar 53.45 USD | |
878 | US Dollars53.45 53.45 USD | |
879 | 53.45US Dollars fail USD | |
880 | US Dollar53.45 53.45 USD | |
881 | US Dollat53.45 fail USD | |
882 | 53.45US Dollar fail USD | |
883 | ||
884 | ||
885 | test parse currency long | |
886 | set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4 | |
887 | set locale en_US | |
888 | begin | |
889 | parse output outputCurrency breaks | |
890 | $53.45 53.45 USD | |
891 | 53.45 USD 53.45 USD | |
892 | USD 53.45 53.45 USD J | |
893 | // See ticket 11735 | |
894 | 53.45USD fail USD J | |
895 | USD53.45 53.45 USD | |
896 | (7.92) USD -7.92 USD | |
897 | (7.926) USD -7.926 USD | |
898 | (7.926 USD) fail USD | |
899 | (USD 7.926) fail USD | |
900 | USD (7.926) fail USD | |
901 | USD (7.92) fail USD | |
902 | (7.92)USD fail USD | |
903 | USD(7.92) fail USD | |
904 | (8) USD -8 USD | |
905 | // See ticket 11735 | |
906 | -8 USD fail USD J | |
907 | 67 USD 67 USD | |
908 | // See ticket 11735 | |
909 | 53.45$ fail USD J | |
910 | US Dollars 53.45 53.45 USD J | |
911 | 53.45 US Dollars 53.45 USD | |
912 | US Dollar 53.45 53.45 USD J | |
913 | 53.45 US Dollar 53.45 USD | |
914 | US Dollars53.45 53.45 USD | |
915 | // See ticket 11735 | |
916 | 53.45US Dollars fail USD J | |
917 | US Dollar53.45 53.45 USD | |
918 | US Dollat53.45 fail USD | |
919 | // See ticket 11735 | |
920 | 53.45US Dollar fail USD J | |
921 | ||
922 | ||
923 | test parse currency short | |
924 | set pattern 0.00 \u00a4;(#) \u00a4 | |
925 | set locale en_US | |
926 | begin | |
927 | parse output outputCurrency breaks | |
928 | $53.45 53.45 USD | |
929 | 53.45 USD 53.45 USD | |
930 | USD 53.45 53.45 USD J | |
931 | 53.45USD fail USD | |
932 | USD53.45 53.45 USD | |
933 | (7.92) USD -7.92 USD | |
934 | (7.926) USD -7.926 USD | |
935 | (7.926 USD) fail USD | |
936 | (USD 7.926) fail USD | |
937 | USD (7.926) fail USD | |
938 | USD (7.92) fail USD | |
939 | (7.92)USD fail USD | |
940 | USD(7.92) fail USD | |
941 | (8) USD -8 USD | |
942 | -8 USD fail USD | |
943 | 67 USD 67 USD | |
944 | 53.45$ fail USD | |
945 | US Dollars 53.45 53.45 USD J | |
946 | 53.45 US Dollars 53.45 USD | |
947 | US Dollar 53.45 53.45 USD J | |
948 | 53.45 US Dollar 53.45 USD | |
949 | US Dollars53.45 53.45 USD | |
950 | 53.45US Dollars fail USD | |
951 | US Dollar53.45 53.45 USD | |
952 | US Dollat53.45 fail USD | |
953 | 53.45US Dollar fail USD | |
954 | ||
955 | ||
956 | test parse currency short prefix | |
957 | set pattern \u00a40.00;(\u00a4#) | |
958 | set locale en_US | |
959 | begin | |
960 | parse output outputCurrency breaks | |
961 | $53.45 53.45 USD | |
962 | 53.45 USD fail USD | |
963 | USD 53.45 53.45 USD J | |
964 | 53.45USD fail USD | |
965 | USD53.45 53.45 USD | |
966 | (7.92) USD fail USD | |
967 | (7.926) USD fail USD | |
968 | (7.926 USD) fail USD | |
969 | (USD 7.926) -7.926 USD J | |
970 | USD (7.926) fail USD | |
971 | USD (7.92) fail USD | |
972 | (7.92)USD fail USD | |
973 | USD(7.92) fail USD | |
974 | (8) USD fail USD | |
975 | -8 USD fail USD | |
976 | 67 USD fail USD | |
977 | 53.45$ fail USD | |
978 | US Dollars 53.45 53.45 USD J | |
979 | 53.45 US Dollars 53.45 USD | |
980 | US Dollar 53.45 53.45 USD J | |
981 | 53.45 US Dollar 53.45 USD | |
982 | US Dollars53.45 53.45 USD | |
983 | 53.45US Dollars fail USD | |
984 | US Dollar53.45 53.45 USD | |
985 | 53.45US Dollar fail USD | |
986 | ||
987 | test format foreign currency | |
988 | set locale fa_IR | |
989 | begin | |
990 | pattern format output breaks | |
991 | \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 # 1235 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 K | |
992 | \u00a4\u00a4 0.00;\u00a4\u00a4 -# 1235 IRR \u06F1\u06F2\u06F3\u06F5 K | |
993 | \u00a4 0.00;\u00a4 -# 1235 \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 K | |
994 | ||
995 | test parse foreign currency symbol | |
996 | set pattern \u00a4 0.00;\u00a4 -# | |
997 | set locale fa_IR | |
998 | begin | |
999 | parse output outputCurrency | |
1000 | \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1001 | IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1002 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1003 | IRR 1235 1235 IRR | |
1004 | \u0631\u06cc\u0627\u0644 1235 1235 IRR | |
1005 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR | |
1006 | ||
1007 | test parse foreign currency ISO | |
1008 | set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -# | |
1009 | set locale fa_IR | |
1010 | begin | |
1011 | parse output outputCurrency | |
1012 | \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1013 | IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1014 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1015 | IRR 1235 1235 IRR | |
1016 | \u0631\u06cc\u0627\u0644 1235 1235 IRR | |
1017 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR | |
1018 | ||
1019 | test parse foreign currency full | |
1020 | set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -# | |
1021 | set locale fa_IR | |
1022 | begin | |
1023 | parse output outputCurrency | |
1024 | \u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1025 | IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1026 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR | |
1027 | IRR 1235 1235 IRR | |
1028 | \u0631\u06cc\u0627\u0644 1235 1235 IRR | |
1029 | \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR | |
1030 | ||
1031 | test parse currency with foreign symbols symbol english | |
1032 | set pattern \u00a4 0.00;\u00a4 (#) | |
1033 | set locale en_US | |
1034 | begin | |
1035 | parse output outputCurrency | |
1036 | EUR 7.82 7.82 EUR | |
1037 | \u20ac 7.82 7.82 EUR | |
1038 | Euro 7.82 7.82 EUR | |
1039 | Euros 7.82 7.82 EUR | |
1040 | ||
1041 | test parse currency with foreign symbols ISO english | |
1042 | set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#) | |
1043 | set locale en_US | |
1044 | begin | |
1045 | parse output outputCurrency | |
1046 | EUR 7.82 7.82 EUR | |
1047 | \u20ac 7.82 7.82 EUR | |
1048 | Euro 7.82 7.82 EUR | |
1049 | Euros 7.82 7.82 EUR | |
1050 | ||
1051 | test parse currency with foreign symbols full english | |
1052 | set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#) | |
1053 | set locale en_US | |
1054 | begin | |
1055 | parse output outputCurrency | |
1056 | EUR 7.82 7.82 EUR | |
1057 | \u20ac 7.82 7.82 EUR | |
1058 | Euro 7.82 7.82 EUR | |
1059 | Euros 7.82 7.82 EUR | |
1060 | ||
1061 | test parse currency ISO strict | |
1062 | set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 | |
1063 | set locale en_US | |
1064 | set lenient 0 | |
1065 | begin | |
1066 | parse output outputCurrency breaks | |
1067 | $53.45 53.45 USD | |
1068 | 53.45 USD 53.45 USD | |
1069 | USD 53.45 fail USD | |
1070 | 53.45USD fail USD | |
1071 | USD53.45 53.45 USD | |
1072 | (7.92) USD -7.92 USD | |
1073 | (7.92) EUR -7.92 EUR | |
1074 | (7.926) USD -7.926 USD | |
1075 | (7.926 USD) fail USD | |
1076 | (USD 7.926) fail USD | |
1077 | USD (7.926) fail USD | |
1078 | USD (7.92) fail USD | |
1079 | (7.92)USD fail USD | |
1080 | USD(7.92) fail USD | |
1081 | (8) USD -8 USD | |
1082 | -8 USD fail USD | |
1083 | 67 USD 67 USD | |
1084 | 53.45$ fail USD | |
1085 | US Dollars 53.45 fail USD | |
1086 | 53.45 US Dollars 53.45 USD | |
1087 | US Dollar 53.45 fail USD | |
1088 | 53.45 US Dollar 53.45 USD | |
1089 | US Dollars53.45 53.45 USD | |
1090 | 53.45US Dollars fail USD | |
1091 | US Dollar53.45 53.45 USD | |
1092 | US Dollat53.45 fail USD | |
1093 | 53.45US Dollar fail USD | |
1094 | US Dollars (53.45) fail USD | |
1095 | (53.45) US Dollars -53.45 USD | |
1096 | US Dollar (53.45) fail USD | |
1097 | (53.45) US Dollar -53.45 USD | |
1098 | US Dollars(53.45) fail USD | |
1099 | (53.45)US Dollars fail USD | |
1100 | US Dollar(53.45) fail USD | |
1101 | US Dollat(53.45) fail USD | |
1102 | (53.45)US Dollar fail USD | |
1103 | ||
1104 | test ticket 10436 | |
1105 | set locale en | |
1106 | set roundingMode ceiling | |
1107 | set minFractionDigits 0 | |
1108 | set maxFractionDigits 0 | |
1109 | begin | |
1110 | format output breaks | |
1111 | -0.99 -0 JK | |
1112 |