From e2d8c9baaa8a898eab395bfaec84b4d6e90c0806 Mon Sep 17 00:00:00 2001 From: Doug Felt Date: Thu, 2 Dec 2004 21:49:50 +0000 Subject: [PATCH] ICU-4263 fixed bad locale data, added test X-SVN-Rev: 16909 --- icu4c/source/data/rbnf/ga.txt | 2 +- icu4c/source/data/rbnf/he.txt | 393 ++++++++++++------ icu4c/source/test/intltest/itrbnf.cpp | 46 ++ icu4c/source/test/intltest/itrbnf.h | 5 + icu4j/src/com/ibm/icu/dev/data/testdata.jar | 4 +- .../com/ibm/icu/dev/test/format/RbnfTest.java | 40 +- icu4j/src/com/ibm/icu/impl/data/icudata.jar | 4 +- 7 files changed, 367 insertions(+), 127 deletions(-) diff --git a/icu4c/source/data/rbnf/ga.txt b/icu4c/source/data/rbnf/ga.txt index 70b0e99b952..ad40a9cff92 100644 --- a/icu4c/source/data/rbnf/ga.txt +++ b/icu4c/source/data/rbnf/ga.txt @@ -47,7 +47,7 @@ ga { "1,000: <%%thousands<[ >%%cardwithnumber>];\n" "1,000,000: <%%millions<[ >%%cardwithnumber>];\n" "1,000,000,000: <%%billions<[ >%%cardwithnumber>];\n" - "1,000,000,000: <%%trillions<[ >%%cardwithnumber>];\n" + "1,000,000,000,000: <%%trillions<[ >%%cardwithnumber>];\n" "1,000,000,000,000,000: =#,##0=;\n" // rules to give hundreds value diff --git a/icu4c/source/data/rbnf/he.txt b/icu4c/source/data/rbnf/he.txt index 8345bc1c55a..5105b9bf418 100644 --- a/icu4c/source/data/rbnf/he.txt +++ b/icu4c/source/data/rbnf/he.txt @@ -12,128 +12,279 @@ he { //------------------------------------------------------------ SpelloutRules { - "%masculine_singular_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05df;\n" - "\u05e9\u05e0\u05d9;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9;\n" - "\u05e9\u05d9\u05e9\u05d9;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9;\n" - "11: =%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_singular_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05df;\n" - "\u05d4\u05e9\u05e0\u05d9;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9;\n" - "11: \u05d4=%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_plural_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9\u05dd;\n" + "%%tunits:\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05ea;\n" + "\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05e9\u05dc\u05d5\u05e9\u05ea;\n" + "\u05d0\u05e8\u05d1\u05e2\u05ea;\n" + "\u05d7\u05de\u05e9\u05ea;\n" + "\u05e9\u05e9\u05ea;\n" + "\u05e9\u05d1\u05e2\u05ea;\n" + "\u05e9\u05de\u05d5\u05e0\u05ea;\n" + "\u05ea\u05e9\u05e2\u05ea;\n" + "\u05e2\u05e9\u05e8\u05ea;\n" + "=%masculine=;\n" + "%%txunits:\n" + "\u05d5\u05d0\u05e4\u05e1;\n" + "\u05d5\u05d0\u05d7\u05ea;\n" + "\u05d5\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05ea;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05ea;\n" + "\u05d5\u05d7\u05de\u05e9\u05ea;\n" + "\u05d5\u05e9\u05e9\u05ea;\n" + "\u05d5\u05e9\u05d1\u05e2\u05ea;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05ea;\n" + "\u05d5\u05ea\u05e9\u05e2\u05ea;\n" + "\u05d5\u05e2\u05e9\u05e8\u05ea;\n" + "=%%mxunits=;\n" + "%masculine:\n" + "-x: \u05de\u05d9\u05e0\u05d5\u05e1 >>;\n" + "x.x: <%masculine< \u05e0\u05e7\u05d5\u05d3\u05d4 >%%fraction>;\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05d3;\n" "\u05e9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e9\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05d9\u05dd;\n" - "11: =%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%masculine_plural_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d9\u05dd;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05d9\u05dd;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05d9\u05dd;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05d9\u05dd;\n" - "11: \u05d4=%masculine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_singular_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4;\n" - "\u05e9\u05e0\u05d9\u05d4;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e9\u05d9\u05e9\u05d9\u05ea;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05ea;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05ea;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05ea;\n" - "11: =%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_singular_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d4;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d4;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05ea;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05ea;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05ea;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05ea;\n" - "11: \u05d4=%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_plural_indefinite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05e8\u05d0\u05e9\u05d5\u05e0\u05d5\u05ea;\n" - "\u05e9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05e9\u05dc\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e8\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d7\u05de\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e9\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05e9\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05e9\u05de\u05d9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05ea\u05e9\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05e2\u05e9\u05d9\u05e8\u05d9\u05d5\u05ea;\n" - "11: =%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%feminine_plural_definite:\n" - "-x: =%%unwieldy=;\n" - "=%%unwieldy=;\n" - "\u05d4\u05e8\u05d0\u05e9\u05d5\u05e0\u05d5\u05ea;\n" - "\u05d4\u05e9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05dc\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e8\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05d7\u05de\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05d9\u05e9\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05d1\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e9\u05de\u05d9\u05e0\u05d9\u05d5\u05ea;\n" - "\u05d4\u05ea\u05e9\u05d9\u05e2\u05d9\u05d5\u05ea;\n" - "\u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05d5\u05ea;\n" - "11: \u05d4=%feminine=;\n" - "1001: =%%unwieldy=;\n" - "%%unwieldy:\n" - "\u05de\u05e1\u05e4\u05e8 =%feminine=;\n" + "\u05e9\u05dc\u05d5\u05e9\u05d4;\n" + "\u05d0\u05e8\u05d1\u05e2\u05d4;\n" + "\u05d7\u05de\u05d9\u05e9\u05d4;\n" + "\u05e9\u05d9\u05e9\u05d4;\n" + "\u05e9\u05d1\u05e2\u05d4;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05ea\u05e9\u05e2\u05d4;\n" + "\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d0\u05d7\u05d3\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05e0\u05d9\u05dd\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05dc\u05d5\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d0\u05e8\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d7\u05de\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05ea\u05e9\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "20: \u05e2\u05e9\u05e8\u05d9\u05dd[ \u05d5>>];\n" + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "40: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "60: \u05e9\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "70: \u05e9\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "80: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd[ \u05d5>>];\n" + "90: \u05ea\u05e9\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "100: \u05de\u05d0\u05d4[ >%%mxunits>];\n" + "200: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd[ >%%mxunits>];\n" + "300: <%feminine< \u05de\u05d0\u05d5\u05ea[ >%%mxunits>];\n" + "1000: \u05d0\u05dc\u05e3[ >%%mxunits>];\n" + "2000: \u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >%%mxunits>];\n" + "3000: <%%tunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >%%mxunits>];\n" + "11000/1000: << \u05d0\u05dc\u05e3[ >%%mxunits>];\n" + + "1,000,000: \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "2,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "3,000,000: << \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "1,000,000,000: \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "2,000,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "3,000,000,000: << \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%mxunits>];\n" + "1,000,000,000,000: \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "2,000,000,000,000: \u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "3,000,000,000,000: << \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%mxunits>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%%fraction:\n" + "10: <%feminine<<;\n" + "100: <%feminine<<;\n" + "1000: <%feminine<<;\n" + "10,000: <%feminine<<;\n" + "100,000: <%feminine<<;\n" + "1,000,000: <%feminine<<;\n" + "10,000,000: <%feminine<<;\n" + "100,000,000: <%feminine<<;\n" + "1,000,000,000: <%feminine<<;\n" + "10,000,000,000: <#,##0<;\n" + "%%mxunits:\n" + "0:;\n" + "\u05d5\u05d0\u05d7\u05d3;\n" + "\u05d5\u05e9\u05e0\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05d4;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05d4;\n" + "\u05d5\u05d7\u05de\u05d9\u05e9\u05d4;\n" + "\u05d5\u05e9\u05d9\u05e9\u05d4;\n" + "\u05d5\u05e9\u05d1\u05e2\u05d4;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2\u05d4;\n" + "\u05d5\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d0\u05d7\u05d3\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05e0\u05d9\u05dd\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d7\u05de\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05d9\u05e9\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05d1\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "\u05d5\u05ea\u05e9\u05e2\u05d4\u0020\u05e2\u05e9\u05e8;\n" + "20: \u05d5\u05e2\u05e9\u05e8\u05d9\u05dd;\n" + "21: \u05e2\u05e9\u05e8\u05d9\u05dd >>;\n" + "30: \u05d5\u05e9\u05dc\u05d5\u05e9\u05d9\u05dd;\n" + "31: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd >>;\n" + "40: \u05d5\u05d0\u05e8\u05d1\u05e2\u05d9\u05dd;\n" + "41: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd >>;\n" + "50: \u05d5\u05d7\u05de\u05d9\u05e9\u05d9\u05dd;\n" + "51: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd >>;\n" + "60: \u05d5\u05e9\u05d9\u05e9\u05d9\u05dd;\n" + "61: \u05e9\u05d9\u05e9\u05d9\u05dd >>;\n" + "70: \u05d5\u05e9\u05d1\u05e2\u05d9\u05dd;\n" + "71: \u05e9\u05d1\u05e2\u05d9\u05dd >>;\n" + "80: \u05d5\u05e9\u05de\u05d5\u05e0\u05d9\u05dd;\n" + "81: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd >>;\n" + "90: \u05d5\u05ea\u05e9\u05e2\u05d9\u05dd;\n" + "91: \u05ea\u05e9\u05e2\u05d9\u05dd >>;\n" + "100: \u05d5\u05de\u05d0\u05d4;\n" + "101: \u05de\u05d0\u05d4 >>;\n" + "200: \u05d5\u05de\u05d0\u05ea\u05d9\u05d9\u05dd;\n" + "201: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd >>;\n" + "300: \u05d5\u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "301: \u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "400: \u05d5\u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "401: \u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "500: \u05d5\u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "501: \u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "600: \u05d5\u05e9\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "601: \u05e9\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "700: \u05d5\u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "701: \u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "800: \u05d5\u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea;\n" + "801: \u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea >>;\n" + "900: \u05d5\u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "901: \u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "1000: \u05d5\u05d0\u05dc\u05e3[ >>];\n" + "2000: \u05d5\u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >>];\n" + "3000: <%%txunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >>];\n" + "11000/1000: << \u05d0\u05dc\u05e3[ >>];\n" + "1,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000: << \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "2,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "3,000,000,000: << \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "1,000,000,000,000: \u05d5\u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000,000,000: << \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%feminine:\n" + "-x: \u05de\u05d9\u05e0\u05d5\u05e1 >>;\n" + "x.x: <%feminine< \u05e0\u05e7\u05d5\u05d3\u05d4 >%%fraction>;\n" + "\u05d0\u05e4\u05e1;\n" + "\u05d0\u05d7\u05ea;\n" + "\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05e9\u05dc\u05d5\u05e9;\n" + "\u05d0\u05e8\u05d1\u05e2;\n" + "\u05d7\u05de\u05e9;\n" + "\u05e9\u05e9;\n" + "\u05e9\u05d1\u05e2;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05ea\u05e9\u05e2;\n" + "\u05e2\u05e9\u05e8;\n" + "\u05d0\u05d7\u05ea\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05ea\u05d9\u05dd\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05dc\u05d5\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d0\u05e8\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d7\u05de\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05ea\u05e9\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "20: \u05e2\u05e9\u05e8\u05d9\u05dd[ \u05d5>>];\n" + "30: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "40: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "50: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "60: \u05e9\u05d9\u05e9\u05d9\u05dd[ \u05d5>>];\n" + "70: \u05e9\u05d1\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "80: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd[ \u05d5>>];\n" + "90: \u05ea\u05e9\u05e2\u05d9\u05dd[ \u05d5>>];\n" + "100: \u05de\u05d0\u05d4[ >%%fxunits>];\n" + "200: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd[ >%%fxunits>];\n" + "300: << \u05de\u05d0\u05d5\u05ea[ >%%fxunits>];\n" + "1000: \u05d0\u05dc\u05e3[ >%%fxunits>];\n" + "2000: \u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >%%fxunits>];\n" + "3000: <%%tunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >%%fxunits>];\n" + "11000/1000: <%masculine< \u05d0\u05dc\u05e3[ >%%fxunits>];\n" + "1,000,000: \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "2,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "3,000,000: <%masculine< \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "1,000,000,000: \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "2,000,000,000: \u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "3,000,000,000: <%masculine< \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >%%fxunits>];\n" + "1,000,000,000,000: \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "2,000,000,000,000: \u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "3,000,000,000,000: <%masculine< \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >%%fxunits>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%%fxunits:\n" + "0:;\n" + "\u05d5\u05d0\u05d7\u05ea;\n" + "\u05d5\u05e9\u05ea\u05d9\u05d9\u05dd;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2;\n" + "\u05d5\u05d7\u05de\u05e9;\n" + "\u05d5\u05e9\u05e9;\n" + "\u05d5\u05e9\u05d1\u05e2;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2;\n" + "\u05d5\u05e2\u05e9\u05e8;\n" + "\u05d5\u05d0\u05d7\u05ea\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05ea\u05d9\u05dd\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05dc\u05d5\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d0\u05e8\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05d7\u05de\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05e9\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05d1\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05e9\u05de\u05d5\u05e0\u05d4\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "\u05d5\u05ea\u05e9\u05e2\u0020\u05e2\u05e9\u05e8\u05d4;\n" + "20: \u05d5\u05e2\u05e9\u05e8\u05d9\u05dd;\n" + "21: \u05e2\u05e9\u05e8\u05d9\u05dd >>;\n" + "30: \u05d5\u05e9\u05dc\u05d5\u05e9\u05d9\u05dd;\n" + "31: \u05e9\u05dc\u05d5\u05e9\u05d9\u05dd >>;\n" + "40: \u05d5\u05d0\u05e8\u05d1\u05e2\u05d9\u05dd;\n" + "41: \u05d0\u05e8\u05d1\u05e2\u05d9\u05dd >>;\n" + "50: \u05d5\u05d7\u05de\u05d9\u05e9\u05d9\u05dd;\n" + "51: \u05d7\u05de\u05d9\u05e9\u05d9\u05dd >>;\n" + "60: \u05d5\u05e9\u05d9\u05e9\u05d9\u05dd;\n" + "61: \u05e9\u05d9\u05e9\u05d9\u05dd >>;\n" + "70: \u05d5\u05e9\u05d1\u05e2\u05d9\u05dd;\n" + "71: \u05e9\u05d1\u05e2\u05d9\u05dd >>;\n" + "80: \u05d5\u05e9\u05de\u05d5\u05e0\u05d9\u05dd;\n" + "81: \u05e9\u05de\u05d5\u05e0\u05d9\u05dd >>;\n" + "90: \u05d5\u05ea\u05e9\u05e2\u05d9\u05dd;\n" + "91: \u05ea\u05e9\u05e2\u05d9\u05dd >>;\n" + "100: \u05d5\u05de\u05d0\u05d4;\n" + "101: \u05de\u05d0\u05d4 >>;\n" + "200: \u05d5\u05de\u05d0\u05ea\u05d9\u05d9\u05dd;\n" + "201: \u05de\u05d0\u05ea\u05d9\u05d9\u05dd >>;\n" + "300: \u05d5\u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "301: \u05e9\u05dc\u05d5\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "400: \u05d5\u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "401: \u05d0\u05e8\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "500: \u05d5\u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "501: \u05d7\u05de\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "600: \u05d5\u05e9\u05e9 \u05de\u05d0\u05d5\u05ea;\n" + "601: \u05e9\u05e9 \u05de\u05d0\u05d5\u05ea >>;\n" + "700: \u05d5\u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "701: \u05e9\u05d1\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "800: \u05d5\u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea;\n" + "801: \u05e9\u05de\u05d5\u05e0\u05d4 \u05de\u05d0\u05d5\u05ea >>;\n" + "900: \u05d5\u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea;\n" + "901: \u05ea\u05e9\u05e2 \u05de\u05d0\u05d5\u05ea >>;\n" + "1000: \u05d5\u05d0\u05dc\u05e3[ >>];\n" + "2000: \u05d5\u05d0\u05dc\u05e4\u05d9\u05d9\u05dd[ >>];\n" + "3000: <%%txunits< \u05d0\u05dc\u05e4\u05d9\u05dd[ >>];\n" + "11000/1000: <%%mxunits< \u05d0\u05dc\u05e3[ >>];\n" + "1,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000: <%%mxunits< \u05de\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000: \u05d5\u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "2,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "3,000,000,000: <%%mxunits< \u05de\u05d9\u05dc\u05d9\u05e8\u05d3[ >>];\n" + "1,000,000,000,000: \u05d5\u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "2,000,000,000,000: \u05d5\u05e9\u05e0\u05d9 \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "3,000,000,000,000: <%%mxunits< \u05d8\u05e8\u05d9\u05dc\u05d9\u05d5\u05df[ >>];\n" + "1,000,000,000,000,000: =#,###.##=;\n" + "%spellout_default:\n" "=%feminine=;\n" } diff --git a/icu4c/source/test/intltest/itrbnf.cpp b/icu4c/source/test/intltest/itrbnf.cpp index b9dd923bdf5..ff8a8603fd8 100644 --- a/icu4c/source/test/intltest/itrbnf.cpp +++ b/icu4c/source/test/intltest/itrbnf.cpp @@ -60,6 +60,7 @@ void IntlTestRBNF::runIndexedTest(int32_t index, UBool exec, const char* &name, TESTCASE(12, TestBelgianFrenchSpellout); TESTCASE(13, TestSmallValues); TESTCASE(14, TestLocalizations); + TESTCASE(15, TestAllLocales); #else TESTCASE(0, TestRBNFDisabled); #endif @@ -1607,6 +1608,51 @@ IntlTestRBNF::TestLocalizations(void) } } +void +IntlTestRBNF::TestAllLocales() +{ + const char* names[] = { + " (spellout) ", + " (ordinal) ", + " (duration) " + }; + UnicodeString err; + int32_t count = 0; + const Locale* locales = Locale::getAvailableLocales(count); + for (int i = 0; i < count; ++i) { + const Locale* loc = &locales[i]; + for (int j = 0; j < 3; ++j) { + UErrorCode status = U_ZERO_ERROR; + RuleBasedNumberFormat* f = new RuleBasedNumberFormat((URBNFRuleSetTag)j, *loc, status); + if (U_SUCCESS(status)) { + double n = 45.678; + UnicodeString str; + f->format(n, str); + delete f; + + UnicodeString msg; + msg.append(loc->getName()); + msg.append(names[j]); + msg.append("success: 45.678 -> "); + msg.append(str); + logln(msg); + } else { + UnicodeString msg; + msg.append(loc->getName()); + msg.append(names[j]); + msg.append("ERROR could not instantiate"); + logln(msg); + + err.append("\n"); + err.append(msg); + } + } + } + if (err.length()) { + errln(err); + } +} + void IntlTestRBNF::doTest(RuleBasedNumberFormat* formatter, const char* testData[][2], UBool testParsing) { diff --git a/icu4c/source/test/intltest/itrbnf.h b/icu4c/source/test/intltest/itrbnf.h index db4e118fb42..4a9699e525a 100644 --- a/icu4c/source/test/intltest/itrbnf.h +++ b/icu4c/source/test/intltest/itrbnf.h @@ -107,6 +107,11 @@ class IntlTestRBNF : public IntlTest { */ virtual void TestLocalizations(); + /** + * Test that all locales construct ok. + */ + virtual void TestAllLocales(); + protected: virtual void doTest(RuleBasedNumberFormat* formatter, const char* testData[][2], UBool testParsing); virtual void doLenientParseTest(RuleBasedNumberFormat* formatter, const char* testData[][2]); diff --git a/icu4j/src/com/ibm/icu/dev/data/testdata.jar b/icu4j/src/com/ibm/icu/dev/data/testdata.jar index 84cb8533e6a..6d7f07935b6 100644 --- a/icu4j/src/com/ibm/icu/dev/data/testdata.jar +++ b/icu4j/src/com/ibm/icu/dev/data/testdata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4419dbb266cdf6e41e658faf1afb3d8f5d3665b61a5481343a27b9352794a0b -size 660434 +oid sha256:5215a647091519d6960a866c26ab7f8d91ba0e6cfa4e0ce2e753ac52e22370c5 +size 660432 diff --git a/icu4j/src/com/ibm/icu/dev/test/format/RbnfTest.java b/icu4j/src/com/ibm/icu/dev/test/format/RbnfTest.java index 7def88975f2..51eef0e302d 100755 --- a/icu4j/src/com/ibm/icu/dev/test/format/RbnfTest.java +++ b/icu4j/src/com/ibm/icu/dev/test/format/RbnfTest.java @@ -13,6 +13,7 @@ import com.ibm.icu.util.ULocale; import java.math.BigInteger; import java.math.BigDecimal; import java.util.Locale; +import java.util.Random; import java.text.DecimalFormat; import java.text.NumberFormat; @@ -875,7 +876,44 @@ public class RbnfTest extends TestFmwk { assertEquals("getRuleSetDisplayNames in fake locale", localizations[3][i+1], RSNames_loc[i]); } } - + + public void TestAllLocales() { + StringBuffer errors = null; + ULocale[] locales = ULocale.getAvailableLocales(); + Random r = createRandom(); + String[] names = { + " (spellout) ", + " (ordinal) ", + " (duration) " + }; + for (int i = 0; i < locales.length; ++i) { + ULocale loc = locales[i]; + for (int j = 0; j < 3; ++j) { + try { + RuleBasedNumberFormat fmt = new RuleBasedNumberFormat(loc, j+1); + float n = ((int)(r.nextInt(1000) - 300)) / 16f; + String s = fmt.format(n); + if (isVerbose()) { + logln(loc.getName() + names[j] + "success: " + n + " -> " + s); + } + } + catch (Exception e) { + String msg = loc.getName() + names[j] + "ERROR:" + e.getMessage(); + if (isVerbose()) { + logln(msg); + } + if (errors == null) { + errors = new StringBuffer(); + } + errors.append("\n" + msg); + } + } + } + if (errors != null) { + errln(errors.toString()); + } + } + void doTest(RuleBasedNumberFormat formatter, String[][] testData, boolean testParsing) { // NumberFormat decFmt = NumberFormat.getInstance(Locale.US); diff --git a/icu4j/src/com/ibm/icu/impl/data/icudata.jar b/icu4j/src/com/ibm/icu/impl/data/icudata.jar index 3771048f006..abda8f99082 100644 --- a/icu4j/src/com/ibm/icu/impl/data/icudata.jar +++ b/icu4j/src/com/ibm/icu/impl/data/icudata.jar @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:414f2b370002ac8e172c7b6a4eddac8dcba85f8f290c13e3395752d9e69d429b -size 2071226 +oid sha256:e5511ab4b785186366a1812695fa3d1c87e1afb2168b430d307fa1900c4a74fa +size 2072190