Index: icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt |
=================================================================== |
--- icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt (revision 39589) |
+++ icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt (working copy) |
@@ -17,8 +17,8 @@ |
set pattern +0;-# |
begin |
format output breaks |
-6 \u200F+\u0666 JK |
--6 \u200F-\u0666 JK |
+6 \u061C+\u0666 JK |
+-6 \u061C-\u0666 K |
test basic patterns |
set locale fr_FR |
@@ -54,6 +54,75 @@ |
12345 2345.000 |
72.1234 72.1234 |
+test patterns with no '0' symbols |
+set locale en_US |
+begin |
+pattern format output breaks |
+# 514.23 514 |
+# 0.23 0 |
+# 0 0 |
+# 1 1 |
+##.# 514.23 514.2 |
+##.# 0.23 0.2 |
+##.# 0 0 |
+##.# 1 1 |
+#.# 514.23 514.2 |
+#.# 0.23 0.2 |
+#.# 0 0 |
+#.# 1 1 |
+.# 514.23 514.2 |
+.# 0.23 .2 |
+.# 0 .0 |
+.# 1 1.0 |
+#. 514.23 514. |
+#. 0.23 0. |
+#. 0 0. |
+#. 1 1. |
+. 514.23 514. |
+. 0.23 0. |
+. 0 0. |
+. 1 1. |
+ |
+test behavior on numbers approaching zero |
+set locale en |
+begin |
+pattern format output breaks |
+#.## 0.01 0.01 |
+#.## 0.001 0 |
+#.## 0 0 |
+#.00 0.01 .01 |
+#.00 0.001 .00 |
+#.00 0 .00 |
+0.00 0.01 0.01 |
+0.00 0.001 0.00 |
+0.00 0 0.00 |
+ |
+// Not in official spec, but needed for backwards compatibility |
+test patterns with leading grouping separator |
+set locale en_US |
+begin |
+pattern format output breaks |
+,##0 1234.56 1,235 |
+'#',## 3456 #34,56 |
+ |
+test patterns with valid and invalid quote marks |
+set locale et |
+begin |
+pattern format output breaks |
+'# 1 fail |
+''# 1 '1 |
+'''# 1 fail |
+''''# 1 ''1 |
+'''''# 1 fail |
+'-''-'# 1 -'-1 |
+// K doesn't know the locale symbol for et |
+-'-'# 1 −-1 K |
+'#'# 1 #1 |
+''#'' 1 '1' |
+''#- 1 '1− K |
+'-'#- 1 -1− K |
+-#'-' 1 −1- K |
+ |
test int64 |
set locale en |
begin |
@@ -113,6 +182,7 @@ |
0.05E0 12301.2 1,25E4 JK |
##0.000#E0 0.17 170,0E-3 |
// JDK doesn't support significant digits in exponents |
+@@@E0 6.235 6,24E0 K |
@@@E0 6235 6,24E3 K |
@@@#E0 6200 6,20E3 K |
@@@#E0 6201 6,201E3 K |
@@ -119,7 +189,30 @@ |
@@@#E0 6201.7 6,202E3 K |
@@@#E00 6201.7 6,202E03 K |
@@@#E+00 6201.7 6,202E+03 K |
+// If no zeros are specified, significant digits is fraction length plus 1 |
+#.##E0 52413 5,24E4 |
+###.##E0 52413 52,4E3 K |
+#E0 52413 5,2413E4 K |
+0E0 52413 5E4 |
+test scientific with grouping |
+set locale en |
+set pattern #,##0.000E0 |
+begin |
+format output breaks |
+// J throws an IllegalArgumentException when parsing the pattern. |
+1 1.000E0 J |
+11 11.00E0 J |
+111 111.0E0 J |
+// K doesn't print the grouping separator ("1111E0") |
+1111 1,111E0 JK |
+// K prints too many digits ("1.1111E4") |
+11111 1.111E4 JK |
+111111 11.11E4 JK |
+1111111 111.1E4 JK |
+11111111 1,111E4 JK |
+111111111 1.111E8 JK |
+ |
test percents |
set locale fr |
begin |
@@ -165,7 +258,7 @@ |
// In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) |
\u00a4\u00a4 **####0.00 433.0 EUR *433,00 JK |
// In J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4) |
-\u00a4\u00a4 **#######0 433.0 EUR *433,00 JK |
+\u00a4\u00a4 **#######0 433.0 EUR ****433 JK |
test padding and currencies |
begin |
@@ -235,13 +328,16 @@ |
set format 299792458.0 |
begin |
minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks |
+// JDK gives 2.99792458E8 (maxInt + maxFrac instead of minInt + maxFrac) |
+1 1000 0 5 2.99792E8 K |
// JDK gives .3E9 instead of unlimited precision. |
0 1 0 0 2.99792458E8 K |
1 1 0 0 3E8 |
// JDK gives E0 instead of allowing for unlimited precision |
-0 0 0 0 2.99792458E8 K |
-// JDK gives .299792E9 |
-0 1 0 5 2.9979E8 K |
+// S obeys the maximum integer digits and returns .299792458E9 |
+0 0 0 0 2.99792458E8 KS |
+// JDK and S give .299792E9 |
+0 1 0 5 2.9979E8 KS |
// JDK gives 300E6 |
0 3 0 0 299.792458E6 K |
// JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)? |
@@ -256,11 +352,14 @@ |
4 4 0 0 2998E5 |
0 0 1 5 .29979E9 |
// JDK gives E0 |
-0 0 1 0 2.99792458E8 K |
+// S obeys the maximum integer digits |
+0 0 1 0 2.99792458E8 KS |
// JDK gives .2998E9 |
-0 0 0 4 2.998E8 K |
+0 0 0 4 2.998E8 KS |
+// S correctly formats this as 29.979246E7. |
// JDK uses 8 + 6 for significant digits instead of 2 + 6 |
-2 8 1 6 2.9979246E8 K |
+// J and C return 2.9979246E8. |
+2 8 1 6 29.979246E7 CJK |
// Treat max int digits > 8 as being the same as min int digits. |
// This behavior is not spelled out in the specification. |
// JDK fails here because it tries to use 9 + 6 = 15 sig digits. |
@@ -290,7 +389,8 @@ |
begin |
minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks |
// JDK gives E0 |
-0 0 0 0 2.9979245E7 K |
+// S obeys the max integer digits and prints 0.299... |
+0 0 0 0 2.9979245E7 KS |
// JDK gives .3E8 |
0 1 0 0 2.9979245E7 K |
// JDK gives 2998E4. |
@@ -300,23 +400,27 @@ |
set locale en |
set pattern #,##0.### |
begin |
-format maxIntegerDigits output |
-123 1 3 |
-123 -2147483648 0 |
-12345 1 5 |
-12345 -2147483648 0 |
-5.3 1 5.3 |
-5.3 -2147483648 .3 |
+format maxIntegerDigits output breaks |
+123 1 3 |
+0 0 0 |
+// S ignores max integer if it is less than zero and prints "123" |
+123 -2147483648 0 S |
+12345 1 5 |
+12345 -2147483648 0 S |
+5.3 1 5.3 |
+5.3 -2147483648 .3 S |
test patterns with zero |
set locale en |
set format 0 |
begin |
-pattern output |
+pattern output breaks |
#.# 0 |
#. 0. |
.# .0 |
# 0 |
+#,##0.00 0.00 |
+#,###.00 .00 |
00.000E00 00.000E00 |
0.####E0 0E0 |
##0.######E000 0E000 |
@@ -334,8 +438,8 @@ |
0.001234 0.001234 K |
0.0012345 0.0012345 K |
0.00123456 0.0012346 K |
--43 -43.0 K |
--43.7 -43.7 K |
+-43 -43.0 |
+-43.7 -43.7 |
-43.76 -43.76 K |
-43.762 -43.762 K |
-43.7626 -43.763 K |
@@ -360,7 +464,7 @@ |
1,2345,6789 4 |
1,23,45,6789 4 K 2 |
1,23,45,6789 4 K 2 2 |
-123,456789 6 K 6 3 |
+123,456789 6 6 3 |
123456789 6 JK 6 4 |
test multiplier setters |
@@ -370,7 +474,7 @@ |
23 -12 -276 |
23 -1 -23 |
// ICU4J and JDK throw exception on zero multiplier. ICU4C does not. |
-23 0 23 JK |
+23 0 23 JKS |
23 1 23 |
23 12 276 |
-23 12 -276 |
@@ -394,7 +498,7 @@ |
set format 1357 |
begin |
padCharacter formatWidth output breaks |
-* 8 bill1357 K |
+* 8 bill1357 |
* 9 *bill1357 K |
^ 10 ^^bill1357 K |
@@ -406,7 +510,7 @@ |
output breaks useScientific |
186283.00 |
1.86E5 K 1 |
-186283.00 K 0 |
+186283.00 0 |
test rounding mode setters |
set locale en_US |
@@ -423,20 +527,44 @@ |
-1.49 down -1 K |
1.01 up 1.5 K |
1.49 down 1 K |
--1.01 ceiling -1 K |
--1.49 floor -1.5 K |
+-1.01 ceiling -1 |
+-1.49 floor -1.5 |
test currency usage setters |
-// TODO: Find a country and currency where standard and cash differ |
set locale CH |
-set currency CHF |
set pattern \u00a4\u00a4 0 |
begin |
-format currencyUsage output breaks |
-0.37 standard CHF 0.37 K |
-// TODO: Get the rounding data into ICU4C and ICU4J |
-0.37 cash CHF 0.35 CJK |
+format currency currencyUsage output breaks |
+0.37 CHF standard CHF 0.37 K |
+0.37 CHF cash CHF 0.35 CK |
+1.234 CZK standard CZK 1.23 K |
+1.234 CZK cash CZK 1 |
+test currency usage to pattern |
+set locale en |
+begin |
+currency currencyUsage toPattern breaks |
+// These work in J, but it prepends an extra hash sign to the pattern. |
+// K does not support this feature. |
+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 |
+set currency USD |
+begin |
+pattern format output breaks |
+# 123 123 S |
+// Currency rounding should always override the pattern. |
+// K prints the currency in ISO format for some reason. |
+\u00a4# 123 $123.00 K |
+\u00a4#.000 123 $123.00 K |
+\u00a4#.## 123 $123.00 K |
+ |
test exponent parameter setters |
set locale en_US |
set pattern 0.##E0 |
@@ -445,12 +573,10 @@ |
decimalSeparatorAlwaysShown exponentSignAlwaysShown minimumExponentDigits output breaks |
0 0 2 3E08 K |
0 1 3 3E+008 K |
-// ICU DecimalFormat J does not honor decimalSeparatorAlwaysShown |
-// for scientific notation. But JDK DecimalFormat does honor |
// decimalSeparatorAlwaysShown K=JDK; C=ICU4C; J=ICU4J |
// See ticket 11621 |
-1 0 2 3.E08 JK |
-1 1 3 3.E+008 JK |
+1 0 2 3.E08 K |
+1 1 3 3.E+008 K |
1 0 1 3.E8 |
0 0 1 3E8 |
@@ -462,7 +588,7 @@ |
// decimalSeparatorAlwaysShown off by default |
299792458 3E8 |
299000000 2.99E8 |
-299792458 3.E8 J 1 |
+299792458 3.E8 1 |
test pad position setters |
set locale en_US |
@@ -505,7 +631,7 @@ |
set pattern [0.00];(#) |
begin |
format output breaks |
-Inf [\u221e] K |
+Inf [\u221e] |
-Inf (\u221e) K |
NaN NaN K |
@@ -539,36 +665,38 @@ |
locale pattern format output breaks |
en #0% 0.4376 44% |
// This next test breaks JDK. JDK doesn't multiply by 100. |
-// It also is now broken in ICU4J until #10368 is fixed. |
-fa \u0025\u00a0\u0023\u0030 0.4376 \u200e\u066a\u00a0\u06f4\u06f4 JK |
+fa \u0025\u00a0\u0023\u0030 0.4376 \u200e\u066a\u00a0\u06f4\u06f4 K |
test toPattern |
set locale en |
begin |
pattern toPattern breaks |
+// All of the "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 K |
+**####0,000 **#,##0,000 KS |
###,000. #,000. |
-0,000 #0,000 |
+0,000 #0,000 S |
.00 #.00 |
-000 #000 |
-000,000 #,000,000 |
+000 #000 S |
+000,000 #,000,000 S |
pp#,000 pp#,000 |
-00.## #00.## |
+00.## #00.## S |
#,#00.025 #,#00.025 |
// No secondary grouping in JDK |
#,##,###.02500 #,##,###.02500 K |
pp#,000;(#) pp#,000;(#,000) K |
-**####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) K |
+**####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) KS |
// No significant digits in JDK |
@@### @@### K |
@,@#,### @,@#,### K |
0.00E0 0.00E0 |
-@@@##E0 @@@##E0 K |
+// The following one works in JDK, probably because |
+// it just returns the same string |
+@@@##E0 @@@##E0 |
###0.00#E0 ###0.00#E0 |
##00.00#E0 ##00.00#E0 |
0.00E+00 0.00E+00 K |
@@ -589,7 +717,8 @@ |
// J requires prefix and suffix for lenient parsing, but C doesn't |
5,347.25 5347.25 JK |
(5,347.25 -5347.25 J |
--5,347.25 fail |
+// S is successful at parsing this as -5347.25 in lenient mode |
+-5,347.25 fail S |
+3.52E4 35200 |
(34.8E-3) -0.0348 |
// JDK stops parsing at the spaces. JDK doesn't see space as a grouping separator |
@@ -598,7 +727,7 @@ |
// J doesn't allow trailing separators before E but C does |
(34,,25,E-1) -342.5 J |
(34 25 E-1) -342.5 JK |
-(34,,25 E-1) -3425 J |
+(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 |
@@ -648,16 +777,16 @@ |
set pattern #,##0.0###+;#- |
begin |
parse output breaks |
-// C sees this as -3426, don't understand why |
-3426 -3426 JK |
+// C sees this as -3426, don't understand why. |
+// J and K just bail. |
+3426 3426 JKC |
3426+ 3426 |
-// J bails, but JDK will parse up to the space and get 34. |
-// C sees -34 |
-34 d1+ -34 JK |
+// J bails; C and K see -34 |
+34 d1+ 34 JKC |
// 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 JK |
+1,234,,,+ 1234 JKC |
1,234- -1234 |
// J bails because of trailing separators |
1,234,- -1234 J |
@@ -668,49 +797,53 @@ |
test parse strict |
set locale en |
-set pattern +#,##0.0###;(#) |
+set pattern +#,##,##0.0###;(#) |
set lenient 0 |
+set minGroupingDigits 2 |
begin |
parse output breaks |
+123d5 123 |
+5347.25 5347.25 |
// separators in wrong place cause failure, no separators ok. |
-+5,347.25 5347.25 |
-(5347.25) -5347.25 |
-(5,347.25) -5347.25 |
++65,347.25 65347.25 |
+(65347.25) -65347.25 |
+(65,347.25) -65347.25 |
// JDK does allow separators in the wrong place and parses as -5347.25 |
(53,47.25) fail K |
// strict requires prefix or suffix |
-5,347.25 fail |
+65,347.25 fail |
+3.52E4 35200 |
(34.8E-3) -0.0348 |
(3425E-1) -342.5 |
// Strict doesn't allow separators in sci notation. |
-(3,425) -3425 |
-// JDK allows separators in sci notation and parses as -342.5 |
-(3,425E-1) fail K |
+(63,425) -63425 |
+// JDK and S allow separators in sci notation and parses as -342.5 |
+(63,425E-1) fail KS |
// Both prefix and suffix needed for strict. |
// JDK accepts this and parses as -342.5 |
(3425E-1 fail K |
+3.52EE4 3.52 |
-+1,234,567.8901 1234567.8901 |
++12,34,567.8901 1234567.8901 |
// With strict digit separators don't have to be the right type |
// JDK doesn't acknowledge space as a separator |
-+1 234 567.8901 1234567.8901 K |
++12 34 567.8901 1234567.8901 K |
// In general the grouping separators have to match their expected |
// location exactly. The only exception is when string being parsed |
// have no separators at all. |
-+1,234,567.8901 1234567.8901 |
-// JDK doesn't require separators to be in the right place |
++12,345.67 12345.67 |
+// JDK doesn't require separators to be in the right place. |
+1,23,4567.8901 fail K |
++1,234,567.8901 fail K |
+1234,567.8901 fail K |
+1,234567.8901 fail K |
+1234567.8901 1234567.8901 |
+// Minimum grouping is not satisfied below, but that's ok |
+// because minimum grouping is optional. |
++1,234.5 1234.5 |
// Comma after decimal means parse to a comma |
-+123,456.78,9 123456.78 |
-// A decimal after a decimal means bail |
-// JDK parses as 123456.78 |
-+123,456.78.9 fail K |
++1,23,456.78,9 123456.78 |
+// J fails upon seeing the second decimal point |
++1,23,456.78.9 123456.78 J |
+79 79 |
+79 79 |
+ 79 fail |
@@ -717,6 +850,17 @@ |
// JDK parses as -1945 |
(1,945d1) fail K |
+test parse strict without prefix/suffix |
+set locale en |
+set pattern # |
+set lenient 0 |
+begin |
+parse output breaks |
+12.34 12.34 |
+-12.34 -12.34 |
++12.34 12.34 JK |
+$12.34 fail |
+ |
test parse integer only |
set locale en |
set pattern 0.00 |
@@ -724,7 +868,8 @@ |
begin |
parse output breaks |
35 35 |
-+35 fail |
+// S accepts leading plus signs |
++35 35 CJK |
-35 -35 |
2.63 2 |
-39.99 -39 |
@@ -746,8 +891,8 @@ |
set locale en |
begin |
parse output outputCurrency breaks |
-// See ticket 11735 |
-53.45 fail USD J |
+// Fixed in ticket 11735 |
+53.45 fail USD |
test parse strange prefix |
set locale en |
@@ -775,12 +920,13 @@ |
set negativeSuffix 9N |
begin |
parse output breaks |
+// S is the only implementation that passes these cases. |
// C consumes the '9' as a digit and assumes number is negative |
// J and JDK bail |
-// 6549K 654 CJK |
+6549K 654 CJK |
// C consumes the '9' as a digit and assumes number is negative |
// J and JDK bail |
-// 6549N -654 CJK |
+6549N -654 CJK |
test really strange prefix |
set locale en |
@@ -791,6 +937,39 @@ |
8245 45 |
2845 -45 |
+test parse pattern with quotes |
+set locale en |
+set pattern '-'#y |
+begin |
+parse output |
+-45y 45 |
+ |
+test parse with locale symbols |
+// The grouping separator in it_CH is an apostrophe |
+set locale it_CH |
+set pattern # |
+begin |
+parse output breaks |
+१३ 13 |
+१३.३१ 13.31 |
+// J and K stop parsing at the apostrophe |
+123'456 123456 JK |
+524'1.3 5241.3 JK |
+३'१ 31 JK |
+ |
+test parse with European-style comma/period |
+set locale pt |
+set pattern # |
+begin |
+parse output breaks |
+// J and K get 123 |
+123.456 123456 JK |
+123,456 123.456 |
+987,654.321 987.654 |
+987,654 321 987.654 |
+// J and K get 987 |
+987.654,321 987654.321 JK |
+ |
test select |
set locale sr |
begin |
@@ -811,25 +990,28 @@ |
test parse currency ISO |
set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 |
-set locale en_US |
+set locale en_GB |
begin |
parse output outputCurrency breaks |
-$53.45 53.45 USD |
+53.45 fail GBP |
+£53.45 53.45 GBP |
+$53.45 fail USD |
53.45 USD 53.45 USD |
+53.45 GBP 53.45 GBP |
USD 53.45 53.45 USD J |
-53.45USD fail USD |
+53.45USD 53.45 USD CJ |
USD53.45 53.45 USD |
(7.92) USD -7.92 USD |
-(7.92) EUR -7.92 EUR |
+(7.92) GBP -7.92 GBP |
(7.926) USD -7.926 USD |
-(7.926 USD) fail USD |
-(USD 7.926) fail USD |
-USD (7.926) fail USD |
-USD (7.92) fail USD |
-(7.92)USD fail USD |
-USD(7.92) fail 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 |
(8) USD -8 USD |
--8 USD fail USD |
+-8 USD -8 USD CJ |
67 USD 67 USD |
53.45$ fail USD |
US Dollars 53.45 53.45 USD J |
@@ -837,37 +1019,41 @@ |
US Dollar 53.45 53.45 USD J |
53.45 US Dollar 53.45 USD |
US Dollars53.45 53.45 USD |
-53.45US Dollars fail USD |
+53.45US Dollars 53.45 USD CJ |
US Dollar53.45 53.45 USD |
US Dollat53.45 fail USD |
-53.45US Dollar fail USD |
-US Dollars (53.45) fail USD |
+53.45US Dollar 53.45 USD CJ |
+US Dollars (53.45) -53.45 USD CJ |
(53.45) US Dollars -53.45 USD |
-US Dollar (53.45) fail USD |
+(53.45) Euros -53.45 EUR |
+US Dollar (53.45) -53.45 USD CJ |
(53.45) US Dollar -53.45 USD |
-US Dollars(53.45) fail USD |
-(53.45)US Dollars fail USD |
-US Dollar(53.45) fail 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 Dollat(53.45) fail USD |
-(53.45)US Dollar fail USD |
+(53.45)US Dollar -53.45 USD CJ |
test parse currency ISO negative |
set pattern 0.00 \u00a4\u00a4;-# \u00a4\u00a4 |
-set locale en_US |
+set locale en_GB |
begin |
parse output outputCurrency breaks |
-$53.45 53.45 USD |
+53.45 fail GBP |
+£53.45 53.45 GBP |
+$53.45 fail USD |
53.45 USD 53.45 USD |
+53.45 GBP 53.45 GBP |
USD 53.45 53.45 USD J |
-53.45USD fail USD |
+53.45USD 53.45 USD CJ |
USD53.45 53.45 USD |
-7.92 USD -7.92 USD |
--7.92 EUR -7.92 EUR |
+-7.92 GBP -7.92 GBP |
-7.926 USD -7.926 USD |
-USD -7.926 fail USD |
--7.92USD fail USD |
-USD-7.92 fail USD |
+USD -7.926 -7.926 USD CJ |
+-7.92USD -7.92 USD CJ |
+USD-7.92 -7.92 USD CJ |
-8 USD -8 USD |
67 USD 67 USD |
53.45$ fail USD |
@@ -876,70 +1062,75 @@ |
US Dollar 53.45 53.45 USD J |
53.45 US Dollar 53.45 USD |
US Dollars53.45 53.45 USD |
-53.45US Dollars fail USD |
+53.45US Dollars 53.45 USD CJ |
US Dollar53.45 53.45 USD |
US Dollat53.45 fail USD |
-53.45US Dollar fail USD |
+53.45US Dollar 53.45 USD CJ |
test parse currency long |
set pattern 0.00 \u00a4\u00a4\u00a4;(#) \u00a4\u00a4\u00a4 |
-set locale en_US |
+set locale en_GB |
begin |
parse output outputCurrency breaks |
-$53.45 53.45 USD |
+// J throws a NullPointerException on the first case |
+53.45 fail GBP |
+£53.45 53.45 GBP |
+$53.45 fail USD |
53.45 USD 53.45 USD |
+53.45 GBP 53.45 GBP |
USD 53.45 53.45 USD J |
-// See ticket 11735 |
-53.45USD fail USD J |
+53.45USD 53.45 USD CJ |
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) fail USD |
-(USD 7.926) fail USD |
-USD (7.926) fail USD |
-USD (7.92) fail USD |
-(7.92)USD fail USD |
-USD(7.92) fail 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 |
(8) USD -8 USD |
-// See ticket 11735 |
--8 USD fail USD J |
+-8 USD -8 USD CJ |
67 USD 67 USD |
-// See ticket 11735 |
-53.45$ fail USD J |
+// J throws a NullPointerException on the next case |
+53.45$ fail USD |
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 |
-// See ticket 11735 |
-53.45US Dollars fail USD J |
+53.45US Dollars 53.45 USD CJ |
US Dollar53.45 53.45 USD |
US Dollat53.45 fail USD |
-// See ticket 11735 |
-53.45US Dollar fail USD J |
+53.45US Dollar 53.45 USD CJ |
test parse currency short |
set pattern 0.00 \u00a4;(#) \u00a4 |
-set locale en_US |
+set locale en_GB |
begin |
parse output outputCurrency breaks |
-$53.45 53.45 USD |
+53.45 fail GBP |
+£53.45 53.45 GBP |
+$53.45 fail USD |
53.45 USD 53.45 USD |
+53.45 GBP 53.45 GBP |
USD 53.45 53.45 USD J |
-53.45USD fail USD |
+53.45USD 53.45 USD CJ |
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) fail USD |
-(USD 7.926) fail USD |
-USD (7.926) fail USD |
-USD (7.92) fail USD |
-(7.92)USD fail USD |
-USD(7.92) fail 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 |
(8) USD -8 USD |
--8 USD fail USD |
+-8 USD -8 USD CJ |
67 USD 67 USD |
53.45$ fail USD |
US Dollars 53.45 53.45 USD J |
@@ -947,33 +1138,38 @@ |
US Dollar 53.45 53.45 USD J |
53.45 US Dollar 53.45 USD |
US Dollars53.45 53.45 USD |
-53.45US Dollars fail USD |
+53.45US Dollars 53.45 USD CJ |
US Dollar53.45 53.45 USD |
US Dollat53.45 fail USD |
-53.45US Dollar fail USD |
+53.45US Dollar 53.45 USD CJ |
test parse currency short prefix |
set pattern \u00a40.00;(\u00a4#) |
-set locale en_US |
+set locale en_GB |
begin |
parse output outputCurrency breaks |
-$53.45 53.45 USD |
-53.45 USD fail USD |
+53.45 fail GBP |
+£53.45 53.45 GBP |
+$53.45 fail USD |
+53.45 USD 53.45 USD CJ |
+53.45 GBP 53.45 GBP CJ |
USD 53.45 53.45 USD J |
-53.45USD fail USD |
+53.45USD 53.45 USD CJ |
USD53.45 53.45 USD |
-(7.92) USD fail USD |
-(7.926) USD fail USD |
-(7.926 USD) fail USD |
+// S fails these because '(' is an incomplete prefix. |
+(7.92) USD -7.92 USD CJS |
+(7.92) GBP -7.92 GBP CJS |
+(7.926) USD -7.926 USD CJS |
+(7.926 USD) -7.926 USD CJS |
(USD 7.926) -7.926 USD J |
-USD (7.926) fail USD |
-USD (7.92) fail USD |
-(7.92)USD fail USD |
-USD(7.92) fail USD |
-(8) USD fail USD |
--8 USD fail USD |
-67 USD fail USD |
+USD (7.926) -7.926 USD CJS |
+USD (7.92) -7.92 USD CJS |
+(7.92)USD -7.92 USD CJS |
+USD(7.92) -7.92 USD CJS |
+(8) USD -8 USD CJS |
+-8 USD -8 USD CJ |
+67 USD 67 USD CJ |
53.45$ fail USD |
US Dollars 53.45 53.45 USD J |
53.45 US Dollars 53.45 USD |
@@ -980,12 +1176,13 @@ |
US Dollar 53.45 53.45 USD J |
53.45 US Dollar 53.45 USD |
US Dollars53.45 53.45 USD |
-53.45US Dollars fail USD |
+53.45US Dollars 53.45 USD CJ |
US Dollar53.45 53.45 USD |
-53.45US Dollar fail USD |
+53.45US Dollar 53.45 USD CJ |
test format foreign currency |
set locale fa_IR |
+set currency IRR |
begin |
pattern format output breaks |
\u00a4\u00a4\u00a4 0.00;\u00a4\u00a4\u00a4 # 1235 \u0631\u06cc\u0627\u0644 \u0627\u06cc\u0631\u0627\u0646 \u06F1\u06F2\u06F3\u06F5 K |
@@ -1058,6 +1255,22 @@ |
Euro 7.82 7.82 EUR |
Euros 7.82 7.82 EUR |
+test parse currency without currency mode |
+// Should accept a symbol associated with the currency specified by the API, |
+// but should not traverse the full currency data. |
+set locale en_US |
+set pattern \u00a4#,##0.00 |
+begin |
+parse currency output breaks |
+$52.41 USD 52.41 |
+USD52.41 USD 52.41 K |
+\u20ac52.41 USD fail |
+EUR52.41 USD fail |
+$52.41 EUR fail |
+USD52.41 EUR fail |
+\u20ac52.41 EUR 52.41 K |
+EUR52.41 EUR 52.41 |
+ |
test parse currency ISO strict |
set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 |
set locale en_US |
@@ -1110,3 +1323,107 @@ |
format output breaks |
-0.99 -0 JK |
+test parse decimalPatternMatchRequired |
+set locale en |
+set decimalPatternMatchRequired 1 |
+begin |
+pattern parse output breaks |
+// K doesn't support this feature. |
+0 123 123 |
+0 123. fail JK |
+0 1.23 fail JK |
+0 -513 -513 |
+0 -513. fail JK |
+0 -5.13 fail JK |
+0.0 123 fail K |
+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 |
+ |
+test parse minus sign |
+set locale en |
+set pattern # |
+begin |
+parse output breaks |
+-123 -123 |
+- 123 -123 JK |
+ -123 -123 JK |
+ - 123 -123 JK |
+123- -123 JK |
+123 - -123 JK |
+ |
+test parse case sensitive |
+set locale en |
+set lenient 1 |
+set pattern Aa# |
+begin |
+parse parseCaseSensitive output breaks |
+Aa1.23 1 1.23 |
+Aa1.23 0 1.23 |
+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 JK |
+aa1.23 1 fail |
+aa1.23 0 1.23 JK |
+Aa1.23E3 1 1230 |
+Aa1.23E3 0 1230 |
+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 JK |
+ |
+test parse infinity and scientific notation overflow |
+set locale en |
+begin |
+parse output breaks |
+NaN NaN K |
+// JDK returns zero |
+1E999999999999999 Inf K |
+-1E999999999999999 -Inf K |
+1E-99999999999999 0.0 |
+// Note: The test suite code doesn't properly check for 0.0 vs. -0.0 |
+-1E-99999999999999 -0.0 |
+1E2147483648 Inf K |
+1E2147483647 Inf K |
+1E2147483646 1E2147483646 |
+1E-2147483649 0 |
+1E-2147483648 0 |
+// S returns zero here |
+1E-2147483647 1E-2147483647 S |
+1E-2147483646 1E-2147483646 |
+ |
+test format push limits |
+set locale en |
+set minFractionDigits 2 |
+set roundingMode halfDown |
+begin |
+maxFractionDigits format output breaks |
+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 halfDowm rounding mode? |
+2 9999999.995 9999999.99 K |
+2 9999999.99500001 10000000.00 |
+100 56565656565656565656565656565656565656565656565656565656565656 56565656565656565656565656565656565656565656565656565656565656.00 |
+100 454545454545454545454545454545.454545454545454545454545454545 454545454545454545454545454545.454545454545454545454545454545 |
+100 0.0000000000000000000123 0.0000000000000000000123 |
+100 -78787878787878787878787878787878 -78787878787878787878787878787878.00 |
+100 -8989898989898989898989.8989898989898989 -8989898989898989898989.8989898989898989 |
+ |
+test ticket 11230 |
+set locale en |
+set pattern ### |
+begin |
+parse output breaks |
+// K and J return null; S returns 99 |
+ 9 9 9 JKS |
+// K and J return null |
+ 9 999 9999 JK |
+ |