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