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)