]> git.saurik.com Git - wxWidgets.git/blame - tests/strings/numformatter.cpp
Rewrite wxLogXXX() macros to avoid "ambiguous else" warnings.
[wxWidgets.git] / tests / strings / numformatter.cpp
CommitLineData
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
26class NumFormatterTestCase : public CppUnit::TestCase
27{
28public:
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
47private:
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
80CPPUNIT_TEST_SUITE_REGISTRATION( NumFormatterTestCase );
81
e3778b4d 82// also include in its own registry so that these tests can be run alone
6686fbad
VZ
83CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NumFormatterTestCase, "NumFormatterTestCase" );
84
85// ----------------------------------------------------------------------------
86// tests themselves
87// ----------------------------------------------------------------------------
88
89void 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
115void 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
133void 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
152void 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
199void 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
235void 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
271void 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}