1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/********************************************************************
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT:
4b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1997-2011, International Business Machines Corporation and
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved.
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "intltest.h"
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "tchcfmt.h"
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h"
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/msgfmt.h"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/choicfmt.h"
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <float.h>
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru// tests have obvious memory leaks!
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestChoiceFormat::runIndexedTest(int32_t index, UBool exec,
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                      const char* &name, char* /*par*/) {
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    switch (index) {
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        TESTCASE(0,TestSimpleExample);
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        TESTCASE(1,TestComplexExample);
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        TESTCASE(2,TestClosures);
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        TESTCASE(3,TestPatterns);
2985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        TESTCASE(4,TestChoiceFormatToPatternOverflow);
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        default: name = ""; break;
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic UBool chkstatus( UErrorCode &status, const char* msg = NULL )
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool ok = U_SUCCESS(status);
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!ok) it_errln( msg );
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return ok;
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTestChoiceFormat::TestSimpleExample( void )
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double limits[] = {1,2,3,4,5,6,7};
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString monthNames[] = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* form = new ChoiceFormat(limits, monthNames, 7);
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ParsePosition parse_pos;
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // TODO Fix this ParsePosition stuff...
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString str;
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString res1, res2;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status;
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FieldPosition fpos(0);
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Formattable f;
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t ix;
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //for (double i = 0.0; i <= 8.0; ++i) {
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (ix = 0; ix <= 8; ++ix) {
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        double i = ix; //nos
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        status = U_ZERO_ERROR;
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fpos = 0;
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        str = "";
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res1 = form->format(i, str, fpos, status );
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (!chkstatus( status, "***  test_simple_example format" )) {
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete form;
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            return;
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        //form->parse(res1, f, parse_pos);
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res2 = " ??? ";
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln(UnicodeString("") + ix + UnicodeString(" -> ") + res1 + UnicodeString(" -> ") + res2);
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //Testing ==operator
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double filelimits[] = {0,1,2};
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString filepart[] = {"are no files","is one file","are {2} files"};
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* formnew=new ChoiceFormat(filelimits, filepart, 3);
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* formequal=new ChoiceFormat(limits, monthNames, 7);
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(*formnew == *form){
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("ERROR: ==operator failed\n");
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(!(*form == *formequal)){
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("ERROR: ==operator failed\n");
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete formequal;
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete formnew;
83b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //Testing getLimits()
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t count=0;
86b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const double *gotLimits=form->getLimits(count);
87b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 1  // ICU 4.8 deprecates and disables the ChoiceFormat getters.
88b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(count != 0 || gotLimits != NULL) {
89b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("getLimits() returns something, should be disabled");
90b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
91b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const UnicodeString *gotFormats=form->getFormats(count);
92b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(count != 0 || gotFormats != NULL) {
93b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("getFormats() returns something, should be disabled");
94b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
95b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const UBool *gotClosures=form->getClosures(count);
96b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    if(count != 0 || gotClosures != NULL) {
97b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho        errln("getClosures() returns something, should be disabled");
98b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    }
99b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#else
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(count != 7){
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("getLimits didn't update the count correctly\n");
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(ix=0; ix<count; ix++){
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(gotLimits[ix] != limits[ix]){
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln((UnicodeString)"getLimits didn't get the limits correctly.  Expected " + limits[ix] + " Got " + gotLimits[ix]);
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    //Testing getFormats()
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    count=0;
110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    const UnicodeString *gotFormats=form->getFormats(count);
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(count != 7){
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("getFormats didn't update the count correctly\n");
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(ix=0; ix<count; ix++){
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(gotFormats[ix] != monthNames[ix]){
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln((UnicodeString)"getFormats didn't get the Formats correctly.  Expected " + monthNames[ix] + " Got " + gotFormats[ix]);
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete form;
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid
125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTestChoiceFormat::TestComplexExample( void )
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double filelimits[] = {-1, 0,1,2};
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString filepart[] = {"are corrupted files", "are no files","is one file","are {2} files"};
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* fileform = new ChoiceFormat( filelimits, filepart, 4);
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!fileform) {
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  test_complex_example fileform");
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Format* filenumform = NumberFormat::createInstance( status );
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!filenumform) {
14085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        dataerrln((UnicodeString)"***  test_complex_example filenumform - " + u_errorName(status));
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  test_simple_example filenumform" )) {
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //const Format* testFormats[] = { fileform, NULL, filenumform };
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //pattform->setFormats( testFormats, 3 );
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    MessageFormat* pattform = new MessageFormat("There {0} on {1}", status );
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!pattform) {
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  test_complex_example pattform");
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  test_complex_example pattform" )) {
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    pattform->setFormat( 0, *fileform );
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    pattform->setFormat( 2, *filenumform );
169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Formattable testArgs[] = {(int32_t)0, "Disk_A", (int32_t)0};
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString str;
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString res1, res2;
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    pattform->toPattern( res1 );
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln("MessageFormat toPattern: " + res1);
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fileform->toPattern( res1 );
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln("ChoiceFormat toPattern: " + res1);
17885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (res1 == "-1#are corrupted files|0#are no files|1#is one file|2#are {2} files") {
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("toPattern tested!");
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  ChoiceFormat to Pattern result!");
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FieldPosition fpos(0);
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString checkstr[] = {
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are corrupted files on Disk_A",
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are no files on Disk_A",
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There is one file on Disk_A",
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are 2 files on Disk_A",
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are 3 files on Disk_A"
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // if (status != U_ZERO_ERROR) return; // TODO: analyze why we have such a bad bail out here!
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status)) {
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i;
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t start = -1;
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (i = start; i < 4; ++i) {
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        str = "";
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        status = U_ZERO_ERROR;
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        testArgs[0] = Formattable((int32_t)i);
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        testArgs[2] = testArgs[0];
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res2 = pattform->format(testArgs, 3, str, fpos, status );
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (!chkstatus( status, "***  test_complex_example format" )) {
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete fileform;
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete filenumform;
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete pattform;
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            return;
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln(i + UnicodeString(" -> ") + res2);
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (res2 != checkstr[i - start]) {
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  test_complex_example res string");
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln(UnicodeString("*** ") + i + UnicodeString(" -> '") + res2 + UnicodeString("' unlike '") + checkstr[i] + UnicodeString("' ! "));
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln();
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln("------ additional testing in complex test ------");
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln();
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    //
229b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 0  // ICU 4.8 deprecates and disables the ChoiceFormat getters.
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t retCount;
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double* retLimits = fileform->getLimits( retCount );
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if ((retCount == 4) && (retLimits)
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retLimits[0] == -1.0)
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retLimits[1] == 0.0)
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retLimits[2] == 1.0)
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retLimits[3] == 2.0)) {
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("getLimits tested!");
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  getLimits unexpected result!");
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString* retFormats = fileform->getFormats( retCount );
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if ((retCount == 4) && (retFormats)
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retFormats[0] == "are corrupted files")
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retFormats[1] == "are no files")
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retFormats[2] == "is one file")
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    && (retFormats[3] == "are {2} files")) {
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("getFormats tested!");
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  getFormats unexpected result!");
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
252b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString checkstr2[] = {
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There is no folder on Disk_A",
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There is one folder on Disk_A",
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are many folders on Disk_A",
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        "There are many folders on Disk_A"
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fileform->applyPattern("0#is no folder|1#is one folder|2#are many folders", status );
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (status == U_ZERO_ERROR)
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("status applyPattern OK!");
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  test_complex_example pattform" )) {
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    pattform->setFormat( 0, *fileform );
271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (i = 0; i < 4; ++i) {
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        str = "";
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        status = U_ZERO_ERROR;
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        testArgs[0] = Formattable((int32_t)i);
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        testArgs[2] = testArgs[0];
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res2 = pattform->format(testArgs, 3, str, fpos, status );
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (!chkstatus( status, "***  test_complex_example format 2" )) {
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete fileform;
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete filenumform;
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            delete pattform;
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            return;
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln(UnicodeString() + i + UnicodeString(" -> ") + res2);
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (res2 != checkstr2[i]) {
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  test_complex_example res string");
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln(UnicodeString("*** ") + i + UnicodeString(" -> '") + res2 + UnicodeString("' unlike '") + checkstr2[i] + UnicodeString("' ! "));
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double limits_A[] = {1,2,3,4,5,6,7};
292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString monthNames_A[] = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* form_A = new ChoiceFormat(limits_A, monthNames_A, 7);
294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* form_A2 = new ChoiceFormat(limits_A, monthNames_A, 7);
295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double limits_B[] = {1,2,3,4,5,6,7};
296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UnicodeString monthNames_B[] = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat_BBB"};
297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* form_B = new ChoiceFormat(limits_B, monthNames_B, 7);
298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!form_A || !form_B || !form_A2) {
299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  test-choiceFormat not allocatable!");
300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (*form_A == *form_A2) {
302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_logln("operator== tested.");
303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }else{
304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  operator==");
305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (*form_A != *form_B) {
308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_logln("operator!= tested.");
309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }else{
310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  operator!=");
311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ChoiceFormat* form_A3 = (ChoiceFormat*) form_A->clone();
314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (!form_A3) {
315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  ChoiceFormat->clone is nil.");
316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }else{
317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if ((*form_A3 == *form_A) && (*form_A3 != *form_B)) {
318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                it_logln("method clone tested.");
319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }else{
320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                it_errln("***  ChoiceFormat clone or operator==, or operator!= .");
321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ChoiceFormat form_Assigned( *form_A );
325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        UBool ok = (form_Assigned == *form_A) && (form_Assigned != *form_B);
326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        form_Assigned = *form_B;
327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ok = ok && (form_Assigned != *form_A) && (form_Assigned == *form_B);
328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (ok) {
329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_logln("copy constructor and operator= tested.");
330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }else{
331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            it_errln("***  copy constructor or operator= or operator == or operator != .");
332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete form_A3;
334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete form_A; delete form_A2; delete form_B;
338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testPattern = "0#none|1#one|2#many";
340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat form_pat( testPattern, status );
341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  ChoiceFormat contructor( newPattern, status)" )) {
342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    form_pat.toPattern( res1 );
34985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (res1 == "0#none|1#one|2#many") {
350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("ChoiceFormat contructor( newPattern, status) tested");
351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  ChoiceFormat contructor( newPattern, status) or toPattern result!");
353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double d_a2[] = { 3.0, 4.0 };
356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString s_a2[] = { "third", "forth" };
357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    form_pat.setChoices( d_a2, s_a2, 2 );
359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    form_pat.toPattern( res1 );
360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat adoptChoices toPattern: ") + res1);
36185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (res1 == "3#third|4#forth") {
362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("ChoiceFormat adoptChoices tested");
363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("***  ChoiceFormat adoptChoices result!");
365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str = "";
368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double arg_double = 3.0;
371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res1 = form_pat.format( arg_double, str, fpos );
372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat format:") + res1);
373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (res1 != "third") it_errln("***  ChoiceFormat format (double, ...) result!");
374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str = "";
376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int64_t arg_64 = 3;
379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res1 = form_pat.format( arg_64, str, fpos );
380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat format:") + res1);
381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (res1 != "third") it_errln("***  ChoiceFormat format (int64_t, ...) result!");
382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str = "";
384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t arg_long = 3;
387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res1 = form_pat.format( arg_long, str, fpos );
388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat format:") + res1);
389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (res1 != "third") it_errln("***  ChoiceFormat format (int32_t, ...) result!");
390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Formattable ft( (int32_t)3 );
392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str = "";
393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res1 = form_pat.format( ft, str, fpos, status );
396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  test_complex_example format (int32_t, ...)" )) {
397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat format:") + res1);
403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (res1 != "third") it_errln("***  ChoiceFormat format (Formattable, ...) result!");
404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Formattable fta[] = { (int32_t)3 };
406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str = "";
407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fpos = 0;
408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res1 = form_pat.format( fta, 1, str, fpos, status );
410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!chkstatus( status, "***  test_complex_example format (int32_t, ...)" )) {
411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete fileform;
412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete filenumform;
413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        delete pattform;
414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln(UnicodeString("ChoiceFormat format:") + res1);
417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (res1 != "third") it_errln("***  ChoiceFormat format (Formattable[], cnt, ...) result!");
418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ParsePosition parse_pos = 0;
420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    Formattable result;
421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString parsetext("third");
422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    form_pat.parse( parsetext, result, parse_pos );
423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double rd = (result.getType() == Formattable::kLong) ? result.getLong() : result.getDouble();
424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (rd == 3.0) {
425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("parse( ..., ParsePos ) tested.");
426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("*** ChoiceFormat parse( ..., ParsePos )!");
428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
430ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    form_pat.parse( parsetext, result, status );
431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    rd = (result.getType() == Formattable::kLong) ? result.getLong() : result.getDouble();
432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (rd == 3.0) {
433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_logln("parse( ..., UErrorCode ) tested.");
434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("*** ChoiceFormat parse( ..., UErrorCode )!");
436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /*
439ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UClassID classID = ChoiceFormat::getStaticClassID();
440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (classID == form_pat.getDynamicClassID()) {
441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_out << "getStaticClassID and getDynamicClassID tested." << endl;
442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }else{
443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        it_errln("*** getStaticClassID and getDynamicClassID!");
444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    */
446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
447ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    it_logln();
448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete fileform;
450ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete filenumform;
451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    delete pattform;
452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test new closure API
457ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestChoiceFormat::TestClosures(void) {
459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Construct open, half-open, half-open (the other way), and closed
460ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // intervals.  Do this both using arrays and using a pattern.
461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 'fmt1' is created using arrays
463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool T = TRUE, F = FALSE;
464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 0:   ,1)
465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 1: [1,2]
466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 2: (2,3]
467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 3: (3,4)
468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 4: [4,5)
469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 5: [5,
470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double limits[]  = { 0, 1, 2, 3, 4, 5 };
471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool closures[] = { F, F, T, T, F, F };
472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString fmts[] = {
473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ",1)", "[1,2]", "(2,3]", "(3,4)", "[4,5)", "[5,"
474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat fmt1(limits, closures, fmts, 6);
476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // 'fmt2' is created using a pattern; it should be equivalent
478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
47985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    const char* PAT = "0#,1)|1#[1,2]|2<(2,3]|3<(3,4)|4#[4,5)|5#[5,";
480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat fmt2(PAT, status);
481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(status)) {
482ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("FAIL: ChoiceFormat constructor failed");
483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Check the patterns
487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString str;
488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fmt1.toPattern(str);
489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (str == PAT) {
490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        logln("Ok: " + str);
491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("FAIL: " + str + ", expected " + PAT);
493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str.truncate(0);
495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Check equality
497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (fmt1 != fmt2) {
498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("FAIL: fmt1 != fmt2");
499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
501b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 0  // ICU 4.8 deprecates and disables the ChoiceFormat getters.
502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i;
503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t count2 = 0;
504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const double *limits2 = fmt2.getLimits(count2);
505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UBool *closures2 = fmt2.getClosures(count2);
506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if((count2 != 6) || !limits2 || !closures2) {
508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln("FAIL: couldn't get limits or closures");
509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for(i=0;i<count2;i++) {
511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          logln("#%d/%d: limit %g closed %s\n",
512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                i, count2,
513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                limits2[i],
514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                closures2[i] ?"T":"F");
515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          if(limits2[i] != limits[i]) {
516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("FAIL: limit #%d = %g, should be %g\n", i, limits2[i], limits[i]);
517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          }
518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          if((closures2[i]!=0) != (closures[i]!=0)) {
519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln("FAIL: closure #%d = %s, should be %s\n", i, closures2[i]?"T":"F", closures[i]?"T":"F");
520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          }
521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
523b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Now test both format objects
526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString exp[] = {
527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /*-0.5 => */ ",1)",
528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 0.0 => */ ",1)",
529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 0.5 => */ ",1)",
530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 1.0 => */ "[1,2]",
531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 1.5 => */ "[1,2]",
532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 2.0 => */ "[1,2]",
533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 2.5 => */ "(2,3]",
534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 3.0 => */ "(2,3]",
535ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 3.5 => */ "(3,4)",
536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 4.0 => */ "[4,5)",
537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 4.5 => */ "[4,5)",
538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 5.0 => */ "[5,",
539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* 5.5 => */ "[5,"
540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Each format object should behave exactly the same
543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat* FMT[] = { &fmt1, &fmt2 };
544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (int32_t pass=0; pass<2; ++pass) {
545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int32_t j=0;
546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for (int32_t ix=-5; ix<=55; ix+=5) {
547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            double x = ix / 10.0; // -0.5 to 5.5 step +0.5
548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            FMT[pass]->format(x, str);
549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if (str == exp[j]) {
550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                logln((UnicodeString)"Ok: " + x + " => " + str);
551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            } else {
552ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                errln((UnicodeString)"FAIL: " + x + " => " + str +
553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                      ", expected " + exp[j]);
554ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
555ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            str.truncate(0);
556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            ++j;
557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
558ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
561ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
562ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Helper for TestPatterns()
563ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestChoiceFormat::_testPattern(const char* pattern,
565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                    UBool isValid,
566ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                    double v1, const char* str1,
567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                    double v2, const char* str2,
568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                                    double v3, const char* str3) {
569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode ec = U_ZERO_ERROR;
570ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChoiceFormat fmt(pattern, ec);
571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (!isValid) {
572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (U_FAILURE(ec)) {
573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + pattern + " failed");
574ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        } else {
575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            logln((UnicodeString)"FAIL: " + pattern + " accepted");
576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
578ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(ec)) {
580ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errln((UnicodeString)"FAIL: ChoiceFormat(" + pattern + ") failed");
581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
582ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        logln((UnicodeString)"Ok: Pattern: " + pattern);
584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
585ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UnicodeString out;
586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    logln((UnicodeString)"  toPattern: " + fmt.toPattern(out));
587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    double v[] = {v1, v2, v3};
589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* str[] = {str1, str2, str3};
590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (int32_t i=0; i<3; ++i) {
591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        out.truncate(0);
592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fmt.format(v[i], out);
593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if (out == str[i]) {
594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            logln((UnicodeString)"Ok: " + v[i] + " => " + out);
595ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        } else {
596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            errln((UnicodeString)"FAIL: " + v[i] + " => " + out +
597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                  ", expected " + str[i]);
598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
603ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test applyPattern
604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestChoiceFormat::TestPatterns(void) {
606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Try a pattern that isolates a single value.  Create
607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // three ranges: [-Inf,1.0) [1.0,1.0] (1.0,+Inf]
608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    _testPattern("0.0#a|1.0#b|1.0<c", TRUE,
609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 1.0 - 1e-9, "a",
610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 1.0, "b",
611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 1.0 + 1e-9, "c");
612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
613b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if 0  // ICU 4.8 only checks the pattern syntax, not whether the ranges make sense.
614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Try an invalid pattern that isolates a single value.
615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // [-Inf,1.0) [1.0,1.0) [1.0,+Inf]
616ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    _testPattern("0.0#a|1.0#b|1.0#c", FALSE,
617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 0, 0, 0, 0, 0, 0);
618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Another
620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // [-Inf,1.0] (1.0,1.0) [1.0,+Inf]
621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    _testPattern("0.0#a|1.0<b|1.0#c", FALSE,
622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 0, 0, 0, 0, 0, 0);
623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Another
624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // [-Inf,1.0] (1.0,1.0] (1.0,+Inf]
625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    _testPattern("0.0#a|1.0<b|1.0<c", FALSE,
626ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 0, 0, 0, 0, 0, 0);
627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
628ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // Try a grossly invalid pattern.
629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    // [-Inf,2.0) [2.0,1.0) [1.0,+Inf]
630ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    _testPattern("0.0#a|2.0#b|1.0#c", FALSE,
631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                 0, 0, 0, 0, 0, 0);
632b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#endif
633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
63585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Hovoid TestChoiceFormat::TestChoiceFormatToPatternOverflow()
63685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho{
63785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    static const double limits[] = {0.1e-78, 1e13, 0.1e78};
63885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString monthNames[] = { "one", "two", "three" };
63985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    ChoiceFormat fmt(limits, monthNames, sizeof(limits)/sizeof(limits[0]));
64085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    UnicodeString patStr, expectedPattern1("1e-79#one|10000000000000#two|1e+77#three"),
64185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        expectedPattern2("1e-079#one|10000000000000#two|1e+077#three");
64285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    fmt.toPattern(patStr);
64385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    if (patStr != expectedPattern1 && patStr != expectedPattern2) {
64485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        errln("ChoiceFormat returned \"" + patStr + "\" instead of \"" + expectedPattern1 + " or " + expectedPattern2 + "\"");
64585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho    }
64685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho}
64785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho
648ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
649