• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
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//
12// Field names:
13//  J = ICU4J (current)
14//  K = JDK (ignored if not OpenJDK 1.8)
15//  C = ICU4C (current)
16//  P = Properties-based ICU4J (bypasses DecimalFormat wrapper)
17//
18// For more information on the format of this file, including all the available
19// field names, please see
20// https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
21
22test plus sign
23set locale ar-EG
24set pattern +0;-#
25begin
26format	output	breaks
276	\u061C+\u0666	K
28-6	\u061C-\u0666	K
29
30test basic patterns
31set locale fr_FR
32set format 1234.567
33begin
34pattern	output	breaks
35// K does not use \u202f narrow space
36#,##0.##	1\u202f234,57	K
370.##	1234,57
380	1235
39#,##0.###	1\u202f234,567	K
40###0.######	1234,567
41###0.0000#	1234,5670
4200000.0000	01234,5670
43#,##0.00 \u00a4	1\u202f234,57 \u20ac	K
44'tick''bitten '0.00	tick'bitten 1234,57
45'tick' 'bitten '0.00	tick bitten 1234,57
46
47
48test minimum and maximum fraction digits
49set locale en
50set minIntegerDigits 2
51set maxIntegerDigits 4
52set minFractionDigits 3
53set maxFractionDigits 5
54begin
55format	output
566	06.000
576.000005	06.000
586.000006	06.00001
591002003004005	4005.000
60-1002003004005	-4005.000
6112	12.000
6212345	2345.000
6372.1234	72.1234
64
65test patterns with no '0' symbols
66set locale en_US
67begin
68pattern	format	output	breaks
69#	514.23	514
70#	0.23	0
71#	0	0
72#	1	1
73##.#	514.23	514.2
74##.#	0.23	0.2
75##.#	0	0
76##.#	1	1
77#.#	514.23	514.2
78#.#	0.23	0.2
79#.#	0	0
80#.#	1	1
81.#	514.23	514.2
82.#	0.23	.2
83.#	0	.0
84.#	1	1.0
85#.	514.23	514.
86#.	0.23	0.
87#.	0	0.
88#.	1	1.
89.	514.23	514.
90.	0.23	0.
91.	0	0.
92.	1	1.
93
94test behavior on numbers approaching zero
95set locale en
96begin
97pattern	format	output	breaks
98#.##	0.01	0.01
99#.##	0.001	0
100#.##	0	0
101#.00	0.01	.01
102#.00	0.001	.00
103#.00	0	.00
1040.00	0.01	0.01
1050.00	0.001	0.00
1060.00	0	0.00
107
108// Not in official spec, but needed for backwards compatibility
109test patterns with leading grouping separator
110set locale en_US
111begin
112pattern	format	output	breaks
113,##0	1234.56	1,235
114'#',##	3456	#34,56
115
116test patterns with valid and invalid quote marks
117set locale et
118begin
119pattern	format	output	breaks
120'#	1	fail
121''#	1	'1
122'''#	1	fail
123''''#	1	''1
124'''''#	1	fail
125'-''-'#	1	-'-1
126-'-'#	1	−-1
127'#'#	1	#1
128''#''	1	'1'
129''#-	1	'1−
130'-'#-	1	-1−
131-#'-'	1	−1-
132
133test int64
134set locale en
135begin
136format	output
1371002003004005	1002003004005
138-1002003004005	-1002003004005
139
140test rounding
141set locale fr
142begin
143pattern	format	output	breaks
1440.5	1.25	1,0	K
1450.5	1.75	2,0	K
1460.5	-1.25	-1,0	K
14700.5	-1.75	-02,0	K
1484	2.0	0	K
1494	6.0	8	K
1504	10.0	8	K
1512.70	99.0	99,90	K
1522.73	272.0	273,00	K
153#,#3.70	104.0	1\u202f03,60	K
154
155test significant digits
156set locale en
157set pattern #,#@,@###
158begin
159format	output	breaks
1607	7.0	K
16123	23	K
162100	100	K
1631000	1000	K
16410000	1,0000	K
16510001	1,0001	K
16610001.5	1,0002	K
1671234567	1,23,4600	K
168-1234567	-1,23,4600	K
1693.14159	3.1416	K
170
171test scientific notation
172set locale fr
173begin
174pattern	format	output	breaks
1750.00E0	12345	1,23E4
176000.00E0	12300	123,00E2
177000.0#E0	12300	123,0E2
178000.0#E0	12300.1	123,0E2
179000.0#E0	12301.0	123,01E2
180// JDK does not support exponent signs
181000.0#E+00	12301.0	123,01E+02	K
182// JDK gives 12,345E3. JDK seems to include the hashes in significant digits
183##0.00E0	12345	12,3E3	K
184// JDK gives 12,3001E3
185##0.0000E0	12300.1	12,300E3	K
186// JDK gives 12,3001E3
187##0.000#E0	12300.1	12,30E3	K
188##0.000#E0	12301	12,301E3
1890.05E0	12301.2	1,25E4	K
190##0.000#E0	0.17	170,0E-3
191// JDK doesn't support significant digits in exponents
192@@@E0	6.235	6,24E0	K
193@@@E0	6235	6,24E3	K
194@@@#E0	6200	6,20E3	K
195@@@#E0	6201	6,201E3	K
196@@@#E0	6201.7	6,202E3	K
197@@@#E00	6201.7	6,202E03	K
198@@@#E+00	6201.7	6,202E+03	K
199// If no zeros are specified, significant digits is fraction length plus 1
200#.##E0	52413	5,24E4
201###.##E0	52413	52,4E3	K
202#E0	52413	5,2413E4	K
2030E0	52413	5E4
204
205test scientific infinite precision
206// ICU-11511, ICU-7460, CLDR-10103
207set locale en
208begin
209pattern	format	output	breaks
210// From the spec:
211// "0.##E0 means a max of 3 significant digits."
2120.##E0	98760	9.88E4
213// "#.##E0 also means a max of 3 significant digits."
214#.##E0	98760	9.88E4
215// "#.0#E0 means a max of 2 significant digits."
216#.0#E0	98760	9.9E4	K
217// "0E0 means a max of 1 significant digit."
2180E0	98760	1E5
219// "#E0 means infinite precision."
220#E0	98760	9.876E4	K
221// "###E0 means engineering notation with infinite precision."
222###E0	98760	98.76E3	K
223// Additional tests:
224##0.#E0	98760	99E3	K
225###.#E0	98760	99E3	K
226##0E0	98760	100E3	K
227
228test percents
229set locale fr
230begin
231pattern	format	output	breaks
2320.0%	0.573	57,3%
233%0.0	0.573	%57,3
234p%p0.0	0.573	p%p57,3
235p'%'p0.0	0.573	p%p0,6
236%@@@@	0.0326	%3,260	K
237%#,@@@	15.43	%1\u202f540	K
238// JDK does not support rounding increments
239%#,##4.1	16.55	%1\u202f656,4	K
240// JDK gives %16,255E3
241%##0.00E0	162.55	%16,3E3	K
242
243test permille
244set locale fr
245begin
246pattern	format	output	breaks
2470.0\u2030	0.573	573,0‰
248\u20300.0	0.573	\u2030573,0
249p\u2030p0.0	0.573	p\u2030p573,0
250p'\u2030'p0.0	0.573	p\u2030p0,6
251\u2030@@@@	0.0326	\u203032,60	K
252\u2030#,@@@	15.43	\u203015\u202f400	K
253\u2030#,##4.1	16.55	\u203016\u202f551,7	K
254// JDK gives \u2030162,55E3
255\u2030##0.00E0	162.55	\u2030163E3	K
256
257test padding
258set locale fr_FR
259begin
260pattern	format	output	breaks
261// JDK does not seem to support padding
262$**####,##0	1234	$***1\u202f234	K
263*x$####,##0	1234	xxx$1\u202f234	K
264####,##0*x$	1234	1\u202f234xxx$	K
265####,##0$*x	1234	1\u202f234$xxx	K
266// JDK doesn't seem to handle suffixes correctly dropping the 'nx' entirely
267####,##0$*x;ne#n	-1234	ne1\u202f234nx	K
268####,##0$*x;n#'*'	-1234	n1\u202f234*xx	K
269*y%4.2######	4.33	yyyy%432,6	K
270// In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4)
271\u00a4\u00a4 **####0.00	433.0	EUR *433,00	K
272// P fails this one because the test code bypasses CurrencyUsage
273\u00a4\u00a4 **#######0	433.0	EUR *433,00	KP
274
275test padding and currencies
276begin
277locale	currency	pattern	format	output	breaks
278// In J, JPY is considered 2 char (2 * 0xa4) even though padding is done
279// after prefix. In C this test works.
280fr	JPY	\u00a4\u00a4 **#######0	433.22	JPY ****433	K
281// JDK doesn't correct rounding for currency, shows USD (433
282en	USD	\u00a4\u00a4 **#######0;\u00a4\u00a4 (#)	-433.22	USD (433.22)	K
283
284test currencies
285set locale fr
286set format 1234.567
287begin
288pattern	currency	output	breaks
289// JDK gives shows EUR instead of the euro symbol in this case
290#,##0.00 \u00a4	EUR	1\u202f234,57 \u20ac	K
291// JDK gives 1\u00A0234,57. JDK doesn't seem to correct rounding
292// based on currency.
293#,##0.00 \u00a4	JPY	1\u202f235 JPY	K
294
295test prefixes and suffixes
296set locale en
297set pattern 0.00+;(#)
298begin
299format	output	breaks
3007	7.00+
301-3.5	(3.50)
302
303test minimum grouping digits
304set locale en
305set pattern #,##0
306set minGroupingDigits 2
307begin
308format	output	breaks
3091000	1000	K
31010000	10,000
311100000	100,000
3121000000	1,000,000
313
314test min max fraction digits
315set locale en
316set pattern #,##0.###
317set format 1234.567
318begin
319minFractionDigits	maxFractionDigits	output
3200	0	1,235
3210	2	1,234.57
3224	5	1,234.5670
323
324test min max integer digits
325set locale en
326set pattern #,##0.###
327set format 1234.567
328begin
329minIntegerDigits	maxIntegerDigits	output
3300	0	.567
3310	3	234.567
3325	5	01,234.567
333
334test min max fraction digits scientific
335set locale en
336set pattern #E0
337set format 299792458.0
338begin
339minIntegerDigits	maxIntegerDigits	minFractionDigits	maxFractionDigits	output	breaks
340// JDK gives 2.99792458E8 (maxInt + maxFrac instead of minInt + maxFrac)
3411	99	0	5	2.99792E8	K
342// JDK gives .3E9 instead of unlimited precision.
3430	1	0	0	2.99792458E8	K
3441	1	0	0	3E8
345// JDK gives E0 instead of allowing for unlimited precision
3460	0	0	0	2.99792458E8	K
347// J gives 2.9979E8
3480	1	0	5	2.99792E8	K
349// JDK gives 300E6
3500	3	0	0	299.792458E6	K
351// JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)?
3520	3	0	1	300E6	K
353// JDK gives 299.7925E6
3542	3	0	4	299.792E6	K
355// JDK gives 299.79246E6
3562	3	0	5	299.7925E6	K
3573	3	0	5	299.79246E6
3583	3	0	4	299.7925E6
3592	2	0	3	29.979E7
3604	4	0	0	2998E5
3610	0	1	5	.29979E9
362// JDK gives E0
3630	0	1	0	2.99792458E8	K
364// J gives 2.998E8
3650	0	0	4	.29979E9	K
366// According to the spec, if maxInt>minInt and minInt>1, then set
367// Context: #13289
3682	8	1	6	2.9979246E8	K
369// Treat max int digits > 8 as being the same as min int digits.
370// This behavior is not spelled out in the specification.
371// JDK fails here because it tries to use 9 + 6 = 15 sig digits.
3722	9	1	6	29.979246E7	K
373
374test ticket 20058
375set locale en
376begin
377pattern	format	output	breaks
378#00.0##E0	0	0.0E0	K
379#00.0##E0	1.2	1.2E0	K
380#00.0E0	0	0.0E0	K
381#00.0E0	1.2	1.2E0	K
382
383test significant digits scientific
384set locale en
385set pattern #E0
386set format 290000000.0
387begin
388minSigDigits	maxSigDigits	output	breaks
3890	1	3E8	K
3900	2	2.9E8	K
3910	3	2.9E8	K
3921	1	3E8	K
3931	2	2.9E8	K
3941	3	2.9E8	K
3952	2	2.9E8	K
3962	3	2.9E8	K
3973	3	2.90E8	K
3983	4	2.90E8	K
399
400test min max fraction digits scientific 2
401set locale en
402set pattern #E0
403set format 29979245.0
404begin
405minIntegerDigits	maxIntegerDigits	minFractionDigits	maxFractionDigits	output	breaks
406// JDK gives E0
4070	0	0	0	2.9979245E7	K
408// JDK gives .3E8
4090	1	0	0	2.9979245E7	K
410// JDK gives 2998E4.
4110	4	0	0	2997.9245E4	K
412
413test ticket 11524
414set locale en
415set pattern #,##0.###
416begin
417format	maxIntegerDigits	output	breaks
418123	1	3
419// C obeys maxIntegerDigits and prints after the decimal place
4200	0	.0	KP
421// CJP ignore max integer if it is less than zero and prints "123"
422123	-2147483648	0	CJP
42312345	1	5
42412345	-2147483648	0	CJP
4255.3	1	5.3
4265.3	-2147483648	.3	CJP
427
428test patterns with zero
429set locale en
430set format 0
431begin
432pattern	output	breaks
433#.#	0
434#.	0.
435.#	.0
436#	0
437#,##0.00	0.00
438#,###.00	.00
43900.000E00	00.000E00
4400.####E0	0E0
441##0.######E000	0E000
442
443test significant digits manually set
444set locale en_US
445set pattern 0.0
446set useSigDigits 1
447set minSigDigits 3
448set maxSigDigits 5
449begin
450format	output	breaks
4510.0012	0.00120	K
4520.00123	0.00123	K
4530.001234	0.001234	K
4540.0012345	0.0012345	K
4550.00123456	0.0012346	K
456-43	-43.0
457-43.7	-43.7
458-43.76	-43.76	K
459-43.762	-43.762	K
460-43.7626	-43.763	K
461
462test grouping used setters
463set locale en_US
464set pattern #,##0
465set format 12345
466begin
467output	useGrouping
46812,345
46912,345	1
47012345	0
471
472test grouping used setters in parsing
473set pattern #,##0
474begin
475locale	useGrouping	parse	output	breaks
476en_US	1	123,456	123456
477en_US	0	123,456	123
478en_US	1	123.456	123.456
479en_US	0	123.456	123.456
480it_IT	1	123,456	123.456
481it_IT	0	123,456	123.456
482it_IT	1	123.456	123456
483it_IT	0	123.456	123
484
485test no grouping in pattern with parsing
486set pattern 0
487begin
488locale	parse	output	breaks
489en_US	123,456	123
490en_US	123.456	123.456
491fr_FR	123,456	123.456
492fr_FR	123.456	123
493
494test grouping setters
495set locale en_US
496set pattern 0
497set format 123456789
498set useGrouping 1
499begin
500output	grouping	grouping2	breaks
5011,2345,6789	4
5021,23,45,6789	4	2	K
503
504test grouping setters with min grouping digits
505set locale en_US
506set pattern 0
507set format 123456789
508set useGrouping 1
509begin
510output	grouping	grouping2	minGroupingDigits	breaks
5111,23,45,6789	4	2	2	K
512123,456789	6	6	3
513123456789	6	6	4	K
514
515test multiplier setters
516set locale en_US
517begin
518format	multiplier	output	breaks
51923	-12	-276
52023	-1	-23
521// J (current ICU4J) throws exception on zero multiplier.
522// ICU4C prints 23.
523// Q multiplies by zero and prints 0.
52423	0	0	CJ
52523	1	23
52623	12	276
527-23	12	-276
528-23	-12	276
529
530test rounding setters
531set locale en_US
532set pattern 0.0#
533set roundingIncrement 0.25
534begin
535format	output	breaks
536-0.35	-0.25	K
5370.35	0.25	K
538// P doesn't support mixing minFrac with roundingIncrement (prints 0.50).
5390.39	0.5	JKP
5400.62	0.5	JKP
5410.63	0.75	K
542
543test padding setters
544set locale en_US
545set pattern bill0
546set format 1357
547begin
548padCharacter	formatWidth	output	breaks
549*	8	bill1357
550*	9	*bill1357	K
551^	10	^^bill1357	K
552
553test use scientific setter
554set locale en_US
555set pattern 0.00
556set format 186283
557begin
558output	useScientific	breaks
559186283.00
5601.86E5	1	K
561186283.00	0
562
563test rounding mode setters
564set locale en_US
565set pattern 0.5
566begin
567format	roundingMode	output	breaks
5681.24	halfUp	1.0	K
5691.25	halfUp	1.5
5701.25	halfDown	1.0	K
5711.26	halfDown	1.5
5721.25	halfEven	1.0	K
573-1.01	up	-1.5
574-1.49	down	-1.0	K
5751.01	up	1.5
5761.49	down	1.0	K
577-1.01	ceiling	-1.0	K
578-1.49	floor	-1.5
579
580test currency usage setters
581set locale CH
582set pattern \u00a4\u00a4 0
583begin
584format	currency	currencyUsage	output	breaks
5850.37	CHF	standard	CHF 0.37	K
5860.37	CHF	cash	CHF 0.35	K
5871.234	CZK	standard	CZK 1.23	K
5881.234	CZK	cash	CZK 1
589
590test currency usage to pattern
591set locale en
592begin
593currency	currencyUsage	toPattern	breaks
594// These work in J, but it prepends an extra hash sign to the pattern.
595// K does not support this feature.
596USD	standard	0.00	K
597CHF	standard	0.00	K
598CZK	standard	0.00	K
599USD	cash	0.00	K
600CHF	cash	0.05	K
601CZK	cash	0	K
602
603test currency rounding
604set locale en
605set currency USD
606begin
607pattern	format	output	breaks
608#	123	123	P
609// Currency rounding should always override the pattern.
610// K prints the currency in ISO format for some reason.
611\u00a4#	123	$123.00	K
612\u00a4#.000	123	$123.00	K
613\u00a4#.##	123	$123.00	K
614
615test exponent parameter setters
616set locale en_US
617set pattern 0.##E0
618set format 299792458
619begin
620decimalSeparatorAlwaysShown	exponentSignAlwaysShown	minimumExponentDigits	output	breaks
6210	0	2	3E08	K
6220	1	3	3E+008	K
623// decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J
624// See ticket 11621
6251	0	2	3.E08	K
6261	1	3	3.E+008	K
6271	0	1	3.E8
6280	0	1	3E8
629
630test exponent decimalSeparatorAlwaysShown default
631set locale en_US
632set pattern 0.##E0
633begin
634format	output	decimalSeparatorAlwaysShown	breaks
635// decimalSeparatorAlwaysShown off by default
636299792458	3E8
637299000000	2.99E8
638299792458	3.E8	1
639
640test pad position setters
641set locale en_US
642set pattern **[#####0.##];((#))
643begin
644format	padPosition	output	breaks
64512.34	beforePrefix	****[12.34]	K
64612.34	afterPrefix	[****12.34]	K
64712.34	beforeSuffix	[12.34****]	K
64812.34	afterSuffix	[12.34]****	K
649-12.34	beforePrefix	**((12.34))	K
650-12.34	afterPrefix	((**12.34))	K
651-12.34	beforeSuffix	((12.34**))	K
652-12.34	afterSuffix	((12.34))**	K
653
654test affix setters
655set locale fr_FR
656set currency EUR
657set pattern 0.00
658begin
659format	positivePrefix	positiveSuffix	negativePrefix	negativeSuffix	output
66012.34	%				%12,34
66112.34		\u00a4\u00a4			12,34\u00a4\u00a4
66212.34			-	+	12,34
663-12.34			-	+	-12,34+
664-12.34			\u00a4		\u00a412,34
66512.34			\u00a4		12,34
666-12.34				%	12,34%
66712.34				%	12,34
668
669test more affix setters
670set locale fr_FR
671set pattern %0.00
672begin
673format	positivePrefix	negativePrefix	output
6740.648	booya	cooya	booya64,80
675
676test nan and infinity
677set locale en_US
678set pattern [0.00];(#)
679begin
680format	output	breaks
681Inf	[\u221e]
682-Inf	(\u221e)
683// J does not print the affixes
684// K prints \uFFFD
685NaN	[NaN]	K
686
687test nan and infinity with multiplication
688set locale en
689set multiplier 100
690begin
691format	output	breaks
692Inf	\u221e
693-Inf	-\u221e
694NaN	NaN
695
696test nan and infinity with padding
697set locale en_US
698set pattern $$$0.00$
699set formatWidth 8
700begin
701format	padPosition	output	breaks
702Inf	beforePrefix	   $$$\u221e$	K
703Inf	afterPrefix	$$$   \u221e$	K
704Inf	beforeSuffix	$$$\u221e   $	K
705Inf	afterSuffix	$$$\u221e$   	K
706// J does not print the affixes
707// K prints \uFFFD
708NaN	beforePrefix	 $$$NaN$	K
709NaN	afterPrefix	$$$ NaN$	K
710NaN	beforeSuffix	$$$NaN $	K
711NaN	afterSuffix	$$$NaN$ 	K
712
713test apply formerly localized patterns
714begin
715// documentation says localizedPattern is not supported, change to pattern
716locale	pattern	format	output	breaks
717en	#0%	0.4376	44%
718fa	\u0025\u00a0\u0023\u0030	0.4376	\u066a\u00a0\u06f4\u06f4
719
720test localized pattern basic symbol coverage
721begin
722locale	localizedPattern	toPattern	breaks
723it	#.##0,00	#,##0.00
724sl	#.##0;#.##0−	#,##0;#,##0-
725en_SE	0,00×10^0;0,00×10^0-	0.00E0;0.00E0-
726// JDK does not seem to transform the digits in localized patterns
727ar_SA	#\u066C##\u0660\u066B\u0660\u0660;a#	#,##0.00;a#,##0.00	K
728
729test toPattern
730set locale en
731begin
732pattern	toPattern	breaks
733// All of the C and S failures in this section are because of functionally equivalent patterns
734// JDK doesn't support any patterns with padding or both negative prefix and suffix
735**0,000	**0,000	K
736**##0,000	**##0,000	K
737**###0,000	**###0,000	K
738**####0,000	**#,##0,000	CJKP
739###,000.	#,000.
7400,000	#0,000	CJP
741.00	#.00
742000	#000	CJP
743000,000	#,000,000	CJP
744pp#,000	pp#,000
74500.##	#00.##	CJP
746#,#00.025	#,#00.025
747// No secondary grouping in JDK
748#,##,###.02500	#,##,###.02500	K
749pp#,000;(#)	pp#,000;(#,000)
750**####,##,##0.0##;(#)	**#,##,##,##0.0##;**(##,##,##0.0##)	CJKP
751// No significant digits in JDK
752@@###	@@###	K
753@,@#,###	@,@#,###	K
7540.00E0	0.00E0
755// The following one works in JDK, probably because
756// it just returns the same string
757@@@##E0	@@@##E0
758###0.00#E0	###0.00#E0
759##00.00#E0	##00.00#E0
7600.00E+00	0.00E+00	K
761000.00E00	000.00E00
762###0.00#E00	###0.00#E00
763
764test parse
765set locale en
766set pattern +#,##0.0###;(#)
767begin
768parse	output	breaks
769+5,347.25	5347.25
770+5,347,.25	5347.25
771+5,347,	5347
772+5347,,,	5347
773+5347,,,d8	5347
774(5,347.25)	-5347.25
7755,347.25	5347.25	K
776// JDK 11 stopped parsing this
777(5,347.25	-5347.25	K
778// S is successful at parsing this as -5347.25 in lenient mode
779-5,347.25	-5347.25	K
780+3.52E4	35200
781(34.8E-3)	-0.0348
782// JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator
783(34  25E-1)	-342.5	K
784(34,,25E-1)	-342.5
785// Trailing grouping separators are not OK.
786// C/J/P stop at the offending separator.
787// JDK 11 gets this right
788(34,,25,E-1)	fail	CJP
789(34,,25,E-1)	-3425	K
790(34  25 E-1)	-342.5	K
791(34,,25 E-1)	-342.5	K
792// Spaces are not allowed after exponent symbol
793// C parses up to the E
794(34  25E -1)	-3425	K
795+3.52EE4	3.52
796+1,234,567.8901	1234567.8901
797+1,23,4567.8901	1234567.8901
798// Fraction grouping is disabled by default
799+1,23,4567.89,01	1234567.89
800+1,23,456.78.9	123456.78
801+12.34,56	12.34
802+79,,20,33	792033
803// JDK gets 79
804+79  20 33	792033	K
805// Parsing stops at comma as it is different from other separators
806+79  20,33	7920	K
807+79,,20 33	7920
808+  79	79	K
809+,79,,20,33	792033
810+7920d3	7920
811// Whitespace immediately after prefix doesn't count as digit separator in C
812+ ,79,,20,33	792033	K
813(  19 45)	-1945	K
814// C allows trailing separators when there is a prefix and suffix.
815(  19 45 )	-1945	K
816(,,19,45)	-1945
817// C parses to the spaces
818// JDK 11 stopped parsing this
819(,,19 45)	-19	K
820(  19,45)	-1945	K
821(,,19,45,)	-1945	K
822// C will parse up to the letter.
823(,,19,45,d1)	-1945	K
824(,,19,45d1)	-1945	K
825(  19 45 d1)	-1945	K
826(  19 45d1)	-1945	K
827(19,45,.25)	-1945.25
828// 2nd decimal points are ignored
829+4.12.926	4.12
830
831test parse suffix
832set locale en
833set pattern #,##0.0###+;#-
834begin
835parse	output	breaks
836// J and K just bail.
8373426	3426	K
8383426+	3426
839// J bails; K sees -34
84034 d1+	34	K
841// JDK sees this as -1234 for some reason
8421,234,,,+	1234	K
8431,234-	-1234
844// C and P bail because of trailing separators
8451,234,-	-1234	CJKP
8461234  -	-1234	K
847
848
849
850test parse strict
851set locale en
852set pattern +#,##,##0.0###;(#)
853set lenient 0
854set minGroupingDigits 2
855begin
856parse	output	breaks
857+123d5	123
858+5347.25	5347.25
859// separators in wrong place cause failure, no separators ok.
860+65,347.25	65347.25
861(65347.25)	-65347.25
862(65,347.25)	-65347.25
863// JDK does allow separators in the wrong place and parses as -5347.25
864(53,47.25)	fail	K
865// strict requires prefix or suffix, except in C
86665,347.25	fail
867+3.52E4	35200
868(34.8E-3)	-0.0348
869(3425E-1)	-342.5
870// Strict doesn't allow separators in sci notation.
871(63,425)	-63425
872(63,425E-1)	-6342.5
873// Both prefix and suffix needed for strict.
874(3425E-1	fail
875+3.52EE4	3.52
876+12,34,567.8901	1234567.8901
877// With strict digit separators don't have to be the right type
878// JDK doesn't acknowledge space as a separator
879+12 34 567.8901	1234567.8901	K
880// In general the grouping separators have to match their expected
881// location exactly. The only exception is when string being parsed
882// have no separators at all.
883+12,345.67	12345.67
884// JDK doesn't require separators to be in the right place.
885+1,23,4567.8901	fail	K
886+1,234,567.8901	fail	K
887+1234,567.8901	fail	K
888+1,234567.8901	fail	K
889+1234567.8901	1234567.8901
890// Minimum grouping is not satisfied below, but that's ok
891// because minimum grouping is optional.
892+1,234.5	1234.5
893// Comma after decimal means parse to a comma
894+1,23,456.78,9	123456.78
895+1,23,456.78.9	123456.78
896+79	79
897+79	79
898+ 79	fail
899(1,945d1)	fail
900
901test parse strict scientific
902// See #13737: Old behavior should be retained in this case
903set locale en
904set pattern #E0
905set lenient 0
906begin
907parse	output	breaks
908123	123
909123E1	1230
910123E0	123
911123E	123
912
913test parse strict without prefix/suffix
914set locale en
915set pattern #
916set lenient 0
917begin
918parse	output	breaks
91912.34	12.34
920-12.34	-12.34
921// The following case passes only when setSignAlwaysShown is enabled
922+12.34	fail
923$12.34	fail
924
925test parse integer only
926set locale en
927set pattern 0.00
928set parseIntegerOnly 1
929begin
930parse	output	breaks
93135	35
932+35	35	K
933-35	-35
9342.63	2
935-39.99	-39
936
937test parse no exponent flag
938set pattern 0
939set locale en
940begin
941parseNoExponent	parse	output	breaks
942// JDK doesn't allow lowercase exponent but ICU4J and ICU4C do.
9430	5e2	500	K
9440	5.3E2	530
945// See ticket 11725
9461	5e2	5
9471	5.3E2	5.3	K
948
949test parse currency fail
950set pattern 0
951set locale en
952begin
953parse	output	outputCurrency	breaks
954// Fixed in ticket 11735
95553.45	fail	USD
956
957test parse strange prefix
958set locale en
959set positivePrefix dd
960set negativePrefix ddd
961begin
962parse	output
963dd4582	4582
964ddd4582	-4582
965
966test parse strange suffix
967set locale en
968set positiveSuffix dd
969set negativePrefix
970set negativeSuffix ddd
971begin
972parse	output
9734582dd	4582
9744582ddd	-4582
975
976test really strange suffix
977set locale en
978set positiveSuffix 9K
979set negativePrefix
980set negativeSuffix 9N
981begin
982parse	output	breaks
983// A non-greedy parse is required to pass these cases.
984// All of the implementations being tested are greedy.
9856549K	654	CJKP
9866549N	-654	CJKP
987
988test really strange prefix
989set locale en
990set positivePrefix 82
991set negativePrefix 28
992begin
993parse	output
9948245	45
9952845	-45
996
997test parse pattern with quotes
998set locale en
999set pattern '-'#y
1000begin
1001parse	output	breaks
1002-45y	45
1003
1004test parse with locale symbols
1005// The grouping separator in it_CH is an apostrophe
1006set locale it_CH
1007set pattern #,##0
1008begin
1009parse	output	breaks
1010१३	13
1011१३.३१‍	13.31
1012// JDK 11 parses this as 123
1013123'456	123456	K
1014524'11.3	52411.3	K
1015३'११‍	311	K
1016
1017test parse with European-style comma/period
1018set locale pt
1019set pattern #,##0
1020begin
1021parse	output	breaks
1022123.456	123456
1023123,456	123.456
1024987,654.321	987.654
1025987,654 321	987.654
1026987.654,321	987654.321
1027
1028test select
1029set locale sr
1030begin
1031format	pattern	plural
1032Inf	0	other
1033-Inf	0	other
1034NaN	0	other
1035Inf	0.0	other
1036-Inf	0.0	other
1037NaN	0.0	other
10381	0	one
10391	0.0	other
10402	0	few
10412	0.0	other
10422	0E0	other
10435.1	0.0	one
10445.09	0.0	one
1045
1046test parse currency ISO
1047set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
1048set locale en_GB
1049begin
1050parse	output	outputCurrency	breaks
105153.45	fail	GBP
1052£53.45	53.45	GBP
1053$53.45	53.45	USD	C
105453.45 USD	53.45	USD
105553.45 GBP	53.45	GBP
1056USD 53.45	53.45	USD
105753.45USD	53.45	USD
1058USD53.45	53.45	USD
1059(7.92) USD	-7.92	USD
1060(7.92) GBP	-7.92	GBP
1061(7.926) USD	-7.926	USD
1062(7.926 USD)	-7.926	USD
1063(USD 7.926)	-7.926	USD
1064USD (7.926)	-7.926	USD
1065USD (7.92)	-7.92	USD
1066(7.92)USD	-7.92	USD
1067USD(7.92)	-7.92	USD
1068(8) USD	-8	USD
1069-8 USD	-8	USD
107067 USD	67	USD
107153.45$	53.45	USD	C
1072US Dollars 53.45	53.45	USD
107353.45 US Dollars	53.45	USD
1074US Dollar 53.45	53.45	USD
107553.45 US Dollar	53.45	USD
1076US Dollars53.45	53.45	USD
107753.45US Dollars	53.45	USD
1078US Dollar53.45	53.45	USD
1079US Dollat53.45	fail	USD
108053.45US Dollar	53.45	USD
1081US Dollars (53.45)	-53.45	USD
1082(53.45) US Dollars	-53.45	USD
1083(53.45) Euros	-53.45	EUR
1084US Dollar (53.45)	-53.45	USD
1085(53.45) US Dollar	-53.45	USD
1086US Dollars(53.45)	-53.45	USD
1087(53.45)US Dollars	-53.45	USD
1088US Dollar(53.45)	-53.45	USD
1089US Dollat(53.45)	fail	USD
1090(53.45)US Dollar	-53.45	USD
1091
1092
1093test parse currency ISO negative
1094set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4
1095set locale en_GB
1096begin
1097parse	output	outputCurrency	breaks
109853.45	fail	GBP
1099£53.45	53.45	GBP
1100$53.45	53.45	USD	C
110153.45 USD	53.45	USD
110253.45 GBP	53.45	GBP
1103USD 53.45	53.45	USD
110453.45USD	53.45	USD
1105USD53.45	53.45	USD
1106-7.92 USD	-7.92	USD
1107-7.92 GBP	-7.92	GBP
1108-7.926 USD	-7.926	USD
1109USD -7.926	-7.926	USD
1110-7.92USD	-7.92	USD
1111USD-7.92	-7.92	USD
1112-8 USD	-8	USD
111367 USD	67	USD
111453.45$	53.45	USD	C
1115US Dollars 53.45	53.45	USD
111653.45 US Dollars	53.45	USD
1117US Dollar 53.45	53.45	USD
111853.45 US Dollar	53.45	USD
1119US Dollars53.45	53.45	USD
112053.45US Dollars	53.45	USD
1121US Dollar53.45	53.45	USD
1122US Dollat53.45	fail	USD
112353.45US Dollar	53.45	USD
1124
1125
1126test parse currency long
1127set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4
1128set locale en_GB
1129begin
1130parse	output	outputCurrency	breaks
113153.45	fail	GBP
1132£53.45	53.45	GBP
1133$53.45	53.45	USD	C
113453.45 USD	53.45	USD
113553.45 GBP	53.45	GBP
1136USD 53.45	53.45	USD
113753.45USD	53.45	USD
1138USD53.45	53.45	USD
1139(7.92) USD	-7.92	USD
1140(7.92) GBP	-7.92	GBP
1141(7.926) USD	-7.926	USD
1142(7.926 USD)	-7.926	USD
1143(USD 7.926)	-7.926	USD
1144USD (7.926)	-7.926	USD
1145USD (7.92)	-7.92	USD
1146(7.92)USD	-7.92	USD
1147USD(7.92)	-7.92	USD
1148(8) USD	-8	USD
1149-8 USD	-8	USD
115067 USD	67	USD
115153.45$	53.45	USD	C
1152US Dollars 53.45	53.45	USD
115353.45 US Dollars	53.45	USD
1154US Dollar 53.45	53.45	USD
115553.45 US Dollar	53.45	USD
1156US Dollars53.45	53.45	USD
115753.45US Dollars	53.45	USD
1158US Dollar53.45	53.45	USD
1159US Dollat53.45	fail	USD
116053.45US Dollar	53.45	USD
1161
1162
1163test parse currency short
1164set pattern 0.00 \u00a4;(#) \u00a4
1165set locale en_GB
1166begin
1167parse	output	outputCurrency	breaks
116853.45	fail	GBP
1169£53.45	53.45	GBP
1170$53.45	53.45	USD	C
117153.45 USD	53.45	USD
117253.45 GBP	53.45	GBP
1173USD 53.45	53.45	USD
117453.45USD	53.45	USD
1175USD53.45	53.45	USD
1176(7.92) USD	-7.92	USD
1177(7.92) GBP	-7.92	GBP
1178(7.926) USD	-7.926	USD
1179(7.926 USD)	-7.926	USD
1180(USD 7.926)	-7.926	USD
1181USD (7.926)	-7.926	USD
1182USD (7.92)	-7.92	USD
1183(7.92)USD	-7.92	USD
1184USD(7.92)	-7.92	USD
1185(8) USD	-8	USD
1186-8 USD	-8	USD
118767 USD	67	USD
118853.45$	53.45	USD	C
1189US Dollars 53.45	53.45	USD
119053.45 US Dollars	53.45	USD
1191US Dollar 53.45	53.45	USD
119253.45 US Dollar	53.45	USD
1193US Dollars53.45	53.45	USD
119453.45US Dollars	53.45	USD
1195US Dollar53.45	53.45	USD
1196US Dollat53.45	fail	USD
119753.45US Dollar	53.45	USD
1198
1199
1200test parse currency short prefix
1201set pattern \u00a40.00;(\u00a4#)
1202set locale en_GB
1203begin
1204parse	output	outputCurrency	breaks
120553.45	fail	GBP
1206£53.45	53.45	GBP
1207$53.45	53.45	USD	C
120853.45 USD	53.45	USD
120953.45 GBP	53.45	GBP
1210USD 53.45	53.45	USD
121153.45USD	53.45	USD
1212USD53.45	53.45	USD
1213// C and P fail these because '(' is an incomplete prefix.
1214(7.92) USD	-7.92	USD	CJP
1215(7.92) GBP	-7.92	GBP	CJP
1216(7.926) USD	-7.926	USD	CJP
1217(7.926 USD)	-7.926	USD	CJP
1218(USD 7.926)	-7.926	USD
1219USD (7.926)	-7.926	USD	CJP
1220USD (7.92)	-7.92	USD	CJP
1221(7.92)USD	-7.92	USD	CJP
1222USD(7.92)	-7.92	USD	CJP
1223(8) USD	-8	USD	CJP
1224-8 USD	-8	USD
122567 USD	67	USD
122653.45$	53.45	USD	C
1227US Dollars 53.45	53.45	USD
122853.45 US Dollars	53.45	USD
1229US Dollar 53.45	53.45	USD
123053.45 US Dollar	53.45	USD
1231US Dollars53.45	53.45	USD
123253.45US Dollars	53.45	USD
1233US Dollar53.45	53.45	USD
123453.45US Dollar	53.45	USD
1235
1236test format foreign currency
1237set locale fa_IR
1238set currency IRR
1239begin
1240pattern	format	output	breaks
1241\u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 #	1235	\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	K
1242\u00a4\u00a4 0.00;\u00a4\u00a4 -#	1235	IRR \u06F1\u06F2\u06F3\u06F5	K
1243\u00a4 0.00;\u00a4 -#	1235	\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	K
1244
1245test parse foreign currency symbol
1246set pattern \u00a4 0.00;\u00a4 -#
1247set locale fa_IR
1248begin
1249parse	output	outputCurrency	breaks
1250\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
1251IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
1252// P fails here because this currency name is in the Trie only, but it has the same prefix as the non-Trie currency
1253\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
1254IRR 1235	1235	IRR
1255\u0631\u06cc\u0627\u0644 1235	1235	IRR
1256\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
1257
1258test parse foreign currency ISO
1259set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -#
1260set locale fa_IR
1261begin
1262parse	output	outputCurrency	breaks
1263\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
1264IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
1265\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
1266IRR 1235	1235	IRR
1267\u0631\u06cc\u0627\u0644 1235	1235	IRR
1268\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
1269
1270test parse foreign currency full
1271set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -#
1272set locale fa_IR
1273begin
1274parse	output	outputCurrency	breaks
1275\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5	1235	IRR
1276IRR \u06F1\u06F2\u06F3\u06F5	1235	IRR
1277\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5	1235	IRR	CJP
1278IRR 1235	1235	IRR
1279\u0631\u06cc\u0627\u0644 1235	1235	IRR
1280\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235	1235	IRR	CJP
1281
1282test parse currency with foreign symbols symbol english
1283set pattern \u00a4 0.00;\u00a4 (#)
1284set locale en_US
1285begin
1286parse	output	outputCurrency
1287EUR 7.82	7.82	EUR
1288\u20ac 7.82	7.82	EUR
1289Euro 7.82	7.82	EUR
1290Euros 7.82	7.82	EUR
1291
1292test parse currency with foreign symbols ISO english
1293set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 (#)
1294set locale en_US
1295begin
1296parse	output	outputCurrency
1297EUR 7.82	7.82	EUR
1298\u20ac 7.82	7.82	EUR
1299Euro 7.82	7.82	EUR
1300Euros 7.82	7.82	EUR
1301
1302test parse currency with foreign symbols full english
1303set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 (#)
1304set locale en_US
1305begin
1306parse	output	outputCurrency
1307EUR 7.82	7.82	EUR
1308\u20ac 7.82	7.82	EUR
1309Euro 7.82	7.82	EUR
1310Euros 7.82	7.82	EUR
1311
1312test parse currency without currency mode
1313// Should accept a symbol associated with the currency specified by the API,
1314// but should not traverse the full currency data.
1315set locale en_US
1316set pattern \u00a4#,##0.00
1317begin
1318parse	currency	output	breaks
1319$52.41	USD	52.41
1320USD52.41	USD	52.41	K
1321\u20ac52.41	USD	fail
1322EUR52.41	USD	fail
1323$52.41	EUR	fail
1324USD52.41	EUR	fail
1325\u20ac52.41	EUR	52.41
1326EUR52.41	EUR	52.41	K
1327
1328test parse currency ISO strict
1329set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4
1330set locale en_US
1331set lenient 0
1332begin
1333parse	output	outputCurrency	breaks
1334$53.45	53.45	USD	CJP
133553.45 USD	53.45	USD
1336USD 53.45	fail	USD
133753.45USD	fail	USD
1338USD53.45	53.45	USD	CJP
1339(7.92) USD	-7.92	USD
1340(7.92) EUR	-7.92	EUR
1341(7.926) USD	-7.926	USD
1342(7.926 USD)	fail	USD
1343(USD 7.926)	fail	USD
1344USD (7.926)	fail	USD
1345USD (7.92)	fail	USD
1346(7.92)USD	fail	USD
1347USD(7.92)	fail	USD
1348(8) USD	-8	USD
1349-8 USD	fail	USD
135067 USD	67	USD
135153.45$	fail	USD
1352US Dollars 53.45	fail	USD
135353.45 US Dollars	53.45	USD
1354US Dollar 53.45	fail	USD
135553.45 US Dollar	53.45	USD
1356US Dollars53.45	53.45	USD	CJP
135753.45US Dollars	fail	USD
1358US Dollar53.45	53.45	USD	CJP
1359US Dollat53.45	fail	USD
136053.45US Dollar	fail	USD
1361US Dollars (53.45)	fail	USD
1362(53.45) US Dollars	-53.45	USD
1363US Dollar (53.45)	fail	USD
1364(53.45) US Dollar	-53.45	USD
1365US Dollars(53.45)	fail	USD
1366(53.45)US Dollars	fail	USD
1367US Dollar(53.45)	fail	USD
1368US Dollat(53.45)	fail	USD
1369(53.45)US Dollar	fail	USD
1370
1371test ticket 10436
1372set locale en
1373set roundingMode ceiling
1374set minFractionDigits 0
1375set maxFractionDigits 0
1376begin
1377format	output	breaks
1378-0.99	-0	K
1379
1380// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1381test rounding mode ceil
1382set locale en
1383set roundingMode ceiling
1384begin
1385format	output	breaks
1386-1.5	-1	K
13870.4	1	K
13880.5	1	K
13890.6	1
13901.5	2
1391
1392// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1393test rounding mode floor
1394set locale en
1395set roundingMode floor
1396begin
1397format	output	breaks
1398-1.5	-2
13990.4	0
14000.5	0
14010.6	0	K
14021.5	1	K
1403
1404// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1405test rounding mode expand
1406set locale en
1407set roundingMode up
1408begin
1409format	output	breaks
1410-1.5	-2
14110.4	1	K
14120.5	1	K
14130.6	1
14141.5	2
1415
1416// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1417test rounding mode trunc
1418set locale en
1419set roundingMode down
1420begin
1421format	output	breaks
1422-1.5	-1	K
14230.4	0
14240.5	0
14250.6	0	K
14261.5	1	K
1427
1428// Not supported in Java BigDecimal
1429test rounding mode halfCeil
1430set locale en
1431set roundingMode halfCeiling
1432begin
1433format	output	breaks
1434-1.5	-1	JKP
14350.4	0	JP
14360.5	1	JKP
14370.6	1	JP
14381.5	2	JP
1439
1440// Not supported in Java BigDecimal
1441test rounding mode halfFloor
1442set locale en
1443set roundingMode halfFloor
1444begin
1445format	output	breaks
1446-1.5	-2	JP
14470.4	0	JP
14480.5	0	JP
14490.6	1	JP
14501.5	1	JKP
1451
1452// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1453test rounding mode halfExpand
1454set locale en
1455set roundingMode halfUp
1456begin
1457format	output	breaks
1458-1.5	-2
14590.4	0
14600.5	1	K
14610.6	1
14621.5	2
1463
1464// JDK seems to always round halfEven! Why? Bug in JDK or bug in test?
1465test rounding mode halfTrunc
1466set locale en
1467set roundingMode halfDown
1468begin
1469format	output	breaks
1470-1.5	-1	K
14710.4	0
14720.5	0
14730.6	1
14741.5	1	K
1475
1476test rounding mode halfEven
1477set locale en
1478set roundingMode halfEven
1479begin
1480format	output	breaks
1481-1.5	-2
14820.4	0
14830.5	0
14840.6	1
14851.5	2
1486
1487// Not supported in Java BigDecimal
1488test rounding mode halfOdd
1489set locale en
1490set roundingMode halfOdd
1491begin
1492format	output	breaks
1493-1.5	-1	JKP
14940.4	0	JP
14950.5	1	JKP
14960.6	1	JP
14971.5	1	JKP
1498
1499test parse decimalPatternMatchRequired
1500set locale en
1501set decimalPatternMatchRequired 1
1502begin
1503pattern	parse	output	breaks
1504// K doesn't support this feature.
15050	123	123
15060	123.	fail	K
15070	1.23	fail	K
15080	-513	-513
15090	-513.	fail	K
15100	-5.13	fail	K
15110.0	123	fail	K
15120.0	123.	123
15130.0	1.23	1.23
15140.0	-513	fail	K
15150.0	-513.	-513
15160.0	-5.13	-5.13
1517
1518test parse minus sign
1519set locale en
1520set pattern #
1521begin
1522pattern	parse	output	breaks
1523#	-123	-123
1524#	- 123	-123	K
1525#	 -123	-123	K
1526#	 - 123	-123	K
1527#	123-	123
1528#	123 -	123
1529#;#-	123-	-123
1530#;#-	123 -	-123	K
1531
1532test parse case sensitive
1533set locale en
1534set lenient 1
1535set pattern Aa#
1536begin
1537parse	parseCaseSensitive	output	breaks
1538Aa1.23	1	1.23
1539Aa1.23	0	1.23
1540AA1.23	1	fail
1541// K does not support case-insensitive parsing for prefix/suffix.
1542AA1.23	0	1.23	K
1543aa1.23	1	fail
1544aa1.23	0	1.23	K
1545Aa1.23E3	1	1230
1546Aa1.23E3	0	1230
1547Aa1.23e3	1	1.23
1548Aa1.23e3	0	1230	K
1549NaN	1	NaN
1550NaN	0	NaN
1551nan	1	fail
1552nan	0	NaN	K
1553
1554test parse infinity and scientific notation overflow
1555set locale en
1556set lenient 1
1557begin
1558parse	output	breaks
1559NaN	NaN
1560// JDK returns zero
15611E999999999999999	Inf	K
1562-1E999999999999999	-Inf	K
15631E-99999999999999	0.0
1564// Note: The test suite code doesn't properly check for 0.0 vs. -0.0
1565-1E-99999999999999	-0.0
15661E2147483648	Inf	K
15671E2147483647	Inf	K
1568// J and K get Infinity
15691E2147483646	1E+2147483646	JK
15701E-2147483649	0
15711E-2147483648	0
1572// K returns zero here
15731E-2147483647	1E-2147483647	JK
15741E-2147483646	1E-2147483646	JK
1575
1576test format push limits
1577set locale en
1578set minFractionDigits 2
1579set roundingMode halfDown
1580begin
1581maxFractionDigits	format	output	breaks
1582100	987654321987654321	987654321987654321.00
1583100	987654321.987654321	987654321.987654321
1584100	9999999999999.9950000000001	9999999999999.9950000000001
15852	9999999999999.9950000000001	10000000000000.00
15862	9999999.99499999	9999999.99
1587// K doesn't support halfDown rounding mode?
15882	9999999.995	9999999.99	K
15892	9999999.99500001	10000000.00
1590100	56565656565656565656565656565656565656565656565656565656565656	56565656565656565656565656565656565656565656565656565656565656.00
1591100	454545454545454545454545454545.454545454545454545454545454545	454545454545454545454545454545.454545454545454545454545454545
1592100	0.0000000000000000000123	0.0000000000000000000123
1593100	-78787878787878787878787878787878	-78787878787878787878787878787878.00
1594100	-8989898989898989898989.8989898989898989	-8989898989898989898989.8989898989898989
1595
1596test ticket 11230
1597set locale en
1598begin
1599pattern	lenient	parse	output	breaks
1600// Groups after the first group need 2 digits to be accepted.
1601// JDK does not see space as grouping and parses most of these as 9.
1602#,##0	1	9 9	9
1603#,##0	1	9 99	999	K
1604#,##0	1	9 999	9999	K
1605#,##0	1	9 9 9	9
1606#,##0	1	,9	9
1607#,##0	1	99,.0	99
1608#,##0	1	9 9.	9
1609#,##0	1	9 99.	999	K
16100	1	9 9	9
16110	1	9 99	9
16120	1	9 999	9
16130	1	9 9 9	9
16140	1	,9	fail
16150	1	99,.0	99
16160	1	9 9.	9
16170	1	9 99.	9
1618#,##0	0	9 9	fail	K
1619#,##0	0	9 99	fail	K
1620#,##0	0	9 999	9999	K
1621#,##0	0	9 9 9	fail	K
1622#,##0	0	,9	fail	K
1623#,##0	0	99,.0	fail	K
1624#,##0	0	9 9.	fail	K
1625#,##0	0	9 99.	fail	K
16260	0	9 9	9
16270	0	9 99	9
16280	0	9 999	9
16290	0	9 9 9	9
16300	0	,9	fail
16310	0	99,.0	99
16320	0	9 9.	9
16330	0	9 99.	9
1634
1635test more strict grouping parse
1636set locale en
1637set pattern #,##,##0
1638begin
1639lenient	parse	output	breaks
16401	1,23,,	123
16410	9999, 	9999
16420	1,23,,	fail	K
1643
1644test parse ignorables
1645set locale ar
1646// Note: Prefixes contain RLMs, as do some of the test cases.
1647set pattern x a‎b0c df
1648set negativePrefix y g‎h
1649set negativeSuffix i jk
1650begin
1651parse	output	breaks
1652x a‎b56c df 	56
1653x  a‎b56c df 	56	K
1654x ab56c df 	56	K
1655x ab56c df	56	K
1656x ab56c df  	56	K
1657x ab56	56	K
1658x a b56	56	K
165956cdf	56	K
166056c df	56	K
166156cd f	56	K
166256c‎d‎f	56	K
166356cdf 	56	K
166456c d‎f 	56	K
166556‎c df 	56	K
1666y g‎h56i jk 	-56
1667y  g‎h56i jk 	-56	K
1668y gh56i jk 	-56	K
1669y gh56i jk	-56	K
1670y gh56i jk  	-56	K
1671y gh56	-56	K
1672y g h56	-56	K
1673// S stops parsing after the 'i' for these and returns -56
1674// C stops before the 'i' and gets 56
167556ijk	-56	K
167656i jk	-56	K
167756ij k	-56	K
167856i‎j‎k	-56	K
167956ijk 	-56	K
168056i j‎k 	-56	K
168156‎i jk 	-56	K
1682// S and C get 56 (accepts ' ' gs grouping); K gets null
16835 6	fail	CJP
16845‎6	5	K
1685
1686test parse spaces in grouping
1687// This test gives the ideal behavior of these cases, which
1688// none of the implementations currently support.
1689// Similar to the test above for ticket #11230
1690set locale en
1691set pattern #,##0
1692begin
1693parse	output	breaks
16941 2	1
16951 23	123	K
1696// K gets 1 here; doesn't pick up the grouping separator
16971 234	1234	K
1698
1699test rounding increment significant digits
1700// This test is for #13111
1701set locale en
1702set pattern 0.1
1703set useSigDigits 1
1704set maxSigDigits 2
1705begin
1706format	output	breaks
1707// C and J get "1"
1708// P gets "1.0"
1709// K gets "1.1" (??)
17100.975	0.98	CJKP
1711
1712test lenient parse currency match
1713// This test is for #13112
1714set locale en
1715set pattern ¤#,##0.00
1716begin
1717parse	output	breaks
1718// K gets null
17191.23!@#$%^	1.23	K
1720
1721test percentage parsing multiplier
1722// This test is for #13114
1723set locale en
1724set pattern 0%
1725begin
1726parse	output	breaks
172755%	0.55
1728// K gets null
1729// C and P scale by 100 even if the percent sign is not present
173055	0.55	K
1731
1732test trailing grouping separators in pattern
1733// This test is for #13115
1734set locale en
1735begin
1736pattern	format	output	breaks
1737$0M	123456	$123456M
1738// The following patterns are rejected as malformed.
1739$0,M	123456	fail
1740$0,,M	123456	fail
1741
1742test empty negative subpattern
1743// This test is for #13117
1744set locale en
1745begin
1746pattern	format	output	breaks
17470	-15	-15
17480;	-15	-15
1749// K still prepends a '-' even though the pattern says otherwise
17500;0	-15	15	K
1751
1752test percentage multiplier parsing
1753// This test is for #13129
1754set locale en
1755set pattern 0%
1756begin
1757parse	output	breaks
17589223372036854775807%	92233720368547758.07	K
1759
1760test sign always shown
1761set locale en
1762set pattern 0
1763set signAlwaysShown 1
1764begin
1765format	output	breaks
1766// K does not support this feature
176742	+42	K
17680	+0	K
1769-42	-42
1770
1771test parse strict with plus sign
1772set locale en
1773set pattern 0
1774set signAlwaysShown 1
1775begin
1776lenient	parse	output	breaks
17771	42	42
17781	-42	-42
17791	+42	42	K
17801	0	0
17811	+0	0	K
17820	42	fail	K
17830	-42	-42
17840	+42	42	K
17850	0	fail	K
17860	+0	0	K
1787
1788test parse with scientific-separator-affix overlap
1789set locale en
1790begin
1791pattern	lenient	parse	output	breaks
17920E0','x	1	5E3,x	5000
17930E0','x	0	5E3,x	5000
17940E0'.'x	1	5E3.x	5000
17950E0'.'x	0	5E3.x	5000
1796
1797test parse() lowercase currency
1798set locale en
1799set pattern ¤¤0
1800set currency USD
1801begin
1802parse	output	breaks
1803USD123	123
1804USD 123	123	K
1805usd123	123	K
1806usd 123	123	K
1807Usd123	123	K
1808Usd 123	123	K
1809// US$ is not used for US dollars in en-US
1810US$123	fail
1811us$123	fail
1812Us$123	fail
1813123 US dollars	123	K
1814123 US DOLLARS	123	K
1815123 us dollars	123	K
1816// Foreign currencies are not accepted in .parse()
1817GBP123	fail
1818gbp123	fail
1819British pounds 123	fail
1820british POUNDS 123	fail
1821
1822test parseCurrency() lowercase currency
1823set locale en
1824set pattern ¤¤0
1825set currency USD
1826begin
1827parse	output	outputCurrency	breaks
1828USD123	123	USD
1829USD 123	123	USD
1830usd123	123	USD
1831usd 123	123	USD
1832Usd123	123	USD
1833Usd 123	123	USD
1834US$123	123	USD	C
1835us$123	fail	fail
1836Us$123	fail	fail
1837123 US dollars	123	USD
1838123 US DOLLARS	123	USD
1839123 us dollars	123	USD
1840GBP123	123	GBP
1841gbp123	123	GBP	C
1842British pounds 123	123	GBP
1843british POUNDS 123	123	GBP
1844
1845test parse scientific with bidi marks
1846begin
1847locale	parse	output	breaks
1848en	4E\u200E+02	400	K
1849en	4E+02	400	K
1850he	4E\u200E+02	400	K
1851he	4E+02	400	K
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892