]> granicus.if.org Git - icu/commitdiff
ICU-22143 Increase COMPACT_MAX_DIGITS from 15 to 20, needed for new ja data cldr/2022-09-12
authorPeter Edberg <pedberg@unicode.org>
Fri, 9 Sep 2022 05:39:29 +0000 (22:39 -0700)
committerPeter Edberg <42151464+pedberg-icu@users.noreply.github.com>
Tue, 13 Sep 2022 00:17:19 +0000 (17:17 -0700)
icu4c/source/i18n/number_compact.cpp
icu4c/source/i18n/number_compact.h
icu4c/source/test/intltest/compactdecimalformattest.cpp
icu4j/main/classes/core/src/com/ibm/icu/impl/number/CompactData.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/CompactDecimalFormatTest.java

index 8b9dbc166d4f2c127cdaf0c94b10f6989153bd8b..4dc96e7ea1b91e852fadf410c774ed94a91e1ab9 100644 (file)
@@ -176,7 +176,8 @@ void CompactData::CompactDataSink::put(const char *key, ResourceValue &value, UB
         // length of the key minus one.  We only support magnitudes less than COMPACT_MAX_DIGITS;
         // ignore entries that have greater magnitude.
         auto magnitude = static_cast<int8_t> (strlen(key) - 1);
-        if (magnitude >= COMPACT_MAX_DIGITS) {
+        U_ASSERT(magnitude < COMPACT_MAX_DIGITS); // debug assert
+        if (magnitude >= COMPACT_MAX_DIGITS) { // skip in production
             continue;
         }
         int8_t multiplier = data.multipliers[magnitude];
index 9802b9fb10ee723e1e085ba7e242f53384fa78e2..fa29744c103a3827d493ef5ec0efe16c58315275 100644 (file)
@@ -17,7 +17,7 @@
 U_NAMESPACE_BEGIN namespace number {
 namespace impl {
 
-static const int32_t COMPACT_MAX_DIGITS = 15;
+static const int32_t COMPACT_MAX_DIGITS = 20;
 
 class CompactData : public MultiplierProducer {
   public:
index 483b89114c9ede812f1a5e47c7d59ddc6f3367b2..eddc45daa32d5127c31cdefbbc71cc46d3d3bc5c 100644 (file)
@@ -114,7 +114,12 @@ static ExpectedResult kJapaneseShort[] = {
   {1.23456789E11, "1200\\u5104"},
   {1.23456789E12, "1.2\\u5146"},
   {1.23456789E13, "12\\u5146"},
-  {1.23456789E14, "120\\u5146"}};
+  {1.23456789E14, "120\\u5146"},
+  {1.23456789E15, "1200\\u5146"},
+  {1.23456789E16, "1.2\\u4EAC"},
+  {1.23456789E17, "12\\u4EAC"},
+  {1.23456789E18, "120\\u4EAC"},
+  {1.23456789E19, "1200\\u4EAC"}};
 
 static ExpectedResult kSwahiliShort[] = {
   {1234.0, "elfu\\u00a01.2"},
index 87d60f851b1ade310bf04905aaf699706daac369..566f614faf9d2ec02993490ccef1ebe8d761a677 100644 (file)
@@ -34,7 +34,7 @@ public class CompactData implements MultiplierProducer {
     private byte largestMagnitude;
     private boolean isEmpty;
 
-    private static final int COMPACT_MAX_DIGITS = 15;
+    private static final int COMPACT_MAX_DIGITS = 20;
 
     public CompactData() {
         patterns = new String[(CompactData.COMPACT_MAX_DIGITS + 1) * StandardPlural.COUNT];
index 93712d186e53a77d26bea10a40b0f77657e29bb9..a0c344dfaba2a815dffcaf5ee9670bb1d7970755 100644 (file)
@@ -148,6 +148,11 @@ public class CompactDecimalFormatTest extends TestFmwk {
             {1234567890123f, "1.2兆"},
             {12345678901234f, "12兆"},
             {123456789012345f, "120兆"},
+            {1234567890123456f, "1200兆"},
+            {12345678901234567f, "1.2京"},
+            {123456789012345678f, "12京"},
+            {1234567890123456789f, "120京"},
+            {12345678901234567890f, "1200京"},
     };
 
     Object[][] ChineseTestData = {