From 07c13a589e276da654f03f8a226ef16e0b14d261 Mon Sep 17 00:00:00 2001 From: Mark Davis Date: Sat, 20 Jul 2013 21:18:07 +0000 Subject: [PATCH] ICU-8474 Fixed more test cases caused by plurals change X-SVN-Rev: 33950 --- .../src/com/ibm/icu/text/PluralRules.java | 12 +- .../core/src/com/ibm/icu/util/ULocale.java | 10 +- .../icu/dev/test/format/PluralFormatTest.java | 50 ++++++-- .../icu/dev/test/format/PluralRulesTest.java | 119 ++++++++++++----- .../ibm/icu/dev/test/format/TimeUnitTest.java | 121 +++++++++--------- 5 files changed, 213 insertions(+), 99 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/PluralRules.java b/icu4j/main/classes/core/src/com/ibm/icu/text/PluralRules.java index 891070f186e..fcdd4c6e9db 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/PluralRules.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/PluralRules.java @@ -171,7 +171,7 @@ import com.ibm.icu.util.ULocale; * * @stable ICU 3.8 */ -public class PluralRules implements Serializable { +public class PluralRules implements Serializable, Comparable { /** * @internal * @deprecated This API is ICU internal only. @@ -872,6 +872,9 @@ public class PluralRules implements Serializable { } else { throw unexpected(range, condition); } + if (mod != 0 && high >= mod) { + throw unexpected(range, condition); + } vals[k2] = low; vals[k2+1] = high; lowBound = Math.min(lowBound, low); @@ -2069,4 +2072,11 @@ public class PluralRules implements Serializable { private Object writeReplace() throws ObjectStreamException { return new PluralRulesSerialProxy(toString()); } + + /* @internal + * @deprecated + */ + public int compareTo(PluralRules other) { + return toString().compareTo(other.toString()); + } } diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java b/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java index f6e8f0bfdeb..569f4b89a6f 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java @@ -107,7 +107,7 @@ import com.ibm.icu.text.LocaleDisplayNames.DialectHandling; * @author Ram Viswanadha * @stable ICU 2.8 */ -public final class ULocale implements Serializable { +public final class ULocale implements Serializable, Comparable { // using serialver from jdk1.4.2_05 private static final long serialVersionUID = 3715177670352309217L; @@ -4156,4 +4156,12 @@ public final class ULocale implements Serializable { return val; } } + + /* + * @internal + * @deprecated + */ + public int compareTo(ULocale other) { + return toLanguageTag().compareTo(other.toLanguageTag()); + } } diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralFormatTest.java index eb2a3e2747b..fb1e3260671 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralFormatTest.java @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 2007-2010, International Business Machines Corporation and * + * Copyright (C) 2007-2013, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -25,7 +25,7 @@ public class PluralFormatTest extends TestFmwk { new PluralFormatTest().run(args); } - private void helperTestRules(String localeIDs, String testPattern, Map changes) { + private void helperTestRules(String localeIDs, String testPattern, Map changes) { String[] locales = Utility.split(localeIDs, ','); // Create example outputs for all supported locales. @@ -54,8 +54,9 @@ public class PluralFormatTest extends TestFmwk { log("plf: " + plf); String expected = (String) changes.get(new Integer(0)); for (int n = 0; n < 200; ++n) { - if (changes.get(new Integer(n)) != null) { - expected = (String) changes.get(new Integer(n)); + String value = changes.get(n); + if (value != null) { + expected = value; } assertEquals("Locale: " + locales[i] + ", number: " + n, expected, plf.format(n)); @@ -75,8 +76,8 @@ public class PluralFormatTest extends TestFmwk { } public void TestSingular1Locales() { - String localeIDs = "bem,da,de,el,en,eo,es,et,fi,fo,he,it,nb,nl,nn,no,pt,pt_PT,sv,af,bg,bn,ca,eu,fur,fy,gu,ha,is,ku,lb,ml," + - "mr,nah,ne,om,or,pa,pap,ps,so,sq,sw,ta,te,tk,ur,zu,mn,gsw,rm"; + String localeIDs = "bem,da,de,el,en,eo,es,et,fi,fo,he,it,nb,nl,nn,no,pt,pt_PT,sv,af,bg,ca,eu,fur,fy,ha,ku,lb,ml," + + "nah,ne,om,or,pap,ps,so,sq,sw,ta,te,tk,ur,mn,gsw,rm"; String testPattern = "one{one} other{other}"; Map changes = new HashMap(); changes.put(new Integer(0), "other"); @@ -86,7 +87,7 @@ public class PluralFormatTest extends TestFmwk { } public void TestSingular01Locales() { - String localeIDs = "ff,fr,kab"; + String localeIDs = "ff,fr,kab,gu,mr,pa,zu,bn"; String testPattern = "one{one} other{other}"; Map changes = new HashMap(); changes.put(new Integer(0), "one"); @@ -101,10 +102,11 @@ public class PluralFormatTest extends TestFmwk { changes.put(new Integer(0), "zero"); changes.put(new Integer(1), "one"); changes.put(new Integer(2), "other"); - for (int i = 2; i < 20; ++i) { + for (int i = 0; i < 20; ++i) { if (i == 11) { continue; } + changes.put(new Integer(i*10), "zero"); changes.put(new Integer(i*10 + 1), "one"); changes.put(new Integer(i*10 + 2), "other"); } @@ -155,7 +157,7 @@ public class PluralFormatTest extends TestFmwk { } public void TestPaucalExcept11_14() { - String localeIDs = "hr,ru,sr,uk"; + String localeIDs = "hr,sr,uk"; String testPattern = "one{one} few{few} other{other}"; Map changes = new HashMap(); changes.put(new Integer(0), "other"); @@ -173,6 +175,36 @@ public class PluralFormatTest extends TestFmwk { helperTestRules(localeIDs, testPattern, changes); } + public void TestPaucalRu() { + String localeIDs = "ru"; + String testPattern = "one{one} many{many} other{other}"; + Map changes = new HashMap(); + for (int i = 0; i < 200; i+=10) { + if (i == 10 || i == 110) { + put(i, 0, 9, "many", changes); + continue; + } + put(i, 0, "many", changes); + put(i, 1, "one", changes); + put(i, 2, 4, "other", changes); + put(i, 5, 9, "many", changes); + } + helperTestRules(localeIDs, testPattern, changes); + } + + public void put(int base, int start, int end, T value, Map m) { + for (int i = start; i <= end; ++i) { + if (m.containsKey(base + i)) { + throw new IllegalArgumentException(); + } + m.put(base + i, value); + } + } + + public void put(int base, int start, T value, Map m) { + put(base, start, start, value, m); + } + public void TestSingularPaucal() { String localeIDs = "cs,sk"; String testPattern = "one{one} few{few} other{other}"; diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralRulesTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralRulesTest.java index 8759f348315..72ed91d5cd4 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralRulesTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/PluralRulesTest.java @@ -27,8 +27,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import com.ibm.icu.dev.test.TestFmwk; +import com.ibm.icu.dev.util.CollectionUtilities; +import com.ibm.icu.dev.util.Relation; import com.ibm.icu.impl.Utility; import com.ibm.icu.text.PluralRules; import com.ibm.icu.text.PluralRules.KeywordStatus; @@ -318,7 +321,7 @@ public class PluralRulesTest extends TestFmwk { rules = factory.forLocale(ULocale.createCanonical("ru")); assertEquals("ru 0", PluralRules.KEYWORD_MANY, rules.select(0)); assertEquals("ru 1", PluralRules.KEYWORD_ONE, rules.select(1)); - assertEquals("ru 2", PluralRules.KEYWORD_FEW, rules.select(2)); + assertEquals("ru 2", PluralRules.KEYWORD_OTHER, rules.select(2)); } public void testFunctionalEquivalent() { @@ -618,6 +621,9 @@ public class PluralRulesTest extends TestFmwk { } public void TestLocales() { + if (false) { + generateLOCALE_SNAPSHOT(); + } for (String test : LOCALE_SNAPSHOT) { test = test.trim(); String[] parts = test.split("\\s*;\\s*"); @@ -634,51 +640,104 @@ public class PluralRulesTest extends TestFmwk { } } + /** + * + */ + private void generateLOCALE_SNAPSHOT() { + Comparator c = new CollectionUtilities.CollectionComparator(); + Relation,PluralRules> setsToRules + = Relation.of(new TreeMap,Set>(c), TreeSet.class); + Relation data = Relation.of(new TreeMap>(), TreeSet.class); + for (ULocale locale : PluralRules.getAvailableULocales()) { + PluralRules pr = PluralRules.forLocale(locale); + EnumSet set = getCanonicalSet(pr.getKeywords()); + setsToRules.put(set, pr); + data.put(pr, locale); + } + for (Entry, Set> entry1 : setsToRules.keyValuesSet()) { + Set set = entry1.getKey(); + Set rules = entry1.getValue(); + System.out.println("\n // " + set); + for (PluralRules rule : rules) { + Set locales = data.get(rule); + System.out.print(" \"" + CollectionUtilities.join(locales, ",")); + for (StandardPluralCategories spc : set) { + Collection samples = rule.getFractionSamples(spc.toString()); + System.out.print("; " + spc + ": " + CollectionUtilities.join(samples, ", ")); + } + System.out.println("\","); + } + } + } + + /** + * @param keywords + * @return + */ + private EnumSet getCanonicalSet(Set keywords) { + EnumSet result = EnumSet.noneOf(StandardPluralCategories.class); + for (String s : keywords) { + result.add(StandardPluralCategories.valueOf(s)); + } + return result; + } + static final String[] LOCALE_SNAPSHOT = { // [other] - "az,bm,bo,dz,fa,hu,id,ig,ii,ja,jv,ka,kde,kea,km,kn,ko,lo,ms,my,sah,ses,sg,th,to,tr,vi,wo,yo,zh; other: 0, 0.0, 0.1, 1, 1.0, 3, 7", + "bm,bo,dz,id,ig,ii,ja,jv,kde,kea,km,ko,lkt,lo,ms,my,sah,ses,sg,th,to,vi,wo,yo,zh; other: 0, 0.0, 0.00, 0.1, 0.37, 1, 1.99, 2", // [one, other] - "af,asa,ast,bem,bez,bg,bn,brx,ca,cgg,chr,ckb,da,de,dv,ee,el,en,eo,es,et,eu,fi,fo,fur,fy,gl,gsw,gu,ha,haw,hy,is,it,jgo,jmc,kaj,kcg,kk,kkj,kl,ks,ksb,ku,ky,lb,lg,mas,mgo,ml,mn,mr,nah,nb,nd,ne,nl,nn,nnh,no,nr,ny,nyn,om,or,os,pa,pap,ps,pt,rm,rof,rwk,saq,seh,sn,so,sq,ss,ssy,st,sv,sw,syr,ta,te,teo,tig,tk,tn,ts,ur,ve,vo,vun,wae,xh,xog,zu; one: 1, 1.0; other: 0, 0.0, 0.1, 0.5, 3, 7", - "ak,am,bh,fil,guw,hi,ln,mg,nso,ti,tl,wa; one: 0, 0.0, 1, 1.0; other: 0.1, 0.5, 3, 7", - "ff,fr,kab; one: 0, 0.0, 0.1, 0.5, 1, 1.0, 1.5; other: 2, 5", - "gv; one: 0, 0.0, 1, 1.0, 11, 12, 20, 21, 22, 31, 32, 40, 60; other: 0.1, 15.5, 39.5, 59", - "mk; one: 1, 1.0, 21, 31; other: 0, 0.0, 0.1, 10.5, 11, 26, 30", - "tzm; one: 0, 0.0, 1, 1.0, 11, 98, 99; other: 0.1, 0.5, 10", + "fil,tl; one: 0, 1; other: 0.0, 0.00, 0.03, 0.1, 0.3, 0.30, 1.99, 2, 2.0, 2.00, 2.01, 2.1, 2.10, 3", + "ca,de,en,et,fi,gl,it,nl,sw,ur,yi; one: 1; other: 0, 0.0, 0.00, 0.01, 0.1, 0.10, 1.0, 1.00, 1.03, 1.3, 1.30, 1.99, 2, 3", + "da,sv; one: 0.01, 0.1, 1; other: 0, 0.0, 0.00, 0.10, 1.0, 1.00, 1.03, 1.3, 1.30, 1.99, 2, 3", + "is; one: 0.1, 0.31, 1, 31; other: 0, 0.0, 0.00, 1.0, 1.00, 1.11, 1.99, 2, 11, 111, 311", + "mk; one: 0.1, 0.31, 1, 11, 31; other: 0, 0.0, 0.00, 1.0, 1.00, 1.03, 1.3, 1.30, 1.99, 2, 3", + "ak,bh,guw,ln,mg,nso,pa,ti,wa; one: 0, 0.0, 0.00, 1; other: 0.03, 0.1, 0.3, 0.30, 1.99, 2, 2.0, 2.00, 2.01, 2.1, 2.10, 3", + "tzm; one: 0, 0.0, 0.00, 1, 11, 99; other: 0.03, 0.1, 0.3, 0.30, 1.99, 2, 2.0, 2.00, 2.11, 3", + "af,asa,ast,az,bem,bez,bg,brx,cgg,chr,ckb,dv,ee,el,eo,es,eu,fo,fur,fy,gsw,ha,haw,hu,jgo,jmc,ka,kaj,kcg,kk,kkj,kl,ks,ksb,ku,ky,lb,lg,mas,mgo,ml,mn,nah,nb,nd,ne,nn,nnh,no,nr,ny,nyn,om,or,os,pap,ps,rm,rof,rwk,saq,seh,sn,so,sq,ss,ssy,st,syr,ta,te,teo,tig,tk,tn,tr,ts,ve,vo,vun,wae,xh,xog; one: 1, 1.0, 1.00; other: 0, 0.0, 0.00, 0.01, 0.1, 0.10, 1.03, 1.3, 1.30, 1.99, 2, 3", + "pt; one: 0.01, 0.1, 1, 1.0, 1.00; other: 0, 0.0, 0.00, 0.10, 1.03, 1.3, 1.30, 1.99, 2, 3", + "am,bn,fa,gu,hi,kn,mr,zu; one: 0, 0.0, 0.00, 0.03, 0.1, 0.3, 0.30, 0.5, 1; other: 1.99, 2, 2.0, 2.00, 2.01, 2.1, 2.10, 3", + "ff,fr,hy,kab; one: 0, 0.0, 0.00, 0.02, 0.1, 0.2, 0.20, 1, 1.99; other: 2, 2.0, 2.00, 2.01, 2.1, 2.10", - // [one, few, other] - "cs,sk; one: 1, 1.0; few: 2, 3, 4; other: 0, 0.0, 0.1, 0.5, 5", - "lt; one: 1, 1.0, 21, 31; few: 22, 29, 32, 39, 65; other: 0, 0.0, 0.1, 11, 12, 19, 110, 111, 119, 211, 219, 311, 318.5, 319", - "mo,ro; one: 1, 1.0; few: 0, 0.0, 101, 118, 119, 201, 219, 301, 318, 319; other: 0.1, 160", - "shi; one: 0, 0.0, 0.1, 0.5, 1, 1.0; few: 2, 9, 10; other: 1.5, 5.5", + // [zero, one, other] + "ksh; zero: 0, 0.0, 0.00; one: 1, 1.0, 1.00; other: 0.03, 0.1, 0.3, 0.30, 1.03, 1.3, 1.30, 1.99, 2, 2.0, 2.00, 2.01, 2.1, 2.10, 3", + "lag; zero: 0, 0.0, 0.00; one: 0.02, 0.1, 0.2, 0.20, 1, 1.0, 1.00, 1.02, 1.2, 1.20, 1.99; other: 2, 2.0, 2.00, 2.01, 2.1, 2.10", + "lv; zero: 0, 0.0, 0.00, 10, 30; one: 0.1, 0.31, 1, 1.0, 1.00, 21, 31, 41; other: 1.30, 1.99, 2, 2.0, 2.00, 2.30, 11, 29, 49, 111, 311", // [one, two, other] - "iu,kw,naq,se,sma,smi,smj,smn,sms; one: 1, 1.0; two: 2; other: 0, 0.0, 0.1, 0.5, 1.5, 5", + "iu,kw,naq,se,sma,smi,smj,smn,sms; one: 1, 1.0, 1.00; two: 2, 2.0, 2.00; other: 0, 0.0, 0.00, 0.02, 0.1, 0.2, 0.20, 1.04, 1.4, 1.40, 1.99, 2.04, 2.4, 2.40, 3, 4", - // [zero, one, other] - "ksh; zero: 0, 0.0; one: 1, 1.0; other: 0.1, 0.5, 3, 7", - "lag; zero: 0, 0.0; one: 0.1, 0.5, 1, 1.0, 1.5; other: 2, 5", - "lv; zero: 0, 0.0; one: 1, 1.0, 21, 31, 161; other: 0.1, 11, 110, 111, 211, 310, 311", + // [one, few, other] + "mo,ro; one: 1; few: 0, 0.1, 1.0, 1.00, 1.319, 1.99, 2, 21.0, 21.00, 21.319, 101, 119, 119.0, 119.00, 119.20, 301, 319; other: 20, 21", + "bs,hr,sh,sr; one: 0.1, 0.31, 1, 31, 34.31; few: 2, 32, 34; other: 0, 0.0, 0.00, 1.0, 1.00, 1.112, 1.99, 11, 12, 14, 34.0, 34.00, 111, 112, 114, 311, 312, 314", + "shi; one: 0, 0.0, 0.00, 0.1, 0.12, 0.5, 1; few: 2, 2.0, 2.00, 10; other: 1.99, 2.12, 11, 11.0, 11.00, 11.10, 12", - // [one, few, many, other] - "be,bs,hr,ru,sh,sr,uk; one: 1, 1.0, 21, 31; few: 22, 24, 32, 34; many: 0, 0.0, 10, 11, 12, 14, 15, 19, 20, 25, 29, 30, 35, 39, 110, 111, 112, 114, 211, 212, 214, 311, 312, 314; other: 0.1, 9.5, 15.5", - "mt; one: 1, 1.0; few: 0, 0.0, 102, 109, 110, 202, 210, 302, 310; many: 111, 119, 211, 219, 311, 319; other: 0.1, 55.5, 101", - "pl; one: 1, 1.0; few: 22, 24, 32, 34; many: 0, 0.0, 10, 11, 12, 14, 15, 19, 20, 21, 25, 29, 30, 31, 35, 39, 112, 114, 212, 214, 312, 314; other: 0.1, 5.5, 9.5, 15.5", + // [one, many, other] + "ru; one: 1, 31; many: 0, 10, 11, 15, 19, 30, 35, 39, 111, 114, 311, 314; other: 0.0, 0.00, 0.1, 0.31, 1.0, 1.00, 1.30, 1.99, 2, 2.0, 2.00, 2.30, 3", + + // [one, two, few, other] + "sl; one: 1, 101, 301; two: 2, 102, 302; few: 0.0, 0.00, 0.1, 0.303, 1.0, 1.00, 1.303, 1.99, 102.0, 102.00, 102.303, 103, 104, 303, 304, 304.0, 304.00, 304.302; other: 0", + "gd; one: 1, 1.0, 1.00, 11; two: 2, 2.0, 2.00, 12; few: 3, 19, 19.0, 19.00; other: 0, 0.0, 0.00, 0.1, 0.12, 1.12, 1.99, 2.11, 19.12, 20, 21", + "gv; one: 1, 1.0, 1.00, 11, 31; two: 2, 2.0, 2.00, 12, 32; few: 0, 0.0, 0.00, 100, 160, 300, 360; other: 0.1, 0.31, 1.360, 1.99, 2.31, 3, 3.0, 3.00, 3.31, 4", // [one, two, many, other] - "he; one: 1, 1.0; two: 2; many: 10, 20, 30; other: 0, 0.0, 0.1, 5.5, 19, 29", + "he; one: 1; two: 2; many: 30; other: 0, 0.0, 0.00, 0.1, 0.30, 1.0, 1.00, 1.30, 1.99, 2.0, 2.00, 2.30, 10, 30.0, 30.00, 30.10", - // [one, two, few, other] - "gd; one: 1, 1.0, 11; two: 2, 12; few: 3, 10, 13, 19; other: 0, 0.0, 0.1, 5.5, 11.5, 12.5", - "sl; one: 1, 1.0, 101, 201, 301; two: 102, 202, 302; few: 103, 104, 203, 204, 303, 304; other: 0, 0.0, 0.1, 103.5, 152.5, 203.5", + // [one, few, many, other] + "cs,sk; one: 1; few: 2, 4; many: 0.0, 0.00, 0.04, 0.1, 0.4, 0.40, 1.0, 1.00, 1.05, 1.5, 1.50, 1.99, 2.0, 2.00, 2.05, 2.5, 2.50; other: 0, 5", + "pl; one: 1; few: 2, 32, 34; many: 0, 10, 11, 12, 14, 15, 19, 30, 31, 35, 39, 112, 114, 312, 314; other: 0.0, 0.00, 0.1, 0.32, 1.0, 1.00, 1.1, 1.2, 1.30, 1.99, 34.0, 34.00, 34.30", + "uk; one: 1, 31; few: 2, 32, 34; many: 0, 10, 11, 12, 14, 15, 19, 30, 35, 39, 111, 112, 114, 311, 312, 314; other: 0.0, 0.00, 0.1, 0.31, 1.0, 1.00, 1.1, 1.2, 1.30, 1.99, 34.0, 34.00, 34.30", + "mt; one: 1, 1.0, 1.00; few: 0, 0.0, 0.00, 2, 102, 110, 302, 310; many: 111, 119, 311, 311.0, 311.00, 319; other: 0.1, 0.20, 1.302, 1.99, 20, 21, 21.0, 21.00, 21.302, 311.302", + "be; one: 1, 1.0, 1.00, 31; few: 2, 32, 34, 34.0, 34.00; many: 0, 0.0, 0.00, 10, 11, 12, 14, 15, 19, 30, 35, 39, 111, 112, 114, 311, 312, 314; other: 0.1, 0.31, 1.1, 1.2, 1.30, 1.99, 34.30", + "lt; one: 1, 1.0, 1.00, 31; few: 2, 2.0, 2.00, 32, 39; many: 0.1, 0.31, 1.19, 1.99, 2.31; other: 0, 0.0, 0.00, 10, 11, 12, 19, 111, 119, 311, 319", // [one, two, few, many, other] - "br; one: 1, 1.0, 21, 31; two: 22, 32; few: 23, 24, 29, 33, 34, 39, 369, 389; many: 1000000, 2000000, 3000000; other: 0, 0.0, 0.1, 11, 12, 13, 14, 19, 110, 111, 112, 119, 170, 171, 172, 179, 190, 191, 192, 199, 210, 211, 212, 219, 270, 271, 272, 279, 290, 291, 292, 299, 310, 311, 312, 319, 334.5, 370, 371, 372, 379, 390, 391, 392, 399", - "ga; one: 1, 1.0; two: 2; few: 3, 6; many: 7, 8, 9, 10; other: 0, 0.0, 0.1, 6.5", + "ga; one: 1, 1.0, 1.00; two: 2, 2.0, 2.00; few: 3, 3.0, 3.00, 6; many: 7, 7.0, 7.00, 10; other: 0, 0.0, 0.00, 0.1, 0.10, 1.12, 1.99, 2.12, 3.12, 7.12, 11, 12", + "br; one: 1, 1.0, 1.00, 31; two: 2, 2.0, 2.00, 32; few: 33, 33.0, 33.00, 39; many: 1000000, 3000000, 3000000.0, 3000000.00; other: 0, 0.0, 0.00, 0.1, 0.39, 1.112, 1.99, 2.112, 11, 12, 13, 19, 33.112, 110, 111, 112, 191, 192, 199, 310, 311, 312, 391, 392, 399, 3000000.112", // [zero, one, two, few, many, other] - "ar; zero: 0, 0.0; one: 1, 1.0; two: 2; few: 103, 109, 110, 203, 210, 303, 310; many: 111, 150, 199, 211, 298, 299, 311, 399; other: 0.1", - "cy; zero: 0, 0.0; one: 1, 1.0; two: 2; few: 3; many: 6; other: 0.1, 2.5, 3.5, 5", + "cy; zero: 0, 0.0, 0.00; one: 1, 1.0, 1.00; two: 2, 2.0, 2.00; few: 3, 3.0, 3.00; many: 6, 6.0, 6.00; other: 0.06, 0.1, 0.6, 0.60, 1.06, 1.6, 1.60, 1.99, 2.06, 2.6, 2.60, 3.06, 3.6, 3.60, 4, 4.0, 4.00, 4.06, 4.6, 4.60, 5, 6.05, 6.5, 6.50", + "ar; zero: 0, 0.0, 0.00; one: 1, 1.0, 1.00; two: 2, 2.0, 2.00; few: 103, 103.0, 103.00, 110, 303, 310; many: 111, 199, 311, 311.0, 311.00, 399; other: 0.1, 0.303, 1.303, 1.99, 2.303, 100, 100.0, 100.00, 100.303, 101, 103.399, 311.303", }; private T serializeAndDeserialize(T original, Output size) { diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/TimeUnitTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/TimeUnitTest.java index eb324dfe4d3..9f8b637f5f9 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/TimeUnitTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/TimeUnitTest.java @@ -135,62 +135,63 @@ public class TimeUnitTest extends TestFmwk { int[] styles = new int[] {TimeUnitFormat.FULL_NAME, TimeUnitFormat.ABBREVIATED_NAME}; int[] numbers = new int[] {1, 7}; - String[] expected = {"1 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03BF", - "1 \u03BB\u03B5\u03C0\u03C4\u03CC", - "1 \u03CE\u03C1\u03B1", - "1 \u03B7\u03BC\u03AD\u03C1\u03B1", - "1 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1", - "1 \u03BC\u03AE\u03BD\u03B1\u03C2", - "1 \u03AD\u03C4\u03BF\u03C2", - "1 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03BF", - "1 \u03BB\u03B5\u03C0\u03C4\u03CC", - "1 \u03CE\u03C1\u03B1", - "1 \u03B7\u03BC\u03AD\u03C1\u03B1", - "1 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1", - "1 \u03BC\u03AE\u03BD\u03B1\u03C2", - "1 \u03AD\u03C4\u03BF\u03C2", - "7 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03B1", - "7 \u03BB\u03B5\u03C0\u03C4\u03AC", - "7 \u03CE\u03C1\u03B5\u03C2", - "7 \u03B7\u03BC\u03AD\u03C1\u03B5\u03C2", - "7 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B5\u03C2", - "7 \u03BC\u03AE\u03BD\u03B5\u03C2", - "7 \u03AD\u03C4\u03B7", - "7 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03B1", - "7 \u03BB\u03B5\u03C0\u03C4\u03AC", - "7 \u03CE\u03C1\u03B5\u03C2", - "7 \u03B7\u03BC\u03AD\u03C1\u03B5\u03C2", - "7 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B5\u03C2", - "7 \u03BC\u03AE\u03BD\u03B5\u03C2", - "7 \u03AD\u03C4\u03B7", - "1 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03BF", - "1 \u03BB\u03B5\u03C0\u03C4\u03CC", - "1 \u03CE\u03C1\u03B1", - "1 \u03B7\u03BC\u03AD\u03C1\u03B1", - "1 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1", - "1 \u03BC\u03AE\u03BD\u03B1\u03C2", - "1 \u03AD\u03C4\u03BF\u03C2", - "1 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03BF", - "1 \u03BB\u03B5\u03C0\u03C4\u03CC", - "1 \u03CE\u03C1\u03B1", - "1 \u03B7\u03BC\u03AD\u03C1\u03B1", - "1 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1", - "1 \u03BC\u03AE\u03BD\u03B1\u03C2", - "1 \u03AD\u03C4\u03BF\u03C2", - "7 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03B1", - "7 \u03BB\u03B5\u03C0\u03C4\u03AC", - "7 \u03CE\u03C1\u03B5\u03C2", - "7 \u03B7\u03BC\u03AD\u03C1\u03B5\u03C2", - "7 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B5\u03C2", - "7 \u03BC\u03AE\u03BD\u03B5\u03C2", - "7 \u03AD\u03C4\u03B7", - "7 \u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03CC\u03BB\u03B5\u03C0\u03C4\u03B1", - "7 \u03BB\u03B5\u03C0\u03C4\u03AC", - "7 \u03CE\u03C1\u03B5\u03C2", - "7 \u03B7\u03BC\u03AD\u03C1\u03B5\u03C2", - "7 \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B5\u03C2", - "7 \u03BC\u03AE\u03BD\u03B5\u03C2", - "7 \u03AD\u03C4\u03B7"}; + String[] expected = { + "1 δευτερόλεπτο", + "1 λεπτό", + "1 ώρα", + "1 ημέρα", + "1 εβδομάδα", + "1 μήνας", + "1 έτος", + "1 δευτερόλεπτο", + "1 λεπτό", + "1 ώρα", + "1 ημέρα", + "1 εβδομάδα", + "1 μήνας", + "1 έτος", + "7 δευτερόλεπτα", + "7 λεπτά", + "7 ώρες", + "7 ημέρες", + "7 εβδομάδες", + "7 μήνες", + "7 έτη", + "7 δευτερόλεπτα", + "7 λεπτά", + "7 ώρες", + "7 ημέρες", + "7 εβδομάδες", + "7 μήνες", + "7 έτη", + "1 δευτερόλεπτο", + "1 λεπτό", + "1 ώρα", + "1 ημέρα", + "1 εβδομάδα", + "1 μήνας", + "1 έτος", + "1 δευτερόλεπτο", + "1 λεπτό", + "1 ώρα", + "1 ημέρα", + "1 εβδομάδα", + "1 μήνας", + "1 έτος", + "7 δευτερόλεπτα", + "7 λεπτά", + "7 ώρες", + "7 ημέρες", + "7 εβδομάδες", + "7 μήνες", + "7 έτη", + "7 δευτερόλεπτα", + "7 λεπτά", + "7 ώρες", + "7 ημέρες", + "7 εβδομάδες", + "7 μήνες", + "7 έτη"}; int counter = 0; TimeUnitFormat timeUnitFormat; @@ -206,8 +207,12 @@ public class TimeUnitTest extends TestFmwk { timeUnitFormat = new TimeUnitFormat(new ULocale(locales[locIndex]), styles[styleIndex]); formatted = timeUnitFormat.format(timeUnitAmount); - assertEquals("formatted time string is not expected, locale: " + locales[locIndex] + - " style: " + styles[styleIndex] + " units: " + units[unitIndex], expected[counter], formatted); + assertEquals( + "locale: " + locales[locIndex] + + ", style: " + styles[styleIndex] + + ", units: " + units[unitIndex] + + ", value: " + numbers[numIndex], + expected[counter], formatted); ++counter; } } -- 2.40.0