// for that test suite. After the global settings, comes "begin", the
// per-test field names, and finally the test specific field values, 1 test
// per line.
+//
+// Field names:
+// J = ICU58
+// K = JDK
+// C = ICU4C
+// P = ICU4J parsing
+// Q = ICU4J formatting
+// S = ICU4J toPattern
+//
// For more information on the format of this file, including all the available
// field names, please see
// https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
1 1 0 0 3E8
// JDK gives E0 instead of allowing for unlimited precision
0 0 0 0 2.99792458E8 K
-// JDK gives .299792E9; Q gives 2.99792E8
-0 1 0 5 2.9979E8 KQ
+// J gives 2.9979E8
+0 1 0 5 2.99792E8 J
// JDK gives 300E6
0 3 0 0 299.792458E6 K
// JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)?
0 0 1 5 .29979E9
// JDK gives E0
0 0 1 0 2.99792458E8 K
-// JDK and Q give .2998E9
-0 0 0 4 2.998E8 KQ
+// J gives 2.998E8
+0 0 0 4 .29979E9 J
// According to the spec, if maxInt>minInt and minInt>1, then set
// Context: #13289
2 8 1 6 2.9979246E8 K
begin
format maxIntegerDigits output breaks
123 1 3
-0 0 0
-// Q ignores max integer if it is less than zero and prints "123"
-123 -2147483648 0 Q
+// C obeys maxIntegerDigits and prints after the decimal place
+0 0 .0 Q
+// C and Q ignore max integer if it is less than zero and prints "123"
+123 -2147483648 0 CQ
12345 1 5
-12345 -2147483648 0 Q
+12345 -2147483648 0 CQ
5.3 1 5.3
-5.3 -2147483648 .3 Q
+5.3 -2147483648 .3 CQ
test patterns with zero
set locale en
begin
currency currencyUsage toPattern breaks
// These work in J, but it prepends an extra hash sign to the pattern.
-// C does not print the currency rounding information in the pattern.
// K does not support this feature.
-USD standard 0.00 CJK
-CHF standard 0.00 CJK
-CZK standard 0.00 CJK
-USD cash 0.00 CJK
-CHF cash 0.05 CJK
-CZK cash 0 CJK
+USD standard 0.00 JK
+CHF standard 0.00 JK
+CZK standard 0.00 JK
+USD cash 0.00 JK
+CHF cash 0.05 JK
+CZK cash 0 JK
test currency rounding
set locale en
format output breaks
Inf [\u221e]
-Inf (\u221e) K
-// Q prints the affixes
-NaN NaN KQ
+// J does not print the affixes
+NaN [NaN] J
test nan and infinity with multiplication
set locale en
test nan and infinity with padding
set locale en_US
set pattern $$$0.00$
-set formatWidth 7
+set formatWidth 8
begin
format padPosition output breaks
-Inf beforePrefix $$$\u221e$ K
-Inf afterPrefix $$$ \u221e$ K
-Inf beforeSuffix $$$\u221e $ K
-Inf afterSuffix $$$\u221e$ K
-// Q gets $$$NaN$
-NaN beforePrefix NaN KQ
-NaN afterPrefix NaN KQ
-NaN beforeSuffix NaN KQ
-NaN afterSuffix NaN KQ
+Inf beforePrefix $$$\u221e$ K
+Inf afterPrefix $$$ \u221e$ K
+Inf beforeSuffix $$$\u221e $ K
+Inf afterSuffix $$$\u221e$ K
+// J does not print the affixes
+NaN beforePrefix $$$NaN$ J
+NaN afterPrefix $$$ NaN$ J
+NaN beforeSuffix $$$NaN $ J
+NaN afterSuffix $$$NaN$ J
test apply formerly localized patterns
begin
set locale en
begin
pattern toPattern breaks
-// All of the "S" failures in this section are because of functionally equivalent patterns
+// All of the C and S failures in this section are because of functionally equivalent patterns
// JDK doesn't support any patterns with padding or both negative prefix and suffix
// Breaks ICU4J See ticket 11671
**0,000 **0,000 JK
**##0,000 **##0,000 K
**###0,000 **###0,000 K
-**####0,000 **#,##0,000 KS
+**####0,000 **#,##0,000 CKS
###,000. #,000.
-0,000 #0,000 S
+0,000 #0,000 CS
.00 #.00
-000 #000 S
-000,000 #,000,000 S
+000 #000 CS
+000,000 #,000,000 CS
pp#,000 pp#,000
-00.## #00.## S
+00.## #00.## CS
#,#00.025 #,#00.025
// No secondary grouping in JDK
#,##,###.02500 #,##,###.02500 K
pp#,000;(#) pp#,000;(#,000) K
-**####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) KS
+**####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) CKS
// No significant digits in JDK
@@### @@### K
@,@#,### @,@#,### K
5,347.25 5347.25 JK
(5,347.25 -5347.25 J
// S is successful at parsing this as -5347.25 in lenient mode
--5,347.25 -5347.25 CJK
+-5,347.25 -5347.25 JK
+3.52E4 35200
(34.8E-3) -0.0348
// JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator
(34 25E-1) -342.5 K
(34,,25E-1) -342.5
-// J doesn't allow trailing separators before E but C does
-(34,,25,E-1) -342.5 JP
+// J doesn't allow trailing separators before E but C and P do
+(34,,25,E-1) -342.5 CJP
(34 25 E-1) -342.5 JK
-(34,,25 E-1) -342.5 CJK
+(34,,25 E-1) -342.5 JK
// Spaces are not allowed after exponent symbol
// C parses up to the E but J bails
(34 25E -1) -3425 JK
set pattern #,##0.0###+;#-
begin
parse output breaks
-// C sees this as -3426, don't understand why.
// J and K just bail.
-3426 3426 JKC
+3426 3426 JK
3426+ 3426
-// J bails; C and K see -34
-34 d1+ 34 JKC
+// J bails; K sees -34
+34 d1+ 34 JK
// JDK sees this as -1234 for some reason
// J bails b/c of trailing separators
-// C parses until trailing separators, but sees -1234
-1,234,,,+ 1234 JKC
+1,234,,,+ 1234 JK
1,234- -1234
-// J and P bail because of trailing separators
-1,234,- -1234 JP
+// J, C, and P bail because of trailing separators
+1,234,- -1234 CJP
// J bails here too
1234 - -1234 J
+1,234.5 1234.5
// Comma after decimal means parse to a comma
+1,23,456.78,9 123456.78
-// C and J fail upon seeing the second decimal point
-+1,23,456.78.9 123456.78 CJ
+// J fails upon seeing the second decimal point
++1,23,456.78.9 123456.78 J
+79 79
+79 79
+ 79 fail
parse output breaks
35 35
// S accepts leading plus signs
-+35 35 CJK
++35 35 JK
-35 -35
2.63 2
-39.99 -39
53.45 USD 53.45 USD
53.45 GBP 53.45 GBP
USD 53.45 53.45 USD J
-53.45USD 53.45 USD CJ
+53.45USD 53.45 USD J
USD53.45 53.45 USD
(7.92) USD -7.92 USD
(7.92) GBP -7.92 GBP
(7.926) USD -7.926 USD
-(7.926 USD) -7.926 USD CJ
-(USD 7.926) -7.926 USD CJ
-USD (7.926) -7.926 USD CJ
-USD (7.92) -7.92 USD CJ
-(7.92)USD -7.92 USD CJ
-USD(7.92) -7.92 USD CJ
+(7.926 USD) -7.926 USD J
+(USD 7.926) -7.926 USD J
+USD (7.926) -7.926 USD J
+USD (7.92) -7.92 USD J
+(7.92)USD -7.92 USD J
+USD(7.92) -7.92 USD J
(8) USD -8 USD
--8 USD -8 USD C
+-8 USD -8 USD
67 USD 67 USD
53.45$ fail USD P
US Dollars 53.45 53.45 USD J
US Dollar 53.45 53.45 USD J
53.45 US Dollar 53.45 USD
US Dollars53.45 53.45 USD
-53.45US Dollars 53.45 USD CJ
+53.45US Dollars 53.45 USD J
US Dollar53.45 53.45 USD
US Dollat53.45 fail USD
-53.45US Dollar 53.45 USD CJ
-US Dollars (53.45) -53.45 USD CJ
+53.45US Dollar 53.45 USD J
+US Dollars (53.45) -53.45 USD J
(53.45) US Dollars -53.45 USD
(53.45) Euros -53.45 EUR
-US Dollar (53.45) -53.45 USD CJ
+US Dollar (53.45) -53.45 USD J
(53.45) US Dollar -53.45 USD
-US Dollars(53.45) -53.45 USD CJ
-(53.45)US Dollars -53.45 USD CJ
-US Dollar(53.45) -53.45 USD CJ
+US Dollars(53.45) -53.45 USD J
+(53.45)US Dollars -53.45 USD J
+US Dollar(53.45) -53.45 USD J
US Dollat(53.45) fail USD
-(53.45)US Dollar -53.45 USD CJ
+(53.45)US Dollar -53.45 USD J
test parse currency ISO negative
53.45 USD 53.45 USD
53.45 GBP 53.45 GBP
USD 53.45 53.45 USD J
-53.45USD 53.45 USD CJ
+53.45USD 53.45 USD J
USD53.45 53.45 USD
-7.92 USD -7.92 USD
-7.92 GBP -7.92 GBP
-7.926 USD -7.926 USD
-USD -7.926 -7.926 USD CJ
--7.92USD -7.92 USD CJ
-USD-7.92 -7.92 USD CJ
+USD -7.926 -7.926 USD J
+-7.92USD -7.92 USD J
+USD-7.92 -7.92 USD J
-8 USD -8 USD
67 USD 67 USD
53.45$ fail USD P
US Dollar 53.45 53.45 USD J
53.45 US Dollar 53.45 USD
US Dollars53.45 53.45 USD
-53.45US Dollars 53.45 USD CJ
+53.45US Dollars 53.45 USD J
US Dollar53.45 53.45 USD
US Dollat53.45 fail USD
-53.45US Dollar 53.45 USD CJ
+53.45US Dollar 53.45 USD J
test parse currency long
53.45 USD 53.45 USD
53.45 GBP 53.45 GBP
USD 53.45 53.45 USD J
-53.45USD 53.45 USD CJ
+53.45USD 53.45 USD J
USD53.45 53.45 USD
(7.92) USD -7.92 USD
(7.92) GBP -7.92 GBP
(7.926) USD -7.926 USD
-(7.926 USD) -7.926 USD CJ
-(USD 7.926) -7.926 USD CJ
-USD (7.926) -7.926 USD CJ
-USD (7.92) -7.92 USD CJ
-(7.92)USD -7.92 USD CJ
-USD(7.92) -7.92 USD CJ
+(7.926 USD) -7.926 USD J
+(USD 7.926) -7.926 USD J
+USD (7.926) -7.926 USD J
+USD (7.92) -7.92 USD J
+(7.92)USD -7.92 USD J
+USD(7.92) -7.92 USD J
(8) USD -8 USD
--8 USD -8 USD C
+-8 USD -8 USD
67 USD 67 USD
// J throws a NullPointerException on the next case
53.45$ fail USD P
US Dollar 53.45 53.45 USD J
53.45 US Dollar 53.45 USD
US Dollars53.45 53.45 USD
-53.45US Dollars 53.45 USD CJ
+53.45US Dollars 53.45 USD J
US Dollar53.45 53.45 USD
US Dollat53.45 fail USD
-53.45US Dollar 53.45 USD CJ
+53.45US Dollar 53.45 USD J
test parse currency short
53.45 USD 53.45 USD
53.45 GBP 53.45 GBP
USD 53.45 53.45 USD J
-53.45USD 53.45 USD CJ
+53.45USD 53.45 USD J
USD53.45 53.45 USD
(7.92) USD -7.92 USD
(7.92) GBP -7.92 GBP
(7.926) USD -7.926 USD
-(7.926 USD) -7.926 USD CJ
-(USD 7.926) -7.926 USD CJ
-USD (7.926) -7.926 USD CJ
-USD (7.92) -7.92 USD CJ
-(7.92)USD -7.92 USD CJ
-USD(7.92) -7.92 USD CJ
+(7.926 USD) -7.926 USD J
+(USD 7.926) -7.926 USD J
+USD (7.926) -7.926 USD J
+USD (7.92) -7.92 USD J
+(7.92)USD -7.92 USD J
+USD(7.92) -7.92 USD J
(8) USD -8 USD
--8 USD -8 USD C
+-8 USD -8 USD
67 USD 67 USD
53.45$ fail USD P
US Dollars 53.45 53.45 USD J
US Dollar 53.45 53.45 USD J
53.45 US Dollar 53.45 USD
US Dollars53.45 53.45 USD
-53.45US Dollars 53.45 USD CJ
+53.45US Dollars 53.45 USD J
US Dollar53.45 53.45 USD
US Dollat53.45 fail USD
-53.45US Dollar 53.45 USD CJ
+53.45US Dollar 53.45 USD J
test parse currency short prefix
53.45 fail GBP
£53.45 53.45 GBP
$53.45 fail USD JP
-53.45 USD 53.45 USD C
-53.45 GBP 53.45 GBP C
+53.45 USD 53.45 USD
+53.45 GBP 53.45 GBP
USD 53.45 53.45 USD J
-53.45USD 53.45 USD CJ
+53.45USD 53.45 USD J
USD53.45 53.45 USD
-// P fails these because '(' is an incomplete prefix.
+// C and P fail these because '(' is an incomplete prefix.
(7.92) USD -7.92 USD CJP
(7.92) GBP -7.92 GBP CJP
(7.926) USD -7.926 USD CJP
(7.92)USD -7.92 USD CJP
USD(7.92) -7.92 USD CJP
(8) USD -8 USD CJP
--8 USD -8 USD C
-67 USD 67 USD C
+-8 USD -8 USD
+67 USD 67 USD
53.45$ fail USD P
US Dollars 53.45 53.45 USD J
53.45 US Dollars 53.45 USD
US Dollar 53.45 53.45 USD J
53.45 US Dollar 53.45 USD
US Dollars53.45 53.45 USD
-53.45US Dollars 53.45 USD CJ
+53.45US Dollars 53.45 USD J
US Dollar53.45 53.45 USD
-53.45US Dollar 53.45 USD CJ
+53.45US Dollar 53.45 USD J
test format foreign currency
set locale fa_IR
\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
// P fails here because this currency name is in the Trie only, but it has the same prefix as the non-Trie currency
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CP
IRR 1235 1235 IRR
\u0631\u06cc\u0627\u0644 1235 1235 IRR
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CP
test parse foreign currency ISO
set pattern \u00a4\u00a4 0.00;\u00a4\u00a4 -#
parse output outputCurrency breaks
\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CP
IRR 1235 1235 IRR
\u0631\u06cc\u0627\u0644 1235 1235 IRR
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CP
test parse foreign currency full
set pattern \u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 -#
parse output outputCurrency breaks
\u0631\u06cc\u0627\u0644 \u06F1\u06F2\u06F3\u06F5 1235 IRR
IRR \u06F1\u06F2\u06F3\u06F5 1235 IRR
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 1235 IRR CP
IRR 1235 1235 IRR
\u0631\u06cc\u0627\u0644 1235 1235 IRR
-\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR P
+\u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 1235 1235 IRR CP
test parse currency with foreign symbols symbol english
set pattern \u00a4 0.00;\u00a4 (#)
parse currency output breaks
$52.41 USD 52.41
USD52.41 USD 52.41 K
-\u20ac52.41 USD fail P
-EUR52.41 USD fail P
-$52.41 EUR fail P
-USD52.41 EUR fail P
+\u20ac52.41 USD fail CP
+EUR52.41 USD fail CP
+$52.41 EUR fail CP
+USD52.41 EUR fail CP
\u20ac52.41 EUR 52.41 K
EUR52.41 EUR 52.41
set lenient 0
begin
parse output outputCurrency breaks
-$53.45 53.45 USD P
+$53.45 53.45 USD CP
53.45 USD 53.45 USD
USD 53.45 fail USD
53.45USD fail USD
-USD53.45 53.45 USD P
+USD53.45 53.45 USD CP
(7.92) USD -7.92 USD
(7.92) EUR -7.92 EUR
(7.926) USD -7.926 USD
53.45 US Dollars 53.45 USD
US Dollar 53.45 fail USD
53.45 US Dollar 53.45 USD
-US Dollars53.45 53.45 USD P
+US Dollars53.45 53.45 USD CP
53.45US Dollars fail USD
-US Dollar53.45 53.45 USD P
+US Dollar53.45 53.45 USD CP
US Dollat53.45 fail USD
53.45US Dollar fail USD
US Dollars (53.45) fail USD
pattern parse output breaks
// K doesn't support this feature.
0 123 123
-0 123. fail CJK
-0 1.23 fail CJK
+0 123. fail JK
+0 1.23 fail JK
0 -513 -513
-0 -513. fail CJK
-0 -5.13 fail CJK
+0 -513. fail JK
+0 -5.13 fail JK
0.0 123 fail K
-0.0 123. 123 C
-0.0 1.23 1.23 C
+0.0 123. 123
+0.0 1.23 1.23
0.0 -513 fail K
0.0 -513. -513
0.0 -5.13 -5.13
AA1.23 1 fail
// J and K do not support case-insensitive parsing for prefix/suffix.
// J supports it for the exponent separator, but not K.
-AA1.23 0 1.23 CJK
+AA1.23 0 1.23 JK
aa1.23 1 fail
-aa1.23 0 1.23 CJK
+aa1.23 0 1.23 JK
Aa1.23E3 1 1230
Aa1.23E3 0 1230
-Aa1.23e3 1 1.23 CJ
+Aa1.23e3 1 1.23 J
Aa1.23e3 0 1230 K
NaN 1 NaN K
NaN 0 NaN K
nan 1 fail
-nan 0 NaN CJK
+nan 0 NaN JK
test parse infinity and scientific notation overflow
set locale en
+set lenient 1
begin
parse output breaks
NaN NaN K
-1E-99999999999999 -0.0
1E2147483648 Inf K
1E2147483647 Inf K
-1E2147483646 1E2147483646
+1E2147483646 1E+2147483646
1E-2147483649 0
1E-2147483648 0
-// P returns zero here
-1E-2147483647 1E-2147483647 P
+// C and P return zero here
+1E-2147483647 1E-2147483647 CP
1E-2147483646 1E-2147483646
test format push limits
set roundingMode halfDown
begin
maxFractionDigits format output breaks
-// C has trouble formatting too many digits (#11318)
-100 987654321987654321 987654321987654321.00 C
-100 987654321.987654321 987654321.987654321 C
-100 9999999999999.9950000000001 9999999999999.9950000000001 C
-2 9999999999999.9950000000001 10000000000000.00 C
+100 987654321987654321 987654321987654321.00
+100 987654321.987654321 987654321.987654321
+100 9999999999999.9950000000001 9999999999999.9950000000001
+2 9999999999999.9950000000001 10000000000000.00
2 9999999.99499999 9999999.99
// K doesn't support halfDown rounding mode?
2 9999999.995 9999999.99 K
2 9999999.99500001 10000000.00
-100 56565656565656565656565656565656565656565656565656565656565656 56565656565656565656565656565656565656565656565656565656565656.00 C
-100 454545454545454545454545454545.454545454545454545454545454545 454545454545454545454545454545.454545454545454545454545454545 C
+100 56565656565656565656565656565656565656565656565656565656565656 56565656565656565656565656565656565656565656565656565656565656.00
+100 454545454545454545454545454545.454545454545454545454545454545 454545454545454545454545454545.454545454545454545454545454545
100 0.0000000000000000000123 0.0000000000000000000123
-100 -78787878787878787878787878787878 -78787878787878787878787878787878.00 C
-100 -8989898989898989898989.8989898989898989 -8989898989898989898989.8989898989898989 C
+100 -78787878787878787878787878787878 -78787878787878787878787878787878.00
+100 -8989898989898989898989.8989898989898989 -8989898989898989898989.8989898989898989
test ticket 11230
set locale en
-set pattern #,##0
begin
-parse output breaks
+pattern parse output breaks
// K and J return null; S, C, and P return 99
- 9 9 9 CJKP
+#,##0 9 9 99 JK
// K returns null
- 9 999 9999 K
+#,##0 9 999 9999 K
+0 9 9 9 JK
+0 9 999 9 K
test parse ignorables
set locale ar
y g h56 -56 JK
// S stops parsing after the 'i' for these and returns -56
// C stops before the 'i' and gets 56
-56ijk -56 CJK
-56i jk -56 CJK
-56ij k -56 CJK
-56ijk -56 CJK
-56ijk -56 CJK
-56i jk -56 CJK
-56i jk -56 CJK
+56ijk -56 JK
+56i jk -56 JK
+56ij k -56 JK
+56ijk -56 JK
+56ijk -56 JK
+56i jk -56 JK
+56i jk -56 JK
// S and C get 56 (accepts ' ' gs grouping); J and K get null
5 6 fail CP
56 5 JK
pattern format output breaks
0 -15 -15
0; -15 -15
-// C, J, and K still prepend a '-' even though the pattern says otherwise
-0;0 -15 15 CJK
+// J and K still prepend a '-' even though the pattern says otherwise
+0;0 -15 15 JK
test percentage multiplier parsing
// This test is for #13129
set signAlwaysShown 1
begin
format output breaks
-// C, J and K do not support this feature
-42 +42 CJK
-0 +0 CJK
+// J and K do not support this feature
+42 +42 JK
+0 +0 JK
-42 -42
test parse strict with plus sign
lenient parse output breaks
1 42 42
1 -42 -42
-1 +42 42 CJK
+1 +42 42 JK
1 0 0
-1 +0 0 CJK
-0 42 fail CJK
+1 +0 0 JK
+0 42 fail JK
0 -42 -42
-0 +42 42 CJK
-0 0 fail CJK
-0 +0 0 CJK
+0 +42 42 JK
+0 0 fail JK
+0 +0 0 JK
+
+test parse with scientific-separator-affix overlap
+set locale en
+begin
+pattern lenient parse output breaks
+0E0','x 1 5E3,x 5000
+0E0','x 0 5E3,x 5000
+0E0'.'x 1 5E3.x 5000
+0E0'.'x 0 5E3.x 5000
test parse lowercase currency
set locale en