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