scuffed-code/icu4c/source/test/testdata/numberformattestspecification.txt

759 lines
17 KiB
Plaintext
Raw Normal View History

// Copyright (C) 2015, International Business Machines
// Corporation and others. All Rights Reserved.
//
// This file is divided into test suites separated by whitespace. Each test
// suite starts with the name of the test followed by global field settings
// 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.
// 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
test basic patterns
set locale fr_FR
set format 1234.567
begin
pattern output
#,##0.## 1\u00a0234,57
0.## 1234,57
0 1235
#,##0.### 1\u00a0234,567
###0.###### 1234,567
###0.0000# 1234,5670
00000.0000 01234,5670
#,##0.00 \u00a4 1\u00a0234,57 \u20ac
'tick''bitten '0.00 tick'bitten 1234,57
'tick' 'bitten '0.00 tick bitten 1234,57
test minimum and maximum fraction digits
set locale en
set minIntegerDigits 2
set maxIntegerDigits 4
set minFractionDigits 3
set maxFractionDigits 5
begin
format output
6 06.000
6.000005 06.000
6.000006 06.00001
12 12.000
12345 2345.000
72.1234 72.1234
test rounding
set locale fr
begin
pattern format output breaks
0.5 1.25 1,0 K
0.5 1.75 2,0 K
0.5 -1.25 -1,0 K
00.5 -1.75 -02,0 K
4 2.0 0 K
4 6.0 8 K
4 10.0 8 K
2.70 99.0 99,90 K
2.73 272.0 273,00 K
#,#3.70 104.0 1\u00a003,60 K
test significant digits
set locale en
set pattern #,#@,@###
begin
format output breaks
7 7.0 K
23 23 K
100 100 K
1000 1000 K
10000 1,0000 K
10001 1,0001 K
10001.5 1,0002 K
1234567 1,23,4600 K
-1234567 -1,23,4600 K
3.14159 3.1416 K
test scientific notation
set locale fr
begin
pattern format output breaks
0.00E0 12345 1,23E4
000.00E0 12300 123,00E2
000.0#E0 12300 123,0E2
000.0#E0 12300.1 123,0E2
000.0#E0 12301.0 123,01E2
// JDK does not support exponent signs
000.0#E+00 12301.0 123,01E+02 K
// JDK gives 12,345E3. JDK seems to include the hashes in significant digits
##0.00E0 12345 12,3E3 K
// JDK gives 12,3001E3
##0.0000E0 12300.1 12,300E3 K
// JDK gives 12,3001E3
##0.000#E0 12300.1 12,30E3 K
##0.000#E0 12301 12,301E3
// This should round to nearest 0.05E4 but instead round to nearest 0.05
0.05E0 12301.2 1,25E4 CJK
##0.000#E0 0.17 170,0E-3
// JDK doesn't support significant digits in exponents
@@@E0 6235 6,24E3 K
@@@#E0 6200 6,20E3 K
@@@#E0 6201 6,201E3 K
@@@#E0 6201.7 6,202E3 K
@@@#E00 6201.7 6,202E03 K
@@@#E+00 6201.7 6,202E+03 K
test percents
set locale fr
begin
pattern format output breaks
0.0% 0.573 57,3%
%0.0 0.573 %57,3
p%p0.0 0.573 p%p57,3
p'%'p0.0 0.573 p%p0,6
%@@@@ 0.0326 %3,260 K
%#,@@@ 15.43 %1\u00a0540 K
// JDK does not support rounding increments
%#,##4.1 16.55 %1\u00a0656,4 K
// JDK gives %16,255E3
%##0.00E0 162.55 %16,3E3 K
test permille
set locale fr
begin
pattern format output breaks
0.0\u2030 0.573 573,0‰
\u20300.0 0.573 \u2030573,0
p\u2030p0.0 0.573 p\u2030p573,0
p'\u2030'p0.0 0.573 p\u2030p0,6
\u2030@@@@ 0.0326 \u203032,60 K
\u2030#,@@@ 15.43 \u203015\u00a0400 K
\u2030#,##4.1 16.55 \u203016\u00a0551,7 K
// JDK gives \u2030162,55E3
\u2030##0.00E0 162.55 \u2030163E3 K
test padding
set locale fr_FR
begin
pattern format output breaks
// JDK does not seem to support padding
$**####,##0 1234 $***1\u00a0234 K
*x$####,##0 1234 xxx$1\u00a0234 K
####,##0*x$ 1234 1\u00a0234xxx$ K
####,##0$*x 1234 1\u00a0234$xxx K
// JDK doesn't seem to handle suffixes correctly dropping the 'nx' entirely
####,##0$*x;ne#n -1234 ne1\u00a0234nx K
####,##0$*x;n#'*' -1234 n1\u00a0234*xx K
*y%4.2###### 4.33 yyyy%432,6 K
// In C & J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4)
\u00a4\u00a4 **####0.00 433.0 EUR *433,00 CJK
// In C & J ICU adds padding as if 'EUR' is only 2 chars (2 * 0xa4)
\u00a4\u00a4 **#######0 433.0 EUR *433,00 CJK
test padding and currencies
begin
locale currency pattern format output breaks
// In J, JPY is considered 2 char (2 * 0xa4) even though padding is done
// after prefix. In C this test works.
fr JPY \u00a4\u00a4 **#######0 433.22 JPY ****433 JK
// JDK doesn't correct rounding for currency, shows USD (433
en USD \u00a4\u00a4 **#######0;\u00a4\u00a4 (#) -433.22 USD (433.22) K
test currencies
set locale fr
set format 1234.567
begin
pattern currency output breaks
// JDK gives shows EUR instead of the euro symbol in this case
#,##0.00 \u00a4 EUR 1\u00a0234,57 \u20ac K
// JDK gives 1\u00A0234,57. JDK doesn't seem to correct rounding
// based on currency.
#,##0.00 \u00a4 JPY 1\u00a0235 JPY K
test prefixes and suffixes
set locale en
set pattern 0.00+;(#)
begin
format output breaks
7 7.00+
// JDK does not support negative suffixes
-3.5 (3.50) K
test minimum grouping digits
set locale en
set pattern #,##0
set minGroupingDigits 2
begin
format output breaks
// min grouping digits not supported in any existing implementation
// but is supported in the new C code.
1000 1000 CJK
10000 10,000
100000 100,000
1000000 1,000,000
test min max fraction digits
set locale en
set pattern #,##0.###
set format 1234.567
begin
minFractionDigits maxFractionDigits output
0 0 1,235
0 2 1,234.57
4 5 1,234.5670
test min max integer digits
set locale en
set pattern #,##0.###
set format 1234.567
begin
minIntegerDigits maxIntegerDigits output
0 0 .567
0 3 234.567
5 5 01,234.567
test min max fraction digits scientific
set locale en
set pattern #E0
set format 299792458.0
begin
minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks
// 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
// JDK gives 300E6
0 3 0 0 299.792458E6 K
// JDK gives 299.8E6 (maybe maxInt + maxFrac instead of minInt + maxFrac)?
0 3 0 1 300E6 K
// JDK gives 299.7925E6
2 3 0 4 299.792E6 K
// JDK gives 299.79246E6
2 3 0 5 299.7925E6 K
3 3 0 5 299.79246E6
3 3 0 4 299.7925E6
2 2 0 3 29.979E7
4 4 0 0 2998E5
0 0 1 5 .29979E9
// JDK gives E0
0 0 1 0 2.99792458E8 K
// JDK gives .2998E9
0 0 0 4 2.998E8 K
// JDK uses 8 + 6 for significant digits instead of 2 + 6
2 8 1 6 2.9979246E8 K
// 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.
2 9 1 6 29.979246E7 K
test significant digits scientific
set locale en
set pattern #E0
set format 290000000.0
begin
minSigDigits maxSigDigits output breaks
0 1 3E8 K
0 2 2.9E8 K
0 3 2.9E8 K
1 1 3E8 K
1 2 2.9E8 K
1 3 2.9E8 K
2 2 2.9E8 K
2 3 2.9E8 K
3 3 2.90E8 K
3 4 2.90E8 K
test min max fraction digits scientific 2
set locale en
set pattern #E0
set format 29979245.0
begin
minIntegerDigits maxIntegerDigits minFractionDigits maxFractionDigits output breaks
// JDK gives E0
0 0 0 0 2.9979245E7 K
// JDK gives .3E8
0 1 0 0 2.9979245E7 K
// JDK gives 2998E4.
0 4 0 0 2997.9245E4 K
test ticket 11524
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
test patterns with zero
set locale en
set format 0
begin
pattern output
#.# 0
#. 0.
.# .0
# 0
00.000E00 00.000E00
0.####E0 0E0
##0.######E000 0E000
test significant digits manually set
set locale en_US
set pattern 0.0
set useSigDigits 1
set minSigDigits 3
set maxSigDigits 5
begin
format output breaks
0.0012 0.00120 K
0.00123 0.00123 K
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.76 -43.76 K
-43.762 -43.762 K
-43.7626 -43.763 K
test grouping used setters
set locale en_US
set pattern #,##0
set format 12345
begin
output useGrouping
12,345
12,345 1
12345 0
test grouping setters
set locale en_US
set pattern 0
set format 123456789
set useGrouping 1
begin
output grouping breaks grouping2 minGroupingDigits
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
123456789 6 CJK 6 4
test multiplier setters
set locale en_US
begin
format multiplier output breaks
23 -12 -276
23 -1 -23
// ICU4J and JDK throw exception on zero multiplier. ICU4C does not.
23 0 23 JK
23 1 23
23 12 276
-23 12 -276
-23 -12 276
test rounding setters
set locale en_US
set pattern 0.0#
set roundingIncrement 0.25
begin
format output breaks
-0.35 -0.25 K
0.35 0.25 K
0.39 0.5 K
0.62 0.5 K
0.63 0.75 K
test padding setters
set locale en_US
set pattern bill0
set format 1357
begin
padCharacter formatWidth output breaks
* 8 bill1357 K
* 9 *bill1357 K
^ 10 ^^bill1357 K
test use scientific setter
set locale en_US
set pattern 0.00
set format 186283
begin
output breaks useScientific
186283.00
1.86E5 K 1
186283.00 K 0
test rounding mode setters
set locale en_US
set pattern 0.#
set roundingIncrement 0.5
begin
format roundingMode output breaks
1.24 halfUp 1 K
1.25 halfUp 1.5 K
1.25 halfDown 1 K
1.26 halfDown 1.5 K
1.25 halfEven 1 K
-1.01 up -1.5 K
-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
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
test exponent parameter setters
set locale en_US
set pattern 0.##E0
set format 299792458
begin
decimalSeparatorAlwaysShown exponentSignAlwaysShown minimumExponentDigits output breaks
0 0 2 3E08 K
0 1 3 3E+008 K
// ICU DecimalFormat both C and J do 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 CJK
1 1 3 3.E+008 CJK
1 0 1 3.E8 CJ
0 0 1 3E8
test exponent decimalSeparatorAlwaysShown default
set locale en_US
set pattern 0.##E0
begin
format output breaks decimalSeparatorAlwaysShown
// decimalSeparatorAlwaysShown off by default
299792458 3E8
299000000 2.99E8
299792458 3.E8 CJ 1
test pad position setters
set locale en_US
set pattern **[#####0.##];((#))
begin
format padPosition output breaks
12.34 beforePrefix ****[12.34] K
12.34 afterPrefix [****12.34] K
12.34 beforeSuffix [12.34****] K
12.34 afterSuffix [12.34]**** K
-12.34 beforePrefix **((12.34)) K
-12.34 afterPrefix ((**12.34)) K
-12.34 beforeSuffix ((12.34**)) K
-12.34 afterSuffix ((12.34))** K
test affix setters
set locale fr_FR
set currency EUR
set pattern 0.00
begin
format positivePrefix positiveSuffix negativePrefix negativeSuffix output
12.34 % %12,34
12.34 \u00a4\u00a4 12,34\u00a4\u00a4
12.34 - + 12,34
-12.34 - + -12,34+
-12.34 \u00a4 \u00a412,34
12.34 \u00a4 12,34
-12.34 % 12,34%
12.34 % 12,34
test more affix setters
set locale fr_FR
set pattern %0.00
begin
format positivePrefix negativePrefix output
0.648 booya cooya booya64,80
test nan and infinity
set locale en_US
set pattern [0.00];(#)
begin
format output breaks
Inf [\u221e] K
-Inf (\u221e) K
NaN NaN K
test nan and infinity with multiplication
set locale en
set multiplier 100
begin
format output breaks
Inf \u221e
-Inf -\u221e
NaN NaN K
test nan and infinity with padding
set locale en_US
set pattern $$$0.00$
set formatWidth 7
begin
format padPosition output breaks
Inf beforePrefix $$$\u221e$ K
Inf afterPrefix $$$ \u221e$ K
Inf beforeSuffix $$$\u221e $ K
Inf afterSuffix $$$\u221e$ K
NaN beforePrefix NaN K
NaN afterPrefix NaN K
NaN beforeSuffix NaN K
NaN afterSuffix NaN K
test apply localized patterns
begin
locale localizedPattern format output breaks
en 0% 0.4376 44%
// This next test breaks JDK. JDK doesn't multiply by 100.
fa \u06f0\u066a 0.4376 \u06f4\u06f4\u066a K
test toPattern
set locale en
begin
pattern toPattern breaks
// JDK doesn't support any patterns with padding or both negative prefix and suffix
// Breaks ICU4C and ICU4J See ticket 11671
**0,000 **0,000 CJK
**##0,000 **##0,000 K
**###0,000 **###0,000 K
**####0,000 **#,##0,000 K
###,000. #,000.
0,000 #0,000
.00 #.00
000 #000
000,000 #,000,000
pp#,000 pp#,000
00.## #00.##
#,#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
// No significant digits in JDK
@@### @@### K
@,@#,### @,@#,### K
0.00E0 0.00E0
@@@##E0 @@@##E0 K
###0.00#E0 ###0.00#E0
##00.00#E0 ##00.00#E0
0.00E+00 0.00E+00 K
000.00E00 000.00E00
###0.00#E00 ###0.00#E00
test parse
set locale en
set pattern +#,##0.0###;(#)
begin
parse output breaks
+5,347.25 5347.25
+5,347,.25 5347.25
+5,347, 5347
+5347,,, 5347
+5347,,,d8 5347
(5,347.25) -5347.25
// 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
+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 J
(34 25 E-1) -342.5 JK
(34,,25 E-1) -3425 J
// Spaces are not allowed after exponent symbol
// C parses up to the E but J bails
(34 25E -1) -3425 JK
+3.52EE4 3.52
+1,234,567.8901 1234567.8901
+1,23,4567.8901 1234567.8901
+1,23,4567.89,01 1234567.89
+1,23,456.78.9 123456.78
+12.34,56 12.34
+79,,20,3 79203
+79 20 3 79203 K
// Parsing stops at comma as it is different from other separators
+79 20,3 7920 K
+79,,20 3 7920
+ 79 79 K
+,79,,20,3 79203
+7920d3 7920
// Whitespace immediately after prefix doesn't count as digit separator
// in C but is does in J
+ ,79,,20,3 79203 JK
( 19 45) -1945 K
// C allows trailing separators when there is a prefix and suffix.
// J allows trailing separators only when there is just a prefix.
// In this case, J just bails
( 19 45 ) -1945 JK
(,,19,45) -1945
// C parses to the space, but J bails
(,,19 45) -19 J
// J bails b/c comma different separator than space. C doesn't treat leading spaces
// as a separator.
( 19,45) -1945 JK
// J bails. Doesn't allow trailing separators when there is prefix and suffix.
(,,19,45,) -1945 J
// J bails on next 4 because J doesn't allow letters inside prefix and suffix.
// C will parse up to the letter.
(,,19,45,d1) -1945 J
(,,19,45d1) -1945 J
( 19 45 d1) -1945 JK
( 19 45d1) -1945 JK
// J does allow trailing separator before a decimal point
(19,45,.25) -1945.25
// 2nd decimal points are ignored
+4.12.926 4.12
test parse suffix
set locale en
set pattern #,##0.0###+;#-
begin
parse output breaks
// C sees this as -3426, don't understand why
3426 -3426 JK
3426+ 3426
// J bails, but JDK will parse up to the space and get 34.
// C 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 JK
1,234- -1234
// J bails because of trailing separators
1,234,- -1234 J
// J bails here too
1234 - -1234 J
test parse strict
set locale en
set pattern +#,##0.0###;(#)
set lenient 0
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
// 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
+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
// 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
// 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
// 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
+1,23,4567.8901 fail K
+1234,567.8901 fail K
+1,234567.8901 fail K
+1234567.8901 1234567.8901
// 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
+79 79
+79 79
+ 79 fail
// JDK parses as -1945
(1,945d1) fail K
test parse strange prefix
set locale en
set positivePrefix dd
set negativePrefix ddd
begin
parse output
dd4582 4582
ddd4582 -4582
test parse strange suffix
set locale en
set positiveSuffix dd
set negativePrefix
set negativeSuffix ddd
begin
parse output
4582dd 4582
4582ddd -4582
test really strange suffix
set locale en
set positiveSuffix 9K
set negativePrefix
set negativeSuffix 9N
begin
parse output breaks
// C consumes the '9' as a digit and assumes number is negative
// J and JDK bail
6549K 654 CJK
// C consumes the '9' as a digit and assumes number is negative
// J and JDK bail
6549N -654 CJK
test really strange prefix
set locale en
set positivePrefix 82
set negativePrefix 28
begin
parse output
8245 45
2845 -45
test select
set locale sr
begin
format pattern plural
Inf 0 other
-Inf 0 other
NaN 0 other
Inf 0.0 other
-Inf 0.0 other
NaN 0.0 other
1 0 one
1 0.0 other
2 0 few
2 0.0 other
2 0E0 other
5.1 0.0 one
5.09 0.0 one