190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*******************************************************************************
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* Copyright (C) 1997-2013, International Business Machines Corporation and    *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* others. All Rights Reserved.                                                *
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)*******************************************************************************
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* File COMPACTDECIMALFORMATTEST.CPP
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch********************************************************************************
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <stdio.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "intltest.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !UCONFIG_NO_FORMATTING
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "unicode/compactdecimalformat.h"
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "unicode/unum.h"
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define LENGTHOF(array) (int32_t)(sizeof(array) / sizeof((array)[0]))
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)typedef struct ExpectedResult {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double value;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char *expected;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} ExpectedResult;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *kShortStr = "Short";
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *kLongStr = "Long";
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kEnglishShort[] = {
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {0.0, "0"},
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {0.17, "0.17"},
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.0, "1"},
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234.0, "1.2K"},
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345.0, "12K"},
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456.0, "120K"},
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234567.0, "1.2M"},
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345678.0, "12M"},
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456789.0, "120M"},
416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  {1.23456789E9, "1.2B"},
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E10, "12B"},
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E11, "120B"},
446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  {1.23456789E12, "1.2T"},
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E13, "12T"},
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E14, "120T"},
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E15, "1200T"}};
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kSerbianShort[] = {
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234.0, "1200"},
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345.0, "12\\u00a0\\u0445\\u0438\\u0459"},
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {20789.0, "21\\u00a0\\u0445\\u0438\\u0459"},
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456.0, "120\\u00a0\\u0445\\u0438\\u0459"},
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234567.0, "1,2\\u00A0\\u043C\\u0438\\u043B"},
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345678.0, "12\\u00A0\\u043C\\u0438\\u043B"},
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456789.0, "120\\u00A0\\u043C\\u0438\\u043B"},
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E9, "1,2\\u00A0\\u043C\\u043B\\u0440\\u0434"},
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E10, "12\\u00A0\\u043C\\u043B\\u0440\\u0434"},
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E11, "120\\u00A0\\u043C\\u043B\\u0440\\u0434"},
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E12, "1,2\\u00A0\\u0431\\u0438\\u043B"},
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E13, "12\\u00A0\\u0431\\u0438\\u043B"},
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E14, "120\\u00A0\\u0431\\u0438\\u043B"},
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E15, "1200\\u00A0\\u0431\\u0438\\u043B"}};
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ExpectedResult kSerbianLong[] = {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1234.0, "1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {12345.0, "12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {21789.0, "22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"}, // 10^3 few
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {123456.0, "120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"}, // 10^3 other
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {999999.0, "1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"}, // 10^6 one
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1234567.0, "1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 few
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {12345678.0, "12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {123456789.0, "120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^6 other
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E9, "1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E10, "12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {2.08901234E10, "21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"}, // 10^9 one
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {2.18901234E10, "22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"}, // 10^9 few
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E11, "120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"}, // 10^9 other
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E12, "1,2 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 few
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E13, "12 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 other
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E14, "120 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}, // 10^12 other
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E15, "1200 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}}; // 10^12 other
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ExpectedResult kSerbianLongNegative[] = {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1234.0, "-1,2 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"},
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-12345.0, "-12 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"},
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-21789.0, "-22 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0435"},
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-123456.0, "-120 \\u0445\\u0438\\u0459\\u0430\\u0434\\u0430"},
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-999999.0, "-1 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D"},
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1234567.0, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-12345678.0, "-12 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-123456789.0, "-120 \\u043C\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E9, "-1,2 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"},
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E10, "-12 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"},
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-2.08901234E10, "-21 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0430"},
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-2.18901234E10, "-22 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0435"},
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E11, "-120 \\u043C\\u0438\\u043B\\u0438\\u0458\\u0430\\u0440\\u0434\\u0438"},
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E12, "-1,2 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E13, "-12 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E14, "-120 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"},
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {-1.23456789E15, "-1200 \\u0442\\u0440\\u0438\\u043B\\u0438\\u043E\\u043D\\u0430"}};
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ExpectedResult kJapaneseShort[] = {
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {1234.0, "1.2\\u5343"},
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {12345.0, "1.2\\u4E07"},
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {123456.0, "12\\u4E07"},
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {1234567.0, "120\\u4E07"},
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {12345678.0, "1200\\u4E07"},
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {123456789.0, "1.2\\u5104"},
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {1.23456789E9, "12\\u5104"},
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E10, "120\\u5104"},
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {1.23456789E11, "1200\\u5104"},
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E12, "1.2\\u5146"},
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {1.23456789E13, "12\\u5146"},
1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E14, "120\\u5146"}};
1167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kSwahiliShort[] = {
1187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234.0, "elfu\\u00a01.2"},
1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345.0, "elfu\\u00a012"},
1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456.0, "laki1.2"},
1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1234567.0, "M1.2"},
1227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12345678.0, "M12"},
1237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {123456789.0, "M120"},
1247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E9, "B1.2"},
1257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E10, "B12"},
1267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E11, "B120"},
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E12, "T1.2"},
1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E13, "T12"},
1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.23456789E15, "T1200"}};
1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kCsShort[] = {
1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1000.0, "1\\u00a0tis."},
1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1500.0, "1,5\\u00a0tis."},
1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {5000.0, "5\\u00a0tis."},
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {23000.0, "23\\u00a0tis."},
1366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  {127123.0, "130\\u00a0tis."},
1376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  {1271234.0, "1,3\\u00a0mil."},
1387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {12712345.0, "13\\u00a0mil."},
1396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  {127123456.0, "130\\u00a0mil."},
1407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E9, "1,3\\u00a0mld."},
1417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E10, "13\\u00a0mld."},
1427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E11, "130\\u00a0mld."},
1437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E12, "1,3\\u00a0bil."},
1447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E13, "13\\u00a0bil."},
1457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1.27123456E14, "130\\u00a0bil."}};
1467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kSkLong[] = {
1487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1000.0, "1 tis\\u00edc"},
1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {1572.0, "1,6 tis\\u00edc"},
1507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {5184.0, "5,2 tis\\u00edc"}};
1517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kSwahiliShortNegative[] = {
1537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1234.0, "elfu\\u00a0-1.2"},
1547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-12345.0, "elfu\\u00a0-12"},
1557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-123456.0, "laki-1.2"},
1567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1234567.0, "M-1.2"},
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-12345678.0, "M-12"},
1587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-123456789.0, "M-120"},
1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E9, "B-1.2"},
1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E10, "B-12"},
1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E11, "B-120"},
1627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E12, "T-1.2"},
1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E13, "T-12"},
1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-1.23456789E15, "T-1200"}};
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static ExpectedResult kArabicLong[] = {
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  {-5300.0, "\\u200F-\\u0665\\u066B\\u0663 \\u0623\\u0644\\u0641"}};
1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CompactDecimalFormatTest : public IntlTest {
1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)public:
1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    CompactDecimalFormatTest() {
17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)private:
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void TestEnglishShort();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestSerbianShort();
17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    void TestSerbianLong();
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestSerbianLongNegative();
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestJapaneseShort();
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void TestSwahiliShort();
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    void TestCsShort();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestSkLong();
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void TestSwahiliShortNegative();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestArabicLong();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void TestFieldPosition();
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void TestSignificantDigits();
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void CheckLocale(
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        const Locale& locale, UNumberCompactStyle style,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const ExpectedResult* expectedResult, int32_t expectedResultLength);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void CheckExpectedResult(
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const char* description);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CompactDecimalFormat* createCDFInstance(const Locale& locale, UNumberCompactStyle style, UErrorCode& status);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static const char *StyleStr(UNumberCompactStyle style);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::runIndexedTest(
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int32_t index, UBool exec, const char *&name, char *) {
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (exec) {
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logln("TestSuite CompactDecimalFormatTest: ");
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO_BEGIN;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestEnglishShort);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSerbianShort);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSerbianLong);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSerbianLongNegative);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestJapaneseShort);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSwahiliShort);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestCsShort);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSkLong);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestSwahiliShortNegative);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestArabicLong);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TESTCASE_AUTO(TestFieldPosition);
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TESTCASE_AUTO(TestSignificantDigits);
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TESTCASE_AUTO_END;
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestEnglishShort() {
22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CheckLocale("en", UNUM_SHORT, kEnglishShort, LENGTHOF(kEnglishShort));
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSerbianShort() {
22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CheckLocale("sr", UNUM_SHORT, kSerbianShort, LENGTHOF(kSerbianShort));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSerbianLong() {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CheckLocale("sr", UNUM_LONG, kSerbianLong, LENGTHOF(kSerbianLong));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSerbianLongNegative() {
23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CheckLocale("sr", UNUM_LONG, kSerbianLongNegative, LENGTHOF(kSerbianLongNegative));
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestJapaneseShort() {
23790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CheckLocale(Locale::getJapan(), UNUM_SHORT, kJapaneseShort, LENGTHOF(kJapaneseShort));
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSwahiliShort() {
241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  CheckLocale("sw", UNUM_SHORT, kSwahiliShort, LENGTHOF(kSwahiliShort));
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void CompactDecimalFormatTest::TestFieldPosition() {
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Swahili uses prefixes which forces offsets in field position to change
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UErrorCode status = U_ZERO_ERROR;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LocalPointer<CompactDecimalFormat> cdf(createCDFInstance("sw", UNUM_SHORT, status));
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (U_FAILURE(status)) {
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dataerrln("Unable to create format object - %s", u_errorName(status));
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FieldPosition fp(UNUM_INTEGER_FIELD);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString result;
25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  cdf->format(1234567.0, result, fp);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString subString = result.tempSubString(fp.getBeginIndex(), fp.getEndIndex() - fp.getBeginIndex());
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (subString != UnicodeString("1", -1, US_INV)) {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    errln(UnicodeString("Expected 1, got ") + subString);
25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
261868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void CompactDecimalFormatTest::TestCsShort() {
262868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  CheckLocale("cs", UNUM_SHORT, kCsShort, LENGTHOF(kCsShort));
263868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSkLong() {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In CLDR we have:
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 1000 {
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   few{"0"}
269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   one{"0"}
270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  //   other{"0"}
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CheckLocale("sk", UNUM_LONG, kSkLong, LENGTHOF(kSkLong));
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
27390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::TestSwahiliShortNegative() {
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CheckLocale("sw", UNUM_SHORT, kSwahiliShortNegative, LENGTHOF(kSwahiliShortNegative));
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
27790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void CompactDecimalFormatTest::TestArabicLong() {
2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  CheckLocale("ar", UNUM_LONG, kArabicLong, LENGTHOF(kArabicLong));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void CompactDecimalFormatTest::TestSignificantDigits() {
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UErrorCode status = U_ZERO_ERROR;
28490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  LocalPointer<CompactDecimalFormat> cdf(CompactDecimalFormat::createInstance("en", UNUM_SHORT, status));
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (U_FAILURE(status)) {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dataerrln("Unable to create format object - %s", u_errorName(status));
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString actual;
29090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  cdf->format(123456.0, actual);
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We expect 3 significant digits by default
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString expected("123K", -1, US_INV);
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (actual != expected) {
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    errln(UnicodeString("Fail: Expected: ") + expected + UnicodeString(" Got: ") + actual);
29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::CheckLocale(const Locale& locale, UNumberCompactStyle style, const ExpectedResult* expectedResults, int32_t expectedResultLength) {
29990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  UErrorCode status = U_ZERO_ERROR;
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LocalPointer<CompactDecimalFormat> cdf(createCDFInstance(locale, style, status));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (U_FAILURE(status)) {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    dataerrln("Unable to create format object - %s", u_errorName(status));
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char description[256];
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sprintf(description,"%s - %s", locale.getName(), StyleStr(style));
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int32_t i = 0; i < expectedResultLength; i++) {
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CheckExpectedResult(cdf.getAlias(), &expectedResults[i], description);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CompactDecimalFormatTest::CheckExpectedResult(
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult, const char* description) {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString actual;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cdf->format(expectedResult->value, actual);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UnicodeString expected(expectedResult->expected, -1, US_INV);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected = expected.unescape();
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actual != expected) {
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    errln(UnicodeString("Fail: Expected: ") + expected
32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          + UnicodeString(" Got: ") + actual
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          + UnicodeString(" for: ") + UnicodeString(description));
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CompactDecimalFormat*
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CompactDecimalFormatTest::createCDFInstance(const Locale& locale, UNumberCompactStyle style, UErrorCode& status) {
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CompactDecimalFormat* result = CompactDecimalFormat::createInstance(locale, style, status);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (U_FAILURE(status)) {
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // All tests are written for two significant digits, so we explicitly set here
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in case default significant digits change.
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->setMaximumSignificantDigits(2);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
335868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char *CompactDecimalFormatTest::StyleStr(UNumberCompactStyle style) {
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (style == UNUM_SHORT) {
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return kShortStr;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return kLongStr;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)extern IntlTest *createCompactDecimalFormatTest() {
34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return new CompactDecimalFormatTest();
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)