]> git.saurik.com Git - wxWidgets.git/blob - tests/strings/numformatter.cpp
30784dd12098905fc7113eb6f3a6f1b3ab7de063
[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 CPPUNIT_TEST( DoubleToString );
57 CPPUNIT_TEST( NoTrailingZeroes );
58 CPPUNIT_TEST( LongFromString );
59 CPPUNIT_TEST( DoubleFromString );
60 CPPUNIT_TEST_SUITE_END();
61
62 void LongToString();
63 void DoubleToString();
64 void NoTrailingZeroes();
65 void LongFromString();
66 void DoubleFromString();
67
68 wxLocale *m_locale;
69
70 wxDECLARE_NO_COPY_CLASS(NumFormatterTestCase);
71 };
72
73 // register in the unnamed registry so that these tests are run by default
74 CPPUNIT_TEST_SUITE_REGISTRATION( NumFormatterTestCase );
75
76 // also include in it's own registry so that these tests can be run alone
77 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NumFormatterTestCase, "NumFormatterTestCase" );
78
79 // ----------------------------------------------------------------------------
80 // tests themselves
81 // ----------------------------------------------------------------------------
82
83 void NumFormatterTestCase::LongToString()
84 {
85 if ( !m_locale )
86 return;
87
88 CPPUNIT_ASSERT_EQUAL( "1", wxNumberFormatter::ToString( 1));
89 CPPUNIT_ASSERT_EQUAL( "12", wxNumberFormatter::ToString( 12));
90 CPPUNIT_ASSERT_EQUAL( "123", wxNumberFormatter::ToString( 123));
91 CPPUNIT_ASSERT_EQUAL( "1,234", wxNumberFormatter::ToString( 1234));
92 CPPUNIT_ASSERT_EQUAL( "12,345", wxNumberFormatter::ToString( 12345));
93 CPPUNIT_ASSERT_EQUAL( "123,456", wxNumberFormatter::ToString( 123456));
94 CPPUNIT_ASSERT_EQUAL( "1,234,567", wxNumberFormatter::ToString( 1234567));
95 CPPUNIT_ASSERT_EQUAL( "12,345,678", wxNumberFormatter::ToString( 12345678));
96 CPPUNIT_ASSERT_EQUAL("123,456,789", wxNumberFormatter::ToString( 123456789));
97 }
98
99 void NumFormatterTestCase::DoubleToString()
100 {
101 if ( !m_locale )
102 return;
103
104 CPPUNIT_ASSERT_EQUAL("1.0", wxNumberFormatter::ToString(1., 1));
105 CPPUNIT_ASSERT_EQUAL("0.123456", wxNumberFormatter::ToString(0.123456, 6));
106 CPPUNIT_ASSERT_EQUAL("1.234567", wxNumberFormatter::ToString(1.234567, 6));
107 CPPUNIT_ASSERT_EQUAL("12.34567", wxNumberFormatter::ToString(12.34567, 5));
108 CPPUNIT_ASSERT_EQUAL("123.4567", wxNumberFormatter::ToString(123.4567, 4));
109 CPPUNIT_ASSERT_EQUAL("1,234.56", wxNumberFormatter::ToString(1234.56, 2));
110 CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1));
111 CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1));
112 CPPUNIT_ASSERT_EQUAL("123,456,789.0",
113 wxNumberFormatter::ToString(123456789., 1));
114 CPPUNIT_ASSERT_EQUAL("123,456,789.012",
115 wxNumberFormatter::ToString(123456789.012, 3));
116 }
117
118 void NumFormatterTestCase::NoTrailingZeroes()
119 {
120 WX_ASSERT_FAILS_WITH_ASSERT
121 (
122 wxNumberFormatter::ToString(123L, wxNumberFormatter::Style_NoTrailingZeroes)
123 );
124
125 if ( !m_locale )
126 return;
127
128 CPPUNIT_ASSERT_EQUAL
129 (
130 "123.000",
131 wxNumberFormatter::ToString(123., 3)
132 );
133
134 CPPUNIT_ASSERT_EQUAL
135 (
136 "123",
137 wxNumberFormatter::ToString(123., 3, wxNumberFormatter::Style_NoTrailingZeroes)
138 );
139
140 CPPUNIT_ASSERT_EQUAL
141 (
142 "123",
143 wxNumberFormatter::ToString(123., 9, wxNumberFormatter::Style_NoTrailingZeroes)
144 );
145
146 CPPUNIT_ASSERT_EQUAL
147 (
148 "123.456",
149 wxNumberFormatter::ToString(123.456, 3, wxNumberFormatter::Style_NoTrailingZeroes)
150 );
151
152 CPPUNIT_ASSERT_EQUAL
153 (
154 "123.456000000",
155 wxNumberFormatter::ToString(123.456, 9)
156 );
157
158 CPPUNIT_ASSERT_EQUAL
159 (
160 "123.456",
161 wxNumberFormatter::ToString(123.456, 9, wxNumberFormatter::Style_NoTrailingZeroes)
162 );
163 }
164
165 void NumFormatterTestCase::LongFromString()
166 {
167 if ( !m_locale )
168 return;
169
170 WX_ASSERT_FAILS_WITH_ASSERT
171 (
172 wxNumberFormatter::FromString("123", static_cast<long *>(0))
173 );
174
175 long l;
176 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l) );
177 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l) );
178 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l) );
179
180 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l) );
181 CPPUNIT_ASSERT_EQUAL( 123, l );
182
183 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l) );
184 CPPUNIT_ASSERT_EQUAL( 1234, l );
185
186 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l) );
187 CPPUNIT_ASSERT_EQUAL( 1234, l );
188
189 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l) );
190 CPPUNIT_ASSERT_EQUAL( 12345, l );
191
192 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l) );
193 CPPUNIT_ASSERT_EQUAL( 123456, l );
194
195 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l) );
196 CPPUNIT_ASSERT_EQUAL( 1234567, l );
197 }
198
199 void NumFormatterTestCase::DoubleFromString()
200 {
201 if ( !m_locale )
202 return;
203
204 WX_ASSERT_FAILS_WITH_ASSERT
205 (
206 wxNumberFormatter::FromString("123", static_cast<double *>(0))
207 );
208
209 double d;
210 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &d) );
211 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("bar", &d) );
212
213 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &d) );
214 CPPUNIT_ASSERT_EQUAL( 123., d );
215
216 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123.456789012", &d) );
217 CPPUNIT_ASSERT_EQUAL( 123.456789012, d );
218
219 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234.56789012", &d) );
220 CPPUNIT_ASSERT_EQUAL( 1234.56789012, d );
221
222 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345.6789012", &d) );
223 CPPUNIT_ASSERT_EQUAL( 12345.6789012, d );
224
225 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456.789012", &d) );
226 CPPUNIT_ASSERT_EQUAL( 123456.789012, d );
227
228 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567.89012", &d) );
229 CPPUNIT_ASSERT_EQUAL( 1234567.89012, d );
230
231 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345,678.9012", &d) );
232 CPPUNIT_ASSERT_EQUAL( 12345678.9012, d );
233
234 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456,789.012", &d) );
235 CPPUNIT_ASSERT_EQUAL( 123456789.012, d );
236
237 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123456789.012", &d) );
238 CPPUNIT_ASSERT_EQUAL( 123456789.012, d );
239 }