1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/********************************************************************
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * COPYRIGHT:
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Copyright (c) 1997-2009, International Business Machines Corporation and
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * others. All Rights Reserved.
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ********************************************************************/
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/utypes.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !UCONFIG_NO_FORMATTING
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/dcfmtsym.h"
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/decimfmt.h"
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/unum.h"
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "tsdcfmsy.h"
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid IntlTestDecimalFormatSymbols::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if (exec) logln("TestSuite DecimalFormatSymbols");
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    switch (index) {
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        case 0: name = "DecimalFormatSymbols test";
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                if (exec) {
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                    logln("DecimalFormatSymbols test---"); logln("");
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                    testSymbols(/*par*/);
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                }
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                break;
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        default: name = ""; break;
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/**
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Test the API of DecimalFormatSymbols; primarily a simple get/set set.
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid IntlTestDecimalFormatSymbols::testSymbols(/* char *par */)
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UErrorCode status = U_ZERO_ERROR;
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormatSymbols fr(Locale::getFrench(), status);
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(U_FAILURE(status)) {
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errcheckln(status, "ERROR: Couldn't create French DecimalFormatSymbols - %s", u_errorName(status));
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        return;
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    status = U_ZERO_ERROR;
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormatSymbols en(Locale::getEnglish(), status);
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(U_FAILURE(status)) {
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errcheckln(status, "ERROR: Couldn't create English DecimalFormatSymbols - %s", u_errorName(status));
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        return;
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(en == fr || ! (en != fr) ) {
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: English DecimalFormatSymbols equal to French");
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // just do some VERY basic tests to make sure that get/set work
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString zero = en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol);
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero);
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol)) {
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set ZeroDigit failed");
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString group = en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, group);
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)) {
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set GroupingSeparator failed");
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString decimal = en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol);
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, decimal);
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol)) {
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set DecimalSeparator failed");
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString perMill = en.getSymbol(DecimalFormatSymbols::kPerMillSymbol);
76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kPerMillSymbol, perMill);
77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kPerMillSymbol) != en.getSymbol(DecimalFormatSymbols::kPerMillSymbol)) {
78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set PerMill failed");
79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString percent = en.getSymbol(DecimalFormatSymbols::kPercentSymbol);
82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kPercentSymbol, percent);
83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kPercentSymbol) != en.getSymbol(DecimalFormatSymbols::kPercentSymbol)) {
84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set Percent failed");
85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString digit(en.getSymbol(DecimalFormatSymbols::kDigitSymbol));
88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kDigitSymbol, digit);
89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kDigitSymbol)) {
90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set Percent failed");
91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString patternSeparator = en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol);
94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, patternSeparator);
95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol)) {
96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set PatternSeparator failed");
97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString infinity(en.getSymbol(DecimalFormatSymbols::kInfinitySymbol));
100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kInfinitySymbol, infinity);
101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString infinity2(fr.getSymbol(DecimalFormatSymbols::kInfinitySymbol));
102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(infinity != infinity2) {
103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set Infinity failed");
104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString nan(en.getSymbol(DecimalFormatSymbols::kNaNSymbol));
107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kNaNSymbol, nan);
108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString nan2(fr.getSymbol(DecimalFormatSymbols::kNaNSymbol));
109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(nan != nan2) {
110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set NaN failed");
111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString minusSign = en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol);
114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, minusSign);
115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kMinusSignSymbol) != en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol)) {
116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set MinusSign failed");
117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString exponential(en.getSymbol(DecimalFormatSymbols::kExponentialSymbol));
120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    fr.setSymbol(DecimalFormatSymbols::kExponentialSymbol, exponential);
121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(fr.getSymbol(DecimalFormatSymbols::kExponentialSymbol) != en.getSymbol(DecimalFormatSymbols::kExponentialSymbol)) {
122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: get/set Exponential failed");
123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Test get currency spacing before the currency.
126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    status = U_ZERO_ERROR;
127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    for (int32_t i = 0; i < (int32_t)DecimalFormatSymbols::kCurrencySpacingCount; i++) {
128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing(
129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott             (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status);
130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if(U_FAILURE(status)) {
131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("Error: cannot get CurrencyMatch for locale:en");
132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            status = U_ZERO_ERROR;
133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing(
135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott             (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status);
136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if(U_FAILURE(status)) {
137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("Error: cannot get CurrencyMatch for locale:fr");
138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if (enCurrencyPattern != frCurrencyPattern) {
140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott           errln("ERROR: get CurrencySpacing failed");
141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Test get currencySpacing after the currency.
144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    status = U_ZERO_ERROR;
145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    for (int32_t i = 0; i < DecimalFormatSymbols::kCurrencySpacingCount; i++) {
146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing(
147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status);
148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if(U_FAILURE(status)) {
149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("Error: cannot get CurrencyMatch for locale:en");
150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            status = U_ZERO_ERROR;
151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing(
153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott             (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status);
154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if(U_FAILURE(status)) {
155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("Error: cannot get CurrencyMatch for locale:fr");
156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if (enCurrencyPattern != frCurrencyPattern) {
158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("ERROR: get CurrencySpacing failed");
159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // Test set curerncySpacing APIs
162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    status = U_ZERO_ERROR;
163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString dash = UnicodeString("-");
164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    en.setPatternForCurrencySpacing(DecimalFormatSymbols::kInsert, TRUE, dash);
165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString enCurrencyInsert = en.getPatternForCurrencySpacing(
166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        DecimalFormatSymbols::kInsert, TRUE, status);
167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if (dash != enCurrencyInsert) {
168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("Error: Failed to setCurrencyInsert for locale:en");
169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    status = U_ZERO_ERROR;
172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormatSymbols foo(status);
173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormatSymbols bar(foo);
175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    en = fr;
177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(en != fr || foo != bar) {
179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: Copy Constructor or Assignment failed");
180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    // test get/setSymbol()
183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if((int) UNUM_FORMAT_SYMBOL_COUNT != (int) DecimalFormatSymbols::kFormatSymbolCount) {
184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("unum.h and decimfmt.h have inconsistent numbers of format symbols!");
185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        return;
186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    int i;
189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) {
190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        foo.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i, UnicodeString((UChar32)(0x10330 + i)));
191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) {
193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        if(foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) != UnicodeString((UChar32)(0x10330 + i))) {
194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            errln("get/setSymbol did not roundtrip, got " +
195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                  foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) +
196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                  ", expected " +
197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                  UnicodeString((UChar32)(0x10330 + i)));
198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        }
199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormatSymbols sym(Locale::getUS(), status);
202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString customDecSeperator("S");
204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34.50");
205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    sym.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)0, customDecSeperator);
206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34S50");
207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    sym.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)3, (UnicodeString)"P");
208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    Verify(34.5, (UnicodeString)"00 %", sym, (UnicodeString)"3450 P");
209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    sym.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)8, (UnicodeString)"D");
210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    Verify(34.5, CharsToUnicodeString("\\u00a4##.##"), sym, (UnicodeString)"D34.5");
211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    sym.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)1, (UnicodeString)"|");
212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    Verify(3456.5, (UnicodeString)"0,000.##", sym, (UnicodeString)"3|456S5");
213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid IntlTestDecimalFormatSymbols::Verify(double value, const UnicodeString& pattern, DecimalFormatSymbols sym, const UnicodeString& expected){
217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UErrorCode status = U_ZERO_ERROR;
218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    DecimalFormat *df = new DecimalFormat(pattern, sym, status);
219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(U_FAILURE(status)){
220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln("ERROR: construction of decimal format failed");
221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    UnicodeString buffer;
223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    FieldPosition pos(FieldPosition::DONT_CARE);
224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    buffer = df->format(value, buffer, pos);
225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    if(buffer != expected){
226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        errln((UnicodeString)"ERROR: format failed after setSymbols()\n Expected " +
227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            expected + ", Got " + buffer);
228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    }
229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    delete df;
230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif /* #if !UCONFIG_NO_FORMATTING */
233