]>
Commit | Line | Data |
---|---|---|
6686fbad VZ |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // Name: tests/strings/numformat.cpp | |
3 | // Purpose: wxNumberFormatter unit test | |
4 | // Author: Vadim Zeitlin | |
5 | // Created: 2011-01-15 | |
6686fbad VZ |
6 | // Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org> |
7 | /////////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | // ---------------------------------------------------------------------------- | |
10 | // headers | |
11 | // ---------------------------------------------------------------------------- | |
12 | ||
13 | #include "testprec.h" | |
14 | ||
15 | #ifdef __BORLANDC__ | |
16 | #pragma hdrstop | |
17 | #endif | |
18 | ||
19 | #include "wx/numformatter.h" | |
20 | #include "wx/intl.h" | |
21 | ||
22 | // ---------------------------------------------------------------------------- | |
23 | // test class | |
24 | // ---------------------------------------------------------------------------- | |
25 | ||
26 | class NumFormatterTestCase : public CppUnit::TestCase | |
27 | { | |
28 | public: | |
d326d52c VZ |
29 | NumFormatterTestCase() { m_locale = NULL; } |
30 | ||
31 | virtual void setUp() | |
6686fbad VZ |
32 | { |
33 | // We need to use a locale with known decimal point and which uses the | |
34 | // thousands separator for the tests to make sense. | |
a54cf371 VZ |
35 | m_locale = new wxLocale(wxLANGUAGE_ENGLISH_UK, |
36 | wxLOCALE_DONT_LOAD_DEFAULT); | |
37 | if ( !m_locale->IsOk() ) | |
d326d52c | 38 | tearDown(); |
6686fbad VZ |
39 | } |
40 | ||
d326d52c | 41 | virtual void tearDown() |
6686fbad VZ |
42 | { |
43 | delete m_locale; | |
d326d52c | 44 | m_locale = NULL; |
6686fbad VZ |
45 | } |
46 | ||
47 | private: | |
48 | CPPUNIT_TEST_SUITE( NumFormatterTestCase ); | |
49 | CPPUNIT_TEST( LongToString ); | |
f2a5052b VZ |
50 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
51 | CPPUNIT_TEST( LongLongToString ); | |
52 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
6686fbad VZ |
53 | CPPUNIT_TEST( DoubleToString ); |
54 | CPPUNIT_TEST( NoTrailingZeroes ); | |
55 | CPPUNIT_TEST( LongFromString ); | |
f2a5052b VZ |
56 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
57 | CPPUNIT_TEST( LongLongFromString ); | |
58 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
6686fbad VZ |
59 | CPPUNIT_TEST( DoubleFromString ); |
60 | CPPUNIT_TEST_SUITE_END(); | |
61 | ||
62 | void LongToString(); | |
f2a5052b VZ |
63 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
64 | void LongLongToString(); | |
65 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
6686fbad VZ |
66 | void DoubleToString(); |
67 | void NoTrailingZeroes(); | |
68 | void LongFromString(); | |
f2a5052b VZ |
69 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
70 | void LongLongFromString(); | |
71 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
6686fbad VZ |
72 | void DoubleFromString(); |
73 | ||
74 | wxLocale *m_locale; | |
75 | ||
76 | wxDECLARE_NO_COPY_CLASS(NumFormatterTestCase); | |
77 | }; | |
78 | ||
79 | // register in the unnamed registry so that these tests are run by default | |
80 | CPPUNIT_TEST_SUITE_REGISTRATION( NumFormatterTestCase ); | |
81 | ||
e3778b4d | 82 | // also include in its own registry so that these tests can be run alone |
6686fbad VZ |
83 | CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NumFormatterTestCase, "NumFormatterTestCase" ); |
84 | ||
85 | // ---------------------------------------------------------------------------- | |
86 | // tests themselves | |
87 | // ---------------------------------------------------------------------------- | |
88 | ||
89 | void NumFormatterTestCase::LongToString() | |
90 | { | |
91 | if ( !m_locale ) | |
92 | return; | |
93 | ||
f2a5052b | 94 | CPPUNIT_ASSERT_EQUAL( "1", wxNumberFormatter::ToString( 1L)); |
a05cbc20 | 95 | CPPUNIT_ASSERT_EQUAL( "-1", wxNumberFormatter::ToString( -1L)); |
f2a5052b | 96 | CPPUNIT_ASSERT_EQUAL( "12", wxNumberFormatter::ToString( 12L)); |
a05cbc20 | 97 | CPPUNIT_ASSERT_EQUAL( "-12", wxNumberFormatter::ToString( -12L)); |
f2a5052b | 98 | CPPUNIT_ASSERT_EQUAL( "123", wxNumberFormatter::ToString( 123L)); |
a05cbc20 | 99 | CPPUNIT_ASSERT_EQUAL( "-123", wxNumberFormatter::ToString( -123L)); |
f2a5052b | 100 | CPPUNIT_ASSERT_EQUAL( "1,234", wxNumberFormatter::ToString( 1234L)); |
a05cbc20 | 101 | CPPUNIT_ASSERT_EQUAL( "-1,234", wxNumberFormatter::ToString( -1234L)); |
f2a5052b | 102 | CPPUNIT_ASSERT_EQUAL( "12,345", wxNumberFormatter::ToString( 12345L)); |
a05cbc20 | 103 | CPPUNIT_ASSERT_EQUAL( "-12,345", wxNumberFormatter::ToString( -12345L)); |
f2a5052b | 104 | CPPUNIT_ASSERT_EQUAL( "123,456", wxNumberFormatter::ToString( 123456L)); |
a05cbc20 | 105 | CPPUNIT_ASSERT_EQUAL( "-123,456", wxNumberFormatter::ToString( -123456L)); |
f2a5052b | 106 | CPPUNIT_ASSERT_EQUAL( "1,234,567", wxNumberFormatter::ToString( 1234567L)); |
a05cbc20 | 107 | CPPUNIT_ASSERT_EQUAL( "-1,234,567", wxNumberFormatter::ToString( -1234567L)); |
f2a5052b | 108 | CPPUNIT_ASSERT_EQUAL( "12,345,678", wxNumberFormatter::ToString( 12345678L)); |
a05cbc20 | 109 | CPPUNIT_ASSERT_EQUAL("-12,345,678", wxNumberFormatter::ToString( -12345678L)); |
f2a5052b | 110 | CPPUNIT_ASSERT_EQUAL("123,456,789", wxNumberFormatter::ToString( 123456789L)); |
6686fbad VZ |
111 | } |
112 | ||
f2a5052b VZ |
113 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
114 | ||
115 | void NumFormatterTestCase::LongLongToString() | |
116 | { | |
117 | if ( !m_locale ) | |
118 | return; | |
119 | ||
120 | CPPUNIT_ASSERT_EQUAL( "1", wxNumberFormatter::ToString(wxLL( 1))); | |
121 | CPPUNIT_ASSERT_EQUAL( "12", wxNumberFormatter::ToString(wxLL( 12))); | |
122 | CPPUNIT_ASSERT_EQUAL( "123", wxNumberFormatter::ToString(wxLL( 123))); | |
123 | CPPUNIT_ASSERT_EQUAL( "1,234", wxNumberFormatter::ToString(wxLL( 1234))); | |
124 | CPPUNIT_ASSERT_EQUAL( "12,345", wxNumberFormatter::ToString(wxLL( 12345))); | |
125 | CPPUNIT_ASSERT_EQUAL( "123,456", wxNumberFormatter::ToString(wxLL( 123456))); | |
126 | CPPUNIT_ASSERT_EQUAL( "1,234,567", wxNumberFormatter::ToString(wxLL( 1234567))); | |
127 | CPPUNIT_ASSERT_EQUAL( "12,345,678", wxNumberFormatter::ToString(wxLL( 12345678))); | |
128 | CPPUNIT_ASSERT_EQUAL("123,456,789", wxNumberFormatter::ToString(wxLL( 123456789))); | |
129 | } | |
130 | ||
131 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
132 | ||
6686fbad VZ |
133 | void NumFormatterTestCase::DoubleToString() |
134 | { | |
135 | if ( !m_locale ) | |
136 | return; | |
137 | ||
138 | CPPUNIT_ASSERT_EQUAL("1.0", wxNumberFormatter::ToString(1., 1)); | |
139 | CPPUNIT_ASSERT_EQUAL("0.123456", wxNumberFormatter::ToString(0.123456, 6)); | |
140 | CPPUNIT_ASSERT_EQUAL("1.234567", wxNumberFormatter::ToString(1.234567, 6)); | |
141 | CPPUNIT_ASSERT_EQUAL("12.34567", wxNumberFormatter::ToString(12.34567, 5)); | |
142 | CPPUNIT_ASSERT_EQUAL("123.4567", wxNumberFormatter::ToString(123.4567, 4)); | |
143 | CPPUNIT_ASSERT_EQUAL("1,234.56", wxNumberFormatter::ToString(1234.56, 2)); | |
144 | CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1)); | |
145 | CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1)); | |
146 | CPPUNIT_ASSERT_EQUAL("123,456,789.0", | |
147 | wxNumberFormatter::ToString(123456789., 1)); | |
148 | CPPUNIT_ASSERT_EQUAL("123,456,789.012", | |
149 | wxNumberFormatter::ToString(123456789.012, 3)); | |
150 | } | |
151 | ||
152 | void NumFormatterTestCase::NoTrailingZeroes() | |
153 | { | |
154 | WX_ASSERT_FAILS_WITH_ASSERT | |
155 | ( | |
156 | wxNumberFormatter::ToString(123L, wxNumberFormatter::Style_NoTrailingZeroes) | |
157 | ); | |
158 | ||
159 | if ( !m_locale ) | |
160 | return; | |
161 | ||
162 | CPPUNIT_ASSERT_EQUAL | |
163 | ( | |
164 | "123.000", | |
165 | wxNumberFormatter::ToString(123., 3) | |
166 | ); | |
167 | ||
168 | CPPUNIT_ASSERT_EQUAL | |
169 | ( | |
170 | "123", | |
171 | wxNumberFormatter::ToString(123., 3, wxNumberFormatter::Style_NoTrailingZeroes) | |
172 | ); | |
173 | ||
174 | CPPUNIT_ASSERT_EQUAL | |
175 | ( | |
176 | "123", | |
177 | wxNumberFormatter::ToString(123., 9, wxNumberFormatter::Style_NoTrailingZeroes) | |
178 | ); | |
179 | ||
180 | CPPUNIT_ASSERT_EQUAL | |
181 | ( | |
182 | "123.456", | |
183 | wxNumberFormatter::ToString(123.456, 3, wxNumberFormatter::Style_NoTrailingZeroes) | |
184 | ); | |
185 | ||
186 | CPPUNIT_ASSERT_EQUAL | |
187 | ( | |
188 | "123.456000000", | |
189 | wxNumberFormatter::ToString(123.456, 9) | |
190 | ); | |
191 | ||
192 | CPPUNIT_ASSERT_EQUAL | |
193 | ( | |
194 | "123.456", | |
195 | wxNumberFormatter::ToString(123.456, 9, wxNumberFormatter::Style_NoTrailingZeroes) | |
196 | ); | |
197 | } | |
198 | ||
199 | void NumFormatterTestCase::LongFromString() | |
200 | { | |
201 | if ( !m_locale ) | |
202 | return; | |
203 | ||
204 | WX_ASSERT_FAILS_WITH_ASSERT | |
205 | ( | |
206 | wxNumberFormatter::FromString("123", static_cast<long *>(0)) | |
207 | ); | |
208 | ||
209 | long l; | |
210 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l) ); | |
211 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l) ); | |
212 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l) ); | |
213 | ||
214 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l) ); | |
215 | CPPUNIT_ASSERT_EQUAL( 123, l ); | |
216 | ||
217 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l) ); | |
218 | CPPUNIT_ASSERT_EQUAL( 1234, l ); | |
219 | ||
220 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l) ); | |
221 | CPPUNIT_ASSERT_EQUAL( 1234, l ); | |
222 | ||
223 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l) ); | |
224 | CPPUNIT_ASSERT_EQUAL( 12345, l ); | |
225 | ||
226 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l) ); | |
227 | CPPUNIT_ASSERT_EQUAL( 123456, l ); | |
228 | ||
229 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l) ); | |
230 | CPPUNIT_ASSERT_EQUAL( 1234567, l ); | |
231 | } | |
232 | ||
f2a5052b VZ |
233 | #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG |
234 | ||
235 | void NumFormatterTestCase::LongLongFromString() | |
236 | { | |
237 | if ( !m_locale ) | |
238 | return; | |
239 | ||
240 | WX_ASSERT_FAILS_WITH_ASSERT | |
241 | ( | |
242 | wxNumberFormatter::FromString("123", static_cast<wxLongLong_t *>(0)) | |
243 | ); | |
244 | ||
245 | wxLongLong_t l; | |
246 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l) ); | |
247 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l) ); | |
248 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l) ); | |
249 | ||
250 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l) ); | |
251 | CPPUNIT_ASSERT_EQUAL( 123, l ); | |
252 | ||
253 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l) ); | |
254 | CPPUNIT_ASSERT_EQUAL( 1234, l ); | |
255 | ||
256 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l) ); | |
257 | CPPUNIT_ASSERT_EQUAL( 1234, l ); | |
258 | ||
259 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l) ); | |
260 | CPPUNIT_ASSERT_EQUAL( 12345, l ); | |
261 | ||
262 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l) ); | |
263 | CPPUNIT_ASSERT_EQUAL( 123456, l ); | |
264 | ||
265 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l) ); | |
266 | CPPUNIT_ASSERT_EQUAL( 1234567, l ); | |
267 | } | |
268 | ||
269 | #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG | |
270 | ||
6686fbad VZ |
271 | void NumFormatterTestCase::DoubleFromString() |
272 | { | |
273 | if ( !m_locale ) | |
274 | return; | |
275 | ||
276 | WX_ASSERT_FAILS_WITH_ASSERT | |
277 | ( | |
278 | wxNumberFormatter::FromString("123", static_cast<double *>(0)) | |
279 | ); | |
280 | ||
281 | double d; | |
282 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &d) ); | |
283 | CPPUNIT_ASSERT( !wxNumberFormatter::FromString("bar", &d) ); | |
284 | ||
285 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &d) ); | |
286 | CPPUNIT_ASSERT_EQUAL( 123., d ); | |
287 | ||
288 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123.456789012", &d) ); | |
289 | CPPUNIT_ASSERT_EQUAL( 123.456789012, d ); | |
290 | ||
291 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234.56789012", &d) ); | |
292 | CPPUNIT_ASSERT_EQUAL( 1234.56789012, d ); | |
293 | ||
294 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345.6789012", &d) ); | |
295 | CPPUNIT_ASSERT_EQUAL( 12345.6789012, d ); | |
296 | ||
297 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456.789012", &d) ); | |
298 | CPPUNIT_ASSERT_EQUAL( 123456.789012, d ); | |
299 | ||
300 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567.89012", &d) ); | |
301 | CPPUNIT_ASSERT_EQUAL( 1234567.89012, d ); | |
302 | ||
303 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345,678.9012", &d) ); | |
304 | CPPUNIT_ASSERT_EQUAL( 12345678.9012, d ); | |
305 | ||
306 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456,789.012", &d) ); | |
307 | CPPUNIT_ASSERT_EQUAL( 123456789.012, d ); | |
308 | ||
309 | CPPUNIT_ASSERT( wxNumberFormatter::FromString("123456789.012", &d) ); | |
310 | CPPUNIT_ASSERT_EQUAL( 123456789.012, d ); | |
311 | } |