18393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/* 28393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius******************************************************************************* 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* Copyright (C) 1997-2013, International Business Machines Corporation and * 48393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* others. All Rights Reserved. * 58393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius******************************************************************************* 68393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* 78393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* File COMPACTDECIMALFORMATTEST.CPP 88393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* 98393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius******************************************************************************** 108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius*/ 118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include <stdio.h> 128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include <stdlib.h> 138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "intltest.h" 158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#if !UCONFIG_NO_FORMATTING 178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "unicode/compactdecimalformat.h" 198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "unicode/unum.h" 208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#define LENGTHOF(array) (int32_t)(sizeof(array) / sizeof((array)[0])) 228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliustypedef struct ExpectedResult { 248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius double value; 258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const char *expected; 268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} ExpectedResult; 278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic const char *kShortStr = "Short"; 298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic const char *kLongStr = "Long"; 308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kEnglishShort[] = { 3259d709d503bab6e2b61931737e662dd293b40578ccornelius {0.0, "0"}, 338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {0.17, "0.17"}, 348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.0, "1"}, 358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234.0, "1.2K"}, 368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345.0, "12K"}, 378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456.0, "120K"}, 388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234567.0, "1.2M"}, 398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345678.0, "12M"}, 408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456789.0, "120M"}, 418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E9, "1.2B"}, 428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E10, "12B"}, 438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E11, "120B"}, 448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E12, "1.2T"}, 458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E13, "12T"}, 468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E14, "120T"}, 478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E15, "1200T"}}; 488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSerbianShort[] = { 508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234.0, "1200"}, 5159d709d503bab6e2b61931737e662dd293b40578ccornelius {12345.0, "12\\u00a0\\u0445\\u0438\\u0459"}, 528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {20789.0, "21\\u00a0\\u0445\\u0438\\u0459"}, 538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456.0, "120\\u00a0\\u0445\\u0438\\u0459"}, 548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234567.0, "1,2\\u00A0\\u043C\\u0438\\u043B"}, 558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345678.0, "12\\u00A0\\u043C\\u0438\\u043B"}, 568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456789.0, "120\\u00A0\\u043C\\u0438\\u043B"}, 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E9, "1,2\\u00A0\\u043C\\u043B\\u0440\\u0434"}, 588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E10, "12\\u00A0\\u043C\\u043B\\u0440\\u0434"}, 598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E11, "120\\u00A0\\u043C\\u043B\\u0440\\u0434"}, 608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E12, "1,2\\u00A0\\u0431\\u0438\\u043B"}, 618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E13, "12\\u00A0\\u0431\\u0438\\u043B"}, 628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E14, "120\\u00A0\\u0431\\u0438\\u043B"}, 638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E15, "1200\\u00A0\\u0431\\u0438\\u043B"}}; 648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSerbianLong[] = { 6659d709d503bab6e2b61931737e662dd293b40578ccornelius {1234.0, "1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few 6759d709d503bab6e2b61931737e662dd293b40578ccornelius {12345.0, "12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other 6859d709d503bab6e2b61931737e662dd293b40578ccornelius {21789.0, "22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few 6959d709d503bab6e2b61931737e662dd293b40578ccornelius {123456.0, "120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other 7059d709d503bab6e2b61931737e662dd293b40578ccornelius {999999.0, "1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"}, // 10^6 one 7159d709d503bab6e2b61931737e662dd293b40578ccornelius {1234567.0, "1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 few 7259d709d503bab6e2b61931737e662dd293b40578ccornelius {12345678.0, "12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other 7359d709d503bab6e2b61931737e662dd293b40578ccornelius {123456789.0, "120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other 7459d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E9, "1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few 7559d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E10, "12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other 7659d709d503bab6e2b61931737e662dd293b40578ccornelius {2.08901234E10, "21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"}, // 10^9 one 7759d709d503bab6e2b61931737e662dd293b40578ccornelius {2.18901234E10, "22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few 7859d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E11, "120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other 7959d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E12, "1,2 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 few 8059d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E13, "12 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 other 8159d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E14, "120 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 other 8259d709d503bab6e2b61931737e662dd293b40578ccornelius {1.23456789E15, "1200 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}}; // 10^12 other 838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSerbianLongNegative[] = { 8559d709d503bab6e2b61931737e662dd293b40578ccornelius {-1234.0, "-1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, 868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-12345.0, "-12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, 878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-21789.0, "-22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, 888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-123456.0, "-120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, 898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-999999.0, "-1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"}, 908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1234567.0, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-12345678.0, "-12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-123456789.0, "-120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 9359d709d503bab6e2b61931737e662dd293b40578ccornelius {-1.23456789E9, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E10, "-12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, 958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-2.08901234E10, "-21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"}, 968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-2.18901234E10, "-22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, 978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E11, "-120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, 988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E12, "-1,2 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E13, "-12 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E14, "-120 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, 1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E15, "-1200 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}}; 1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kJapaneseShort[] = { 1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234.0, "1.2\\u5343"}, 1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345.0, "1.2\\u4E07"}, 1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456.0, "12\\u4E07"}, 1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234567.0, "120\\u4E07"}, 1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345678.0, "1200\\u4E07"}, 1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456789.0, "1.2\\u5104"}, 1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E9, "12\\u5104"}, 1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E10, "120\\u5104"}, 1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E11, "1200\\u5104"}, 1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E12, "1.2\\u5146"}, 1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E13, "12\\u5146"}, 1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E14, "120\\u5146"}}; 1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSwahiliShort[] = { 1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234.0, "elfu\\u00a01.2"}, 1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345.0, "elfu\\u00a012"}, 1208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456.0, "laki1.2"}, 1218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1234567.0, "M1.2"}, 1228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12345678.0, "M12"}, 1238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {123456789.0, "M120"}, 1248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E9, "B1.2"}, 1258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E10, "B12"}, 1268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E11, "B120"}, 1278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E12, "T1.2"}, 1288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E13, "T12"}, 1298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.23456789E15, "T1200"}}; 1308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kCsShort[] = { 1328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1000.0, "1\\u00a0tis."}, 1338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1500.0, "1,5\\u00a0tis."}, 1348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {5000.0, "5\\u00a0tis."}, 1358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {23000.0, "23\\u00a0tis."}, 1368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {127123.0, "130\\u00a0tis."}, 1378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1271234.0, "1,3\\u00a0mil."}, 1388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {12712345.0, "13\\u00a0mil."}, 1398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {127123456.0, "130\\u00a0mil."}, 1408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E9, "1,3\\u00a0mld."}, 1418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E10, "13\\u00a0mld."}, 1428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E11, "130\\u00a0mld."}, 1438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E12, "1,3\\u00a0bil."}, 1448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E13, "13\\u00a0bil."}, 1458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1.27123456E14, "130\\u00a0bil."}}; 1468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSkLong[] = { 1488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1000.0, "1 tis\\u00edc"}, 1498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {1572.0, "1,6 tis\\u00edc"}, 1508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {5184.0, "5,2 tis\\u00edc"}}; 1518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kSwahiliShortNegative[] = { 1538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1234.0, "elfu\\u00a0-1.2"}, 1548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-12345.0, "elfu\\u00a0-12"}, 1558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-123456.0, "laki-1.2"}, 1568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1234567.0, "M-1.2"}, 1578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-12345678.0, "M-12"}, 1588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-123456789.0, "M-120"}, 1598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E9, "B-1.2"}, 1608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E10, "B-12"}, 1618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E11, "B-120"}, 1628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E12, "T-1.2"}, 1638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E13, "T-12"}, 1648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius {-1.23456789E15, "T-1200"}}; 1658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic ExpectedResult kArabicLong[] = { 16759d709d503bab6e2b61931737e662dd293b40578ccornelius {-5300.0, "\\u200F-\\u0665\\u066B\\u0663 \\u0623\\u0644\\u0641"}}; 1688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusclass CompactDecimalFormatTest : public IntlTest { 1718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliuspublic: 1728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CompactDecimalFormatTest() { 1738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0); 1768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusprivate: 1778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestEnglishShort(); 1788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSerbianShort(); 1798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSerbianLong(); 1808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSerbianLongNegative(); 1818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestJapaneseShort(); 1828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSwahiliShort(); 1838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestCsShort(); 1848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSkLong(); 1858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSwahiliShortNegative(); 1868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestArabicLong(); 1878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestFieldPosition(); 1888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void TestSignificantDigits(); 1898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void CheckLocale( 1908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const Locale& locale, UNumberCompactStyle style, 1918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const ExpectedResult* expectedResult, int32_t expectedResultLength); 1928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius void CheckExpectedResult( 1938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult, 1948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const char* description); 1958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CompactDecimalFormat* createCDFInstance(const Locale& locale, UNumberCompactStyle style, UErrorCode& status); 1968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius static const char *StyleStr(UNumberCompactStyle style); 1978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius}; 1988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::runIndexedTest( 2008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int32_t index, UBool exec, const char *&name, char *) { 2018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (exec) { 2028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius logln("TestSuite CompactDecimalFormatTest: "); 2038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_BEGIN; 2058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestEnglishShort); 2068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSerbianShort); 2078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSerbianLong); 2088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSerbianLongNegative); 2098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestJapaneseShort); 2108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSwahiliShort); 2118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestCsShort); 2128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSkLong); 2138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSwahiliShortNegative); 2148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestArabicLong); 2158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestFieldPosition); 2168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO(TestSignificantDigits); 2178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE_AUTO_END; 2188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestEnglishShort() { 2218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("en", UNUM_SHORT, kEnglishShort, LENGTHOF(kEnglishShort)); 2228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSerbianShort() { 2258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sr", UNUM_SHORT, kSerbianShort, LENGTHOF(kSerbianShort)); 2268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSerbianLong() { 2298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sr", UNUM_LONG, kSerbianLong, LENGTHOF(kSerbianLong)); 2308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSerbianLongNegative() { 2338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sr", UNUM_LONG, kSerbianLongNegative, LENGTHOF(kSerbianLongNegative)); 2348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestJapaneseShort() { 2378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale(Locale::getJapan(), UNUM_SHORT, kJapaneseShort, LENGTHOF(kJapaneseShort)); 2388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSwahiliShort() { 2418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sw", UNUM_SHORT, kSwahiliShort, LENGTHOF(kSwahiliShort)); 2428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestFieldPosition() { 2458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // Swahili uses prefixes which forces offsets in field position to change 2468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 2478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LocalPointer<CompactDecimalFormat> cdf(createCDFInstance("sw", UNUM_SHORT, status)); 2488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 2498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius dataerrln("Unable to create format object - %s", u_errorName(status)); 2508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 2518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius FieldPosition fp(UNUM_INTEGER_FIELD); 2538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString result; 2548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius cdf->format(1234567.0, result, fp); 2558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString subString = result.tempSubString(fp.getBeginIndex(), fp.getEndIndex() - fp.getBeginIndex()); 2568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (subString != UnicodeString("1", -1, US_INV)) { 2578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("Expected 1, got ") + subString); 2588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestCsShort() { 2628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("cs", UNUM_SHORT, kCsShort, LENGTHOF(kCsShort)); 2638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSkLong() { 2668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // In CLDR we have: 2678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // 1000 { 2688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // few{"0"} 2698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // one{"0"} 2708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // other{"0"} 2718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sk", UNUM_LONG, kSkLong, LENGTHOF(kSkLong)); 2728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSwahiliShortNegative() { 2758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("sw", UNUM_SHORT, kSwahiliShortNegative, LENGTHOF(kSwahiliShortNegative)); 2768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestArabicLong() { 2798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckLocale("ar", UNUM_LONG, kArabicLong, LENGTHOF(kArabicLong)); 2808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::TestSignificantDigits() { 2838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 2848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LocalPointer<CompactDecimalFormat> cdf(CompactDecimalFormat::createInstance("en", UNUM_SHORT, status)); 2858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 2868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius dataerrln("Unable to create format object - %s", u_errorName(status)); 2878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 2888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString actual; 2908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius cdf->format(123456.0, actual); 2918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // We expect 3 significant digits by default 2928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString expected("123K", -1, US_INV); 2938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (actual != expected) { 2948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("Fail: Expected: ") + expected + UnicodeString(" Got: ") + actual); 2958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 2978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::CheckLocale(const Locale& locale, UNumberCompactStyle style, const ExpectedResult* expectedResults, int32_t expectedResultLength) { 2998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 3008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LocalPointer<CompactDecimalFormat> cdf(createCDFInstance(locale, style, status)); 3018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 3028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius dataerrln("Unable to create format object - %s", u_errorName(status)); 3038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 3048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius char description[256]; 3068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius sprintf(description,"%s - %s", locale.getName(), StyleStr(style)); 3078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius for (int32_t i = 0; i < expectedResultLength; i++) { 3088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CheckExpectedResult(cdf.getAlias(), &expectedResults[i], description); 3098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid CompactDecimalFormatTest::CheckExpectedResult( 3138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult, const char* description) { 3148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString actual; 3158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius cdf->format(expectedResult->value, actual); 3168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UnicodeString expected(expectedResult->expected, -1, US_INV); 3178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius expected = expected.unescape(); 3188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (actual != expected) { 3198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius errln(UnicodeString("Fail: Expected: ") + expected 3208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius + UnicodeString(" Got: ") + actual 3218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius + UnicodeString(" for: ") + UnicodeString(description)); 3228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusCompactDecimalFormat* 3268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusCompactDecimalFormatTest::createCDFInstance(const Locale& locale, UNumberCompactStyle style, UErrorCode& status) { 3278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius CompactDecimalFormat* result = CompactDecimalFormat::createInstance(locale, style, status); 3288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 3298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return NULL; 3308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // All tests are written for two significant digits, so we explicitly set here 3328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius // in case default significant digits change. 3338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius result->setMaximumSignificantDigits(2); 3348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return result; 3358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusconst char *CompactDecimalFormatTest::StyleStr(UNumberCompactStyle style) { 3388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (style == UNUM_SHORT) { 3398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return kShortStr; 3408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return kLongStr; 3428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusextern IntlTest *createCompactDecimalFormatTest() { 3458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return new CompactDecimalFormatTest(); 3468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#endif 349