17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 1996-2014, Google, International Business Machines Corporation and 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.format; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.AttributedCharacterIterator; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.CharacterIterator; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.FieldPosition; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collection; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashMap; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.LinkedHashSet; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CompactDecimalFormat; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.CompactDecimalFormat.CompactStyle; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.DecimalFormatSymbols; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.NumberFormat; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.PluralRules; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class CompactDecimalFormatTest extends TestFmwk { 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) { 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new CompactDecimalFormatTest().run(args); 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] EnglishTestData = { 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // default is 2 digits of accuracy 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0.0d, "0"}, 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0.01d, "0.01"}, 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0.1d, "0.1"}, 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1d, "1"}, 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12, "12"}, 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123, "120"}, 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234, "1.2K"}, 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000, "1K"}, 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1049, "1K"}, 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345, "12K"}, 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456, "120K"}, 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567, "1.2M"}, 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678, "12M"}, 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789, "120M"}, 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890, "1.2B"}, 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901f, "12B"}, 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012f, "120B"}, 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123f, "1.2T"}, 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234f, "12T"}, 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012345f, "120T"}, 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234567890f, "12000000T"}, 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SerbianTestDataShort = { 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234, "1,2\u00A0\u0445\u0438\u0459."}, 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345, "12\u00a0хиљ."}, 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {20789, "21\u00a0хиљ."}, 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456, "120\u00a0хиљ."}, 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567, "1,2\u00a0мил."}, 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678, "12\u00a0мил."}, 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789, "120\u00a0мил."}, 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890, "1,2\u00a0млрд."}, 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901f, "12\u00a0млрд."}, 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012f, "120\u00a0млрд."}, 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123f, "1,2\u00a0бил."}, 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234f, "12\u00a0бил."}, 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012345f, "120\u00a0бил."}, 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123456f, "1200\u00a0бил."}, 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SerbianTestDataLong = { 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234, "1,2 хиљаде"}, 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345, "12 хиљада"}, 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {21789, "22 хиљаде"}, 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456, "120 хиљада"}, 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {999999, "1 милион"}, 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567, "1,2 милиона"}, 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678, "12 милиона"}, 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789, "120 милиона"}, 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890, "1,2 милијарде"}, 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901f, "12 милијарди"}, 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {20890123456f, "21 милијарда"}, 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {21890123456f, "22 милијарде"}, 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012f, "120 милијарди"}, 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123f, "1,2 трилиона"}, 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234f, "12 трилиона"}, 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012345f, "120 трилиона"}, 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123456f, "1.200 трилиона"}, 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SerbianTestDataLongNegative = { 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234, "-1,2 хиљаде"}, 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345, "-12 хиљада"}, 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-21789, "-22 хиљаде"}, 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456, "-120 хиљада"}, 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-999999, "-1 милион"}, 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567, "-1,2 милиона"}, 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678, "-12 милиона"}, 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456789, "-120 милиона"}, 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567890, "-1,2 милијарде"}, 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678901f, "-12 милијарди"}, 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-20890123456f, "-21 милијарда"}, 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-21890123456f, "-22 милијарде"}, 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456789012f, "-120 милијарди"}, 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567890123f, "-1,2 трилиона"}, 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678901234f, "-12 трилиона"}, 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456789012345f, "-120 трилиона"}, 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567890123456f, "-1.200 трилиона"}, 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] JapaneseTestData = { 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234f, "1.2千"}, 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345f, "1.2万"}, 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456f, "12万"}, 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567f, "120万"}, 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678f, "1200万"}, 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789f, "1.2億"}, 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890f, "12億"}, 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901f, "120億"}, 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012f, "1200億"}, 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123f, "1.2兆"}, 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234f, "12兆"}, 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012345f, "120兆"}, 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SwahiliTestData = { 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234f, "elfu\u00a01.2"}, 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345f, "elfu\u00a012"}, 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456f, "elfu\u00A0120"}, 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567f, "M1.2"}, 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678f, "M12"}, 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789f, "M120"}, 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890f, "B1.2"}, 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901f, "B12"}, 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {123456789012f, "B120"}, 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1234567890123f, "T1.2"}, 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234f, "T12"}, 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12345678901234567890f, "T12000000"}, 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] CsTestDataShort = { 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000, "1\u00a0tis."}, 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1500, "1,5\u00a0tis."}, 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {5000, "5\u00a0tis."}, 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {23000, "23\u00a0tis."}, 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {127123, "130\u00a0tis."}, 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1271234, "1,3\u00a0mil."}, 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12712345, "13\u00a0mil."}, 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {127123456, "130\u00a0mil."}, 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1271234567f, "1,3\u00a0mld."}, 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12712345678f, "13\u00a0mld."}, 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {127123456789f, "130\u00a0mld."}, 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1271234567890f, "1,3\u00a0bil."}, 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {12712345678901f, "13\u00a0bil."}, 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {127123456789012f, "130\u00a0bil."}, 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SkTestDataLong = { 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000, "1 tis\u00edc"}, 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1572, "1,6 tis\u00edc"}, 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {5184, "5,2 tis\u00edc"}, 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] SwahiliTestDataNegative = { 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234f, "elfu\u00a0-1.2"}, 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345f, "elfu\u00a0-12"}, 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456f, "elfu\u00A0-120"}, 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567f, "M-1.2"}, 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678f, "M-12"}, 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456789f, "M-120"}, 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567890f, "B-1.2"}, 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678901f, "B-12"}, 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-123456789012f, "B-120"}, 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-1234567890123f, "T-1.2"}, 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678901234f, "T-12"}, 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {-12345678901234567890f, "T-12000000"}, 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] TestACoreCompactFormatList = { 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000, "1K"}, 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1100, "1,1K"}, 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1200, "1,2Ks"}, 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {2000, "2Ks"}, 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object[][] TestACoreCompactFormatListCurrency = { 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000, "1K$"}, 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1100, "1,1K$"}, 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1200, "1,2Ks$s"}, 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {2000, "2Ks$s"}, 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestACoreCompactFormat() { 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Map<String,String[][]> affixes = new HashMap(); 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert affixes.put("one", new String[][] { 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","",}, {"","",}, {"","",}, 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","K"}, {"","K"}, {"","K"}, 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","M"}, {"","M"}, {"","M"}, 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","B"}, {"","B"}, {"","B"}, 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","T"}, {"","T"}, {"","T"}, 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert affixes.put("other", new String[][] { 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","",}, {"","",}, {"","",}, 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","Ks"}, {"","Ks"}, {"","Ks"}, 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","Ms"}, {"","Ms"}, {"","Ms"}, 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","Bs"}, {"","Bs"}, {"","Bs"}, 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {"","Ts"}, {"","Ts"}, {"","Ts"}, 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Map<String,String[]> currencyAffixes = new HashMap(); 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert currencyAffixes.put("one", new String[] {"", "$"}); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert currencyAffixes.put("other", new String[] {"", "$s"}); 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert long[] divisors = new long[] { 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0,0,0, 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000, 1000, 1000, 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000000, 1000000, 1000000, 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000000000L, 1000000000L, 1000000000L, 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000000000000L, 1000000000000L, 1000000000000L}; 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkCore(affixes, null, divisors, TestACoreCompactFormatList); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkCore(affixes, currencyAffixes, divisors, TestACoreCompactFormatListCurrency); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void checkCore(Map<String, String[][]> affixes, Map<String, String[]> currencyAffixes, long[] divisors, Object[][] testItems) { 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Collection<String> debugCreationErrors = new LinkedHashSet(); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = new CompactDecimalFormat( 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "#,###.00", 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DecimalFormatSymbols.getInstance(new ULocale("fr")), 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactStyle.SHORT, PluralRules.createRules("one: j is 1 or f is 1"), 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert divisors, affixes, currencyAffixes, 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert debugCreationErrors 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (debugCreationErrors.size() != 0) { 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String s : debugCreationErrors) { 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Creation error: " + s); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkCdf("special cdf ", cdf, testItems); 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDefaultSignificantDigits() { 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // We are expecting two significant digits as default. 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat.getInstance(ULocale.ENGLISH, CompactStyle.SHORT); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Default significant digits", "12K", cdf.format(12345)); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Default significant digits", "1.2K", cdf.format(1234)); 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Default significant digits", "120", cdf.format(123)); 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCharacterIterator() { 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert getCDFInstance(ULocale.forLanguageTag("sw"), CompactStyle.SHORT); 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert AttributedCharacterIterator iter = cdf.formatToCharacterIterator(1234567); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("CharacterIterator", "M1.2", iterToString(iter)); 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iter = cdf.formatToCharacterIterator(1234567); 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iter.setIndex(1); 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Attributes", NumberFormat.Field.INTEGER, iter.getAttribute(NumberFormat.Field.INTEGER)); 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Attributes", 1, iter.getRunStart()); 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Attributes", 2, iter.getRunLimit()); 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestEnglishShort() { 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.ENGLISH, CompactStyle.SHORT, EnglishTestData); 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestArabicLongStyle() { 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NumberFormat cdf = 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat.getInstance( 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale.forLanguageTag("ar"), CompactStyle.LONG); 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("Arabic Long", "\u200F-\u0665\u066B\u0663 \u0623\u0644\u0641", cdf.format(-5300)); 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCsShort() { 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("cs"), CompactStyle.SHORT, CsTestDataShort); 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSkLong() { 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sk"), CompactStyle.LONG, SkTestDataLong); 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSerbianShort() { 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sr"), CompactStyle.SHORT, SerbianTestDataShort); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSerbianLong() { 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sr"), CompactStyle.LONG, SerbianTestDataLong); 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSerbianLongNegative() { 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sr"), CompactStyle.LONG, SerbianTestDataLongNegative); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestJapaneseShort() { 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.JAPANESE, CompactStyle.SHORT, JapaneseTestData); 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSwahiliShort() { 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sw"), CompactStyle.SHORT, SwahiliTestData); 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSwahiliShortNegative() { 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkLocale(ULocale.forLanguageTag("sw"), CompactStyle.SHORT, SwahiliTestDataNegative); 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestFieldPosition() { 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = getCDFInstance( 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale.forLanguageTag("sw"), CompactStyle.SHORT); 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert FieldPosition fp = new FieldPosition(0); 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer sb = new StringBuffer(); 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdf.format(1234567f, sb, fp); 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("fp string", "M1.2", sb.toString()); 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("fp start", 1, fp.getBeginIndex()); 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("fp end", 2, fp.getEndIndex()); 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestEquals() { 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = CompactDecimalFormat.getInstance( 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale.forLanguageTag("sw"), CompactStyle.SHORT); 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat equalsCdf = CompactDecimalFormat.getInstance( 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale.forLanguageTag("sw"), CompactStyle.SHORT); 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat notEqualsCdf = CompactDecimalFormat.getInstance( 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale.forLanguageTag("sw"), CompactStyle.LONG); 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("equals", cdf, equalsCdf); 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertNotEquals("not equals", cdf, notEqualsCdf); 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void checkLocale(ULocale locale, CompactStyle style, Object[][] testData) { 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat cdf = getCDFInstance(locale, style); 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert checkCdf(locale + " (" + locale.getDisplayName(locale) + ") for ", cdf, testData); 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void checkCdf(String title, CompactDecimalFormat cdf, Object[][] testData) { 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (Object[] row : testData) { 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object source = row[0]; 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object expected = row[1]; 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(title + source, expected, 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert cdf.format(source)); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static String iterToString(CharacterIterator iter) { 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuilder builder = new StringBuilder(); 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char c = iter.current(); c != CharacterIterator.DONE; c = iter.next()) { 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert builder.append(c); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return builder.toString(); 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static CompactDecimalFormat getCDFInstance(ULocale locale, CompactStyle style) { 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CompactDecimalFormat result = CompactDecimalFormat.getInstance(locale, style); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Our tests are written for two significant digits. We set explicitly here 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // because default significant digits may change. 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result.setMaximumSignificantDigits(2); 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return result; 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 361