]> git.saurik.com Git - apple/icu.git/blame - icuSources/test/intltest/pptest.cpp
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / test / intltest / pptest.cpp
CommitLineData
b75a7d8f
A
1/********************************************************************
2 * COPYRIGHT:
729e4ab9 3 * Copyright (c) 1997-2010, International Business Machines Corporation and
b75a7d8f
A
4 * others. All Rights Reserved.
5 ********************************************************************/
6
7#include "unicode/utypes.h"
8
9#if !UCONFIG_NO_FORMATTING
10
11#include "pptest.h"
12
13#include "unicode/numfmt.h"
14#include "unicode/decimfmt.h"
15
16// *****************************************************************************
17// class ParsePositionTest
18// *****************************************************************************
19
20#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break;
21
22void ParsePositionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
23{
24 // if (exec) logln((UnicodeString)"TestSuite ParsePositionTest");
25 switch (index) {
26 CASE(0, TestParsePosition)
27 CASE(1, TestFieldPosition)
28 CASE(2, TestFieldPosition_example)
29 CASE(3, Test4109023)
30
31 default: name = ""; break;
32 }
33}
34
35UBool
729e4ab9 36ParsePositionTest::failure(UErrorCode status, const char* msg, UBool possibleDataError)
b75a7d8f
A
37{
38 if(U_FAILURE(status)) {
729e4ab9
A
39 if (possibleDataError) {
40 dataerrln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
41 } else {
42 errln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status));
43 }
b75a7d8f
A
44 return TRUE;
45 }
46
47 return FALSE;
48}
49
50void ParsePositionTest::TestParsePosition()
51{
52 ParsePosition pp1(0);
53 if (pp1.getIndex() == 0) {
54 logln("PP constructor() tested.");
55 }else{
56 errln("*** PP getIndex or constructor() result");
57 }
58
59 {
60 int to = 5;
61 ParsePosition pp2( to );
62 if (pp2.getIndex() == 5) {
63 logln("PP getIndex and constructor(int32_t) tested.");
64 }else{
65 errln("*** PP getIndex or constructor(int32_t) result");
66 }
67 pp2.setIndex( 3 );
68 if (pp2.getIndex() == 3) {
69 logln("PP setIndex tested.");
70 }else{
71 errln("*** PP getIndex or setIndex result");
72 }
73 }
74
75 ParsePosition pp2(3), pp3(5);
76 //pp2 = new ParsePosition( 3 );
77 //pp3 = new ParsePosition( 5 );
78 ParsePosition pp4(5);
79 if ( pp2 != pp3) {
80 logln("PP not equals tested.");
81 }else{
82 errln("*** PP not equals fails");
83 }
84 if (pp3 == pp4) {
85 logln("PP equals tested.");
86 }else{
87 errln(UnicodeString("*** PP equals fails (") + pp3.getIndex() + " != " + pp4.getIndex() + ")");
88 }
89
90 ParsePosition pp5;
91 pp5 = pp4;
92 if (pp4 == pp5) {
93 logln("PP operator= tested.");
94 }else{
95 errln("*** PP operator= operator== or operator != result");
96 }
97
374ca955
A
98 ParsePosition *ppp = pp5.clone();
99 if(ppp == &pp5 || *ppp != pp5) {
100 errln("ParsePosition.clone() failed");
101 }
102 delete ppp;
b75a7d8f
A
103}
104
105void ParsePositionTest::TestFieldPosition()
106{
107 FieldPosition fp( 7 );
108
109 if (fp.getField() == 7) {
110 logln("FP constructor(int) and getField tested.");
111 }else{
112 errln("*** FP constructor(int) or getField");
113 }
114
115 FieldPosition fpc(fp);
116 if (fpc.getField() == 7) {
117 logln("FP Constructor(FP&) passed");
118 } else {
119 errln("*** FP Constructor(FP&)");
120 }
121
122 FieldPosition fph( 3 );
123 if ( fph.getField() != 3)
124 errln("*** FP getField or heap constr.");
125
126 UBool err1 = FALSE;
127 UBool err2 = FALSE;
128 UBool err3 = FALSE;
129// for (long i = -50; i < 50; i++ ) {
130// fp.setField( i+8 );
131// fp.setBeginIndex( i+6 );
132// fp.setEndIndex( i+7 );
133// if (fp.getField() != i+8) err1 = TRUE;
134// if (fp.getBeginIndex() != i+6) err2 = TRUE;
135// if (fp.getEndIndex() != i+7) err3 = TRUE;
136// }
137 if (!err1) {
138 logln("FP setField and getField tested.");
139 }else{
140 errln("*** FP setField or getField");
141 }
142 if (!err2) {
143 logln("FP setBeginIndex and getBeginIndex tested.");
144 }else{
145 errln("*** FP setBeginIndex or getBeginIndex");
146 }
147 if (!err3) {
148 logln("FP setEndIndex and getEndIndex tested.");
149 }else{
150 errln("*** FP setEndIndex or getEndIndex");
151 }
152
153 logln("");
374ca955
A
154
155 FieldPosition *pfp = fp.clone();
156 if(pfp == &fp || *pfp != fp) {
157 errln("FieldPosition.clone() failed");
158 }
159 delete pfp;
b75a7d8f
A
160}
161
162void ParsePositionTest::TestFieldPosition_example()
163{
164 //***** no error detection yet !!!!!!!
165 //***** this test is for compiler checks and visual verification only.
166 double doubleNum[] = {
167 123456789.0,
168 -12345678.9,
169 1234567.89,
170 -123456.789,
171 12345.6789,
172 -1234.56789,
173 123.456789,
174 -12.3456789,
175 1.23456789};
176 int dNumSize = 9;
177
178 UErrorCode status = U_ZERO_ERROR;
179 NumberFormat *nf = NumberFormat::createInstance(status);
729e4ab9 180 if (failure(status, "NumberFormat::createInstance", TRUE)){
73c04bcf
A
181 delete nf;
182 return;
183 };
b75a7d8f 184
729e4ab9
A
185 DecimalFormat *fmt = dynamic_cast<DecimalFormat *>(nf);
186 if(fmt == NULL) {
b75a7d8f
A
187 errln("NumberFormat::createInstance returned unexpected class type");
188 return;
189 }
b75a7d8f
A
190 fmt->setDecimalSeparatorAlwaysShown(TRUE);
191
192 const int tempLen = 20;
193 UnicodeString temp;
194
195 for (int i=0; i < dNumSize; i++) {
196 temp.remove();
197 //temp = new StringBuffer(); // Get new buffer
198
199 FieldPosition pos(NumberFormat::INTEGER_FIELD);
200 UnicodeString buf;// = new StringBuffer();
201 //char fmtText[tempLen];
202 //ToCharString(fmt->format(doubleNum[i], buf, pos), fmtText);
203 UnicodeString res;
204 res = fmt->format(doubleNum[i], buf, pos);
205 int tempOffset = (tempLen <= (tempLen - pos.getEndIndex())) ?
206 tempLen : (tempLen - pos.getEndIndex());
207 for (int j=0; j<tempOffset; j++)
208 temp += UnicodeString("="/*'='*/); // initialize
209 logln("FP " + temp + res);
210 }
211
212 logln("");
213 delete nf;
214}
215
216/* @bug 4109023
217 * Need to override ParsePosition.equals and FieldPosition.equals.
218 */
219void ParsePositionTest::Test4109023()
220{
221 ParsePosition p(3);
222 ParsePosition p2(3);
223 if (p != p2)
224 errln("Error : ParsePosition.equals() failed");
225 FieldPosition fp(2);
226 FieldPosition fp2(2);
227 if (fp != fp2)
228 errln("Error : FieldPosition.equals() failed");
229}
230
231#endif /* #if !UCONFIG_NO_FORMATTING */