From 2a9d0ccdb2e65c05eb828c62a751efbd39761b39 Mon Sep 17 00:00:00 2001 From: "Shane F. Carr" Date: Thu, 23 Feb 2023 00:52:28 +0000 Subject: [PATCH] ICU-22283 Add additional ERoundingMode variants See #2329 --- icu4c/source/i18n/unicode/numfmt.h | 19 +- icu4c/source/test/intltest/dcfmtest.cpp | 8 +- .../test/intltest/numberformattesttuple.cpp | 5 +- icu4c/source/test/testdata/dcfmtest.txt | 8 + .../numberformattestspecification.txt | 189 ++++++++++++++---- .../data/numberformattestspecification.txt | 189 ++++++++++++++---- .../DataDrivenNumberFormatTestData.java | 5 + .../format/NumberFormatDataDrivenTest.java | 4 +- 8 files changed, 348 insertions(+), 79 deletions(-) diff --git a/icu4c/source/i18n/unicode/numfmt.h b/icu4c/source/i18n/unicode/numfmt.h index 0e9e6cb5c1f..e1aa3092761 100644 --- a/icu4c/source/i18n/unicode/numfmt.h +++ b/icu4c/source/i18n/unicode/numfmt.h @@ -198,7 +198,24 @@ public: * Return U_FORMAT_INEXACT_ERROR if number does not format exactly. * @stable ICU 4.8 */ - kRoundUnnecessary + kRoundUnnecessary, +#ifndef U_HIDE_DRAFT_API + /** + * Rounds ties toward the odd number. + * @draft ICU 73 + */ + kRoundHalfOdd, + /** + * Rounds ties toward +∞. + * @draft ICU 73 + */ + kRoundHalfCeiling, + /** + * Rounds ties toward -∞. + * @draft ICU 73 + */ + kRoundHalfFloor, +#endif /* U_HIDE_DRAFT_API */ }; /** diff --git a/icu4c/source/test/intltest/dcfmtest.cpp b/icu4c/source/test/intltest/dcfmtest.cpp index 10c4abde5a3..f6d6dc1a6b9 100644 --- a/icu4c/source/test/intltest/dcfmtest.cpp +++ b/icu4c/source/test/intltest/dcfmtest.cpp @@ -239,7 +239,7 @@ void DecimalFormatTest::DataDrivenTests() { RegexMatcher formatLineMat(UnicodeString( "(?i)\\s*format\\s+" "(\\S+)\\s+" // Capture group 1: pattern - "(ceiling|floor|down|up|halfeven|halfdown|halfup|default|unnecessary)\\s+" // Capture group 2: Rounding Mode + "([a-z]+)\\s+" // Capture group 2: Rounding Mode "\"([^\"]*)\"\\s+" // Capture group 3: input "\"([^\"]*)\"" // Capture group 4: expected output "\\s*(?:#.*)?"), // Trailing comment @@ -435,6 +435,12 @@ void DecimalFormatTest::execFormatTest(int32_t lineNum, // don't set any value. } else if (round=="unnecessary") { fmtr.setRoundingMode(DecimalFormat::kRoundUnnecessary); + } else if (round=="halfodd") { + fmtr.setRoundingMode(DecimalFormat::kRoundHalfOdd); + } else if (round=="halfceiling") { + fmtr.setRoundingMode(DecimalFormat::kRoundHalfCeiling); + } else if (round=="halffloor") { + fmtr.setRoundingMode(DecimalFormat::kRoundHalfFloor); } else { fmtr.setRoundingMode(DecimalFormat::kRoundFloor); errln("file dcfmtest.txt, line %d: Bad rounding mode \"%s\"", diff --git a/icu4c/source/test/intltest/numberformattesttuple.cpp b/icu4c/source/test/intltest/numberformattesttuple.cpp index dc53f2dd6c5..4cacedcb3c8 100644 --- a/icu4c/source/test/intltest/numberformattesttuple.cpp +++ b/icu4c/source/test/intltest/numberformattesttuple.cpp @@ -39,7 +39,10 @@ static Numberformattesttuple_EnumConversion gRoundingEnum[] = { {"halfEven", DecimalFormat::kRoundHalfEven}, {"halfDown", DecimalFormat::kRoundHalfDown}, {"halfUp", DecimalFormat::kRoundHalfUp}, - {"unnecessary", DecimalFormat::kRoundUnnecessary}}; + {"unnecessary", DecimalFormat::kRoundUnnecessary}, + {"halfOdd", DecimalFormat::kRoundHalfOdd}, + {"halfCeiling", DecimalFormat::kRoundHalfCeiling}, + {"halfFloor", DecimalFormat::kRoundHalfFloor}}; static Numberformattesttuple_EnumConversion gCurrencyUsageEnum[] = { {"standard", UCURR_USAGE_STANDARD}, diff --git a/icu4c/source/test/testdata/dcfmtest.txt b/icu4c/source/test/testdata/dcfmtest.txt index ad5583b0809..1ec2d37825d 100644 --- a/icu4c/source/test/testdata/dcfmtest.txt +++ b/icu4c/source/test/testdata/dcfmtest.txt @@ -139,6 +139,14 @@ format @@@ unnecessary "1231" "Inexact" format @@@@@@@@@@@@@@@@@@@@@@@@@ unnecessary "1234567890123456789012345" "1234567890123456789012345" format @@@@@@@@@@@@@@@@@@@@@@@@@ unnecessary "12345678901234567890123456" "Inexact" +# Other rounding modes +format 0.00 halfodd "1.235" "1.23" +format 0.00 halfodd "1.245" "1.25" +format 0.00 halfceiling "1.235" "1.24" +format 0.00 halfceiling "1.245" "1.25" +format 0.00 halffloor "1.235" "1.23" +format 0.00 halffloor "1.245" "1.24" + # Test cases generated by icuapps/roundmode/roundmode.cpp on 49.1 format 0.0 ceiling "-1.00" "-1.0" diff --git a/icu4c/source/test/testdata/numberformattestspecification.txt b/icu4c/source/test/testdata/numberformattestspecification.txt index aa4fa3c3f7a..1fd518b5c4e 100644 --- a/icu4c/source/test/testdata/numberformattestspecification.txt +++ b/icu4c/source/test/testdata/numberformattestspecification.txt @@ -123,13 +123,12 @@ pattern format output breaks ''''# 1 ''1 '''''# 1 fail '-''-'# 1 -'-1 -// K doesn't know the locale symbol for et --'-'# 1 −-1 K +-'-'# 1 −-1 '#'# 1 #1 ''#'' 1 '1' -''#- 1 '1− K -'-'#- 1 -1− K --#'-' 1 −1- K +''#- 1 '1− +'-'#- 1 -1− +-#'-' 1 −1- test int64 set locale en @@ -299,8 +298,7 @@ set pattern 0.00+;(#) begin format output breaks 7 7.00+ -// JDK does not support negative suffixes --3.5 (3.50) K +-3.5 (3.50) test minimum grouping digits set locale en @@ -681,7 +679,7 @@ set pattern [0.00];(#) begin format output breaks Inf [\u221e] --Inf (\u221e) K +-Inf (\u221e) // J does not print the affixes // K prints \uFFFD NaN [NaN] K @@ -693,7 +691,7 @@ begin format output breaks Inf \u221e -Inf -\u221e -NaN NaN K +NaN NaN test nan and infinity with padding set locale en_US @@ -717,18 +715,14 @@ begin // documentation says localizedPattern is not supported, change to pattern locale pattern format output breaks en #0% 0.4376 44% -// This next test breaks JDK. JDK doesn't multiply by 100. -fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 K +fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 test localized pattern basic symbol coverage begin locale localizedPattern toPattern breaks it #.##0,00 #,##0.00 -// JDK either doesn't know sl uses this character for minus sign -// or doesn't support minus sign in localized pattern -sl #.##0;#.##0− #,##0;#,##0- K -// JDK does not have data for "×10^" in this locale -en_SE 0,00×10^0;0,00×10^0- 0.00E0;0.00E0- K +sl #.##0;#.##0− #,##0;#,##0- +en_SE 0,00×10^0;0,00×10^0- 0.00E0;0.00E0- // JDK does not seem to transform the digits in localized patterns ar_SA #\u066C##\u0660\u066B\u0660\u0660;a# #,##0.00;a#,##0.00 K @@ -752,7 +746,7 @@ pp#,000 pp#,000 #,#00.025 #,#00.025 // No secondary grouping in JDK #,##,###.02500 #,##,###.02500 K -pp#,000;(#) pp#,000;(#,000) K +pp#,000;(#) pp#,000;(#,000) **####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) CJKP // No significant digits in JDK @@### @@### K @@ -779,7 +773,8 @@ parse output breaks +5347,,,d8 5347 (5,347.25) -5347.25 5,347.25 5347.25 K -(5,347.25 -5347.25 +// JDK 11 stopped parsing this +(5,347.25 -5347.25 K // S is successful at parsing this as -5347.25 in lenient mode -5,347.25 -5347.25 K +3.52E4 35200 @@ -789,7 +784,8 @@ parse output breaks (34,,25E-1) -342.5 // Trailing grouping separators are not OK. // C/J/P stop at the offending separator. -(34,,25,E-1) fail CJKP +// JDK 11 gets this right +(34,,25,E-1) fail CJP (34,,25,E-1) -3425 K (34 25 E-1) -342.5 K (34,,25 E-1) -342.5 K @@ -819,12 +815,13 @@ parse output breaks ( 19 45 ) -1945 K (,,19,45) -1945 // C parses to the spaces -(,,19 45) -19 +// JDK 11 stopped parsing this +(,,19 45) -19 K ( 19,45) -1945 K -(,,19,45,) -1945 +(,,19,45,) -1945 K // C will parse up to the letter. -(,,19,45,d1) -1945 -(,,19,45d1) -1945 +(,,19,45,d1) -1945 K +(,,19,45d1) -1945 K ( 19 45 d1) -1945 K ( 19 45d1) -1945 K (19,45,.25) -1945.25 @@ -845,8 +842,8 @@ parse output breaks 1,234,,,+ 1234 K 1,234- -1234 // C and P bail because of trailing separators -1,234,- -1234 CJP -1234 - -1234 +1,234,- -1234 CJKP +1234 - -1234 K @@ -874,8 +871,7 @@ parse output breaks (63,425) -63425 (63,425E-1) -6342.5 // Both prefix and suffix needed for strict. -// JDK accepts this and parses as -342.5 -(3425E-1 fail K +(3425E-1 fail +3.52EE4 3.52 +12,34,567.8901 1234567.8901 // With strict digit separators don't have to be the right type @@ -900,8 +896,7 @@ parse output breaks +79 79 +79 79 + 79 fail -// JDK parses as -1945 -(1,945d1) fail K +(1,945d1) fail test parse strict scientific // See #13737: Old behavior should be retained in this case @@ -1014,9 +1009,10 @@ begin parse output breaks १३ 13 १३.३१‍ 13.31 -123'456 123456 -524'11.3 52411.3 -३'११‍ 311 +// JDK 11 parses this as 123 +123'456 123456 K +524'11.3 52411.3 K +३'११‍ 311 K test parse with European-style comma/period set locale pt @@ -1326,8 +1322,8 @@ USD52.41 USD 52.41 K EUR52.41 USD fail $52.41 EUR fail USD52.41 EUR fail -\u20ac52.41 EUR 52.41 K -EUR52.41 EUR 52.41 +\u20ac52.41 EUR 52.41 +EUR52.41 EUR 52.41 K test parse currency ISO strict set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 @@ -1381,6 +1377,125 @@ begin format output breaks -0.99 -0 K +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode ceil +set locale en +set roundingMode ceiling +begin +format output breaks +-1.5 -1 K +0.4 1 K +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode floor +set locale en +set roundingMode floor +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 0 +0.6 0 K +1.5 1 K + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode expand +set locale en +set roundingMode up +begin +format output breaks +-1.5 -2 +0.4 1 K +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode trunc +set locale en +set roundingMode down +begin +format output breaks +-1.5 -1 K +0.4 0 +0.5 0 +0.6 0 K +1.5 1 K + +// Not supported in Java BigDecimal +test rounding mode halfCeil +set locale en +set roundingMode halfCeiling +begin +format output breaks +-1.5 -1 JKP +0.4 0 JP +0.5 1 JKP +0.6 1 JP +1.5 2 JP + +// Not supported in Java BigDecimal +test rounding mode halfFloor +set locale en +set roundingMode halfFloor +begin +format output breaks +-1.5 -2 JP +0.4 0 JP +0.5 0 JP +0.6 1 JP +1.5 1 JKP + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode halfExpand +set locale en +set roundingMode halfUp +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode halfTrunc +set locale en +set roundingMode halfDown +begin +format output breaks +-1.5 -1 K +0.4 0 +0.5 0 +0.6 1 +1.5 1 K + +test rounding mode halfEven +set locale en +set roundingMode halfEven +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 0 +0.6 1 +1.5 2 + +// Not supported in Java BigDecimal +test rounding mode halfOdd +set locale en +set roundingMode halfOdd +begin +format output breaks +-1.5 -1 JKP +0.4 0 JP +0.5 1 JKP +0.6 1 JP +1.5 1 JKP + test parse decimalPatternMatchRequired set locale en set decimalPatternMatchRequired 1 @@ -1431,8 +1546,8 @@ Aa1.23E3 1 1230 Aa1.23E3 0 1230 Aa1.23e3 1 1.23 Aa1.23e3 0 1230 K -NaN 1 NaN K -NaN 0 NaN K +NaN 1 NaN +NaN 0 NaN nan 1 fail nan 0 NaN K @@ -1441,7 +1556,7 @@ set locale en set lenient 1 begin parse output breaks -NaN NaN K +NaN NaN // JDK returns zero 1E999999999999999 Inf K -1E999999999999999 -Inf K diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt b/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt index aa4fa3c3f7a..1fd518b5c4e 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/data/numberformattestspecification.txt @@ -123,13 +123,12 @@ pattern format output breaks ''''# 1 ''1 '''''# 1 fail '-''-'# 1 -'-1 -// K doesn't know the locale symbol for et --'-'# 1 −-1 K +-'-'# 1 −-1 '#'# 1 #1 ''#'' 1 '1' -''#- 1 '1− K -'-'#- 1 -1− K --#'-' 1 −1- K +''#- 1 '1− +'-'#- 1 -1− +-#'-' 1 −1- test int64 set locale en @@ -299,8 +298,7 @@ set pattern 0.00+;(#) begin format output breaks 7 7.00+ -// JDK does not support negative suffixes --3.5 (3.50) K +-3.5 (3.50) test minimum grouping digits set locale en @@ -681,7 +679,7 @@ set pattern [0.00];(#) begin format output breaks Inf [\u221e] --Inf (\u221e) K +-Inf (\u221e) // J does not print the affixes // K prints \uFFFD NaN [NaN] K @@ -693,7 +691,7 @@ begin format output breaks Inf \u221e -Inf -\u221e -NaN NaN K +NaN NaN test nan and infinity with padding set locale en_US @@ -717,18 +715,14 @@ begin // documentation says localizedPattern is not supported, change to pattern locale pattern format output breaks en #0% 0.4376 44% -// This next test breaks JDK. JDK doesn't multiply by 100. -fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 K +fa \u0025\u00a0\u0023\u0030 0.4376 \u066a\u00a0\u06f4\u06f4 test localized pattern basic symbol coverage begin locale localizedPattern toPattern breaks it #.##0,00 #,##0.00 -// JDK either doesn't know sl uses this character for minus sign -// or doesn't support minus sign in localized pattern -sl #.##0;#.##0− #,##0;#,##0- K -// JDK does not have data for "×10^" in this locale -en_SE 0,00×10^0;0,00×10^0- 0.00E0;0.00E0- K +sl #.##0;#.##0− #,##0;#,##0- +en_SE 0,00×10^0;0,00×10^0- 0.00E0;0.00E0- // JDK does not seem to transform the digits in localized patterns ar_SA #\u066C##\u0660\u066B\u0660\u0660;a# #,##0.00;a#,##0.00 K @@ -752,7 +746,7 @@ pp#,000 pp#,000 #,#00.025 #,#00.025 // No secondary grouping in JDK #,##,###.02500 #,##,###.02500 K -pp#,000;(#) pp#,000;(#,000) K +pp#,000;(#) pp#,000;(#,000) **####,##,##0.0##;(#) **#,##,##,##0.0##;**(##,##,##0.0##) CJKP // No significant digits in JDK @@### @@### K @@ -779,7 +773,8 @@ parse output breaks +5347,,,d8 5347 (5,347.25) -5347.25 5,347.25 5347.25 K -(5,347.25 -5347.25 +// JDK 11 stopped parsing this +(5,347.25 -5347.25 K // S is successful at parsing this as -5347.25 in lenient mode -5,347.25 -5347.25 K +3.52E4 35200 @@ -789,7 +784,8 @@ parse output breaks (34,,25E-1) -342.5 // Trailing grouping separators are not OK. // C/J/P stop at the offending separator. -(34,,25,E-1) fail CJKP +// JDK 11 gets this right +(34,,25,E-1) fail CJP (34,,25,E-1) -3425 K (34 25 E-1) -342.5 K (34,,25 E-1) -342.5 K @@ -819,12 +815,13 @@ parse output breaks ( 19 45 ) -1945 K (,,19,45) -1945 // C parses to the spaces -(,,19 45) -19 +// JDK 11 stopped parsing this +(,,19 45) -19 K ( 19,45) -1945 K -(,,19,45,) -1945 +(,,19,45,) -1945 K // C will parse up to the letter. -(,,19,45,d1) -1945 -(,,19,45d1) -1945 +(,,19,45,d1) -1945 K +(,,19,45d1) -1945 K ( 19 45 d1) -1945 K ( 19 45d1) -1945 K (19,45,.25) -1945.25 @@ -845,8 +842,8 @@ parse output breaks 1,234,,,+ 1234 K 1,234- -1234 // C and P bail because of trailing separators -1,234,- -1234 CJP -1234 - -1234 +1,234,- -1234 CJKP +1234 - -1234 K @@ -874,8 +871,7 @@ parse output breaks (63,425) -63425 (63,425E-1) -6342.5 // Both prefix and suffix needed for strict. -// JDK accepts this and parses as -342.5 -(3425E-1 fail K +(3425E-1 fail +3.52EE4 3.52 +12,34,567.8901 1234567.8901 // With strict digit separators don't have to be the right type @@ -900,8 +896,7 @@ parse output breaks +79 79 +79 79 + 79 fail -// JDK parses as -1945 -(1,945d1) fail K +(1,945d1) fail test parse strict scientific // See #13737: Old behavior should be retained in this case @@ -1014,9 +1009,10 @@ begin parse output breaks १३ 13 १३.३१‍ 13.31 -123'456 123456 -524'11.3 52411.3 -३'११‍ 311 +// JDK 11 parses this as 123 +123'456 123456 K +524'11.3 52411.3 K +३'११‍ 311 K test parse with European-style comma/period set locale pt @@ -1326,8 +1322,8 @@ USD52.41 USD 52.41 K EUR52.41 USD fail $52.41 EUR fail USD52.41 EUR fail -\u20ac52.41 EUR 52.41 K -EUR52.41 EUR 52.41 +\u20ac52.41 EUR 52.41 +EUR52.41 EUR 52.41 K test parse currency ISO strict set pattern 0.00 \u00a4\u00a4;(#) \u00a4\u00a4 @@ -1381,6 +1377,125 @@ begin format output breaks -0.99 -0 K +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode ceil +set locale en +set roundingMode ceiling +begin +format output breaks +-1.5 -1 K +0.4 1 K +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode floor +set locale en +set roundingMode floor +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 0 +0.6 0 K +1.5 1 K + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode expand +set locale en +set roundingMode up +begin +format output breaks +-1.5 -2 +0.4 1 K +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode trunc +set locale en +set roundingMode down +begin +format output breaks +-1.5 -1 K +0.4 0 +0.5 0 +0.6 0 K +1.5 1 K + +// Not supported in Java BigDecimal +test rounding mode halfCeil +set locale en +set roundingMode halfCeiling +begin +format output breaks +-1.5 -1 JKP +0.4 0 JP +0.5 1 JKP +0.6 1 JP +1.5 2 JP + +// Not supported in Java BigDecimal +test rounding mode halfFloor +set locale en +set roundingMode halfFloor +begin +format output breaks +-1.5 -2 JP +0.4 0 JP +0.5 0 JP +0.6 1 JP +1.5 1 JKP + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode halfExpand +set locale en +set roundingMode halfUp +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 1 K +0.6 1 +1.5 2 + +// JDK seems to always round halfEven! Why? Bug in JDK or bug in test? +test rounding mode halfTrunc +set locale en +set roundingMode halfDown +begin +format output breaks +-1.5 -1 K +0.4 0 +0.5 0 +0.6 1 +1.5 1 K + +test rounding mode halfEven +set locale en +set roundingMode halfEven +begin +format output breaks +-1.5 -2 +0.4 0 +0.5 0 +0.6 1 +1.5 2 + +// Not supported in Java BigDecimal +test rounding mode halfOdd +set locale en +set roundingMode halfOdd +begin +format output breaks +-1.5 -1 JKP +0.4 0 JP +0.5 1 JKP +0.6 1 JP +1.5 1 JKP + test parse decimalPatternMatchRequired set locale en set decimalPatternMatchRequired 1 @@ -1431,8 +1546,8 @@ Aa1.23E3 1 1230 Aa1.23E3 0 1230 Aa1.23e3 1 1.23 Aa1.23e3 0 1230 K -NaN 1 NaN K -NaN 0 NaN K +NaN 1 NaN +NaN 0 NaN nan 1 fail nan 0 NaN K @@ -1441,7 +1556,7 @@ set locale en set lenient 1 begin parse output breaks -NaN NaN K +NaN NaN // JDK returns zero 1E999999999999999 Inf K -1E999999999999999 -Inf K diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DataDrivenNumberFormatTestData.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DataDrivenNumberFormatTestData.java index e9e3faf503e..1a6f01afc24 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DataDrivenNumberFormatTestData.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DataDrivenNumberFormatTestData.java @@ -143,6 +143,11 @@ public class DataDrivenNumberFormatTestData { roundingModeMap.put("halfDown", BigDecimal.ROUND_HALF_DOWN); roundingModeMap.put("halfUp", BigDecimal.ROUND_HALF_UP); roundingModeMap.put("unnecessary", BigDecimal.ROUND_UNNECESSARY); + + // NOTE: Java BigDecimal does not support these three rounding modes. + roundingModeMap.put("halfOdd", BigDecimal.ROUND_UNNECESSARY); + roundingModeMap.put("halfCeiling", BigDecimal.ROUND_UNNECESSARY); + roundingModeMap.put("halfFloor", BigDecimal.ROUND_UNNECESSARY); } private static Map currencyUsageMap = diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatDataDrivenTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatDataDrivenTest.java index 7e4f2fa013b..c9ca481c5ae 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatDataDrivenTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatDataDrivenTest.java @@ -715,10 +715,10 @@ public class NumberFormatDataDrivenTest { @Test public void TestDataDrivenJDK() { - // #13373: Since not all JDK implementations are the same, test only whitelisted JDKs + // #13373: Since not all JDK implementations are the same, test only on a JDK // with known behavior. The JDK version should be occasionally updated. org.junit.Assume.assumeTrue(TestUtil.getJavaRuntimeName() == TestUtil.JavaRuntimeName.OpenJDK - && TestUtil.getJavaVersion() == 8); + && TestUtil.getJavaVersion() == 11); DataDrivenNumberFormatTestUtility .runFormatSuiteIncludingKnownFailures("numberformattestspecification.txt", JDK);