1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/strings/numformat.cpp
3 // Purpose: wxNumberFormatter unit test
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
8 ///////////////////////////////////////////////////////////////////////////////
10 // ----------------------------------------------------------------------------
12 // ----------------------------------------------------------------------------
20 #include "wx/numformatter.h"
23 // ----------------------------------------------------------------------------
25 // ----------------------------------------------------------------------------
27 class NumFormatterTestCase
: public CppUnit::TestCase
30 NumFormatterTestCase()
32 // We need to use a locale with known decimal point and which uses the
33 // thousands separator for the tests to make sense.
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
;
45 m_locale
= new wxLocale(lang
, wxLOCALE_DONT_LOAD_DEFAULT
);
48 virtual ~NumFormatterTestCase()
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();
63 void DoubleToString();
64 void NoTrailingZeroes();
65 void LongFromString();
66 void DoubleFromString();
70 wxDECLARE_NO_COPY_CLASS(NumFormatterTestCase
);
73 // register in the unnamed registry so that these tests are run by default
74 CPPUNIT_TEST_SUITE_REGISTRATION( NumFormatterTestCase
);
76 // also include in it's own registry so that these tests can be run alone
77 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NumFormatterTestCase
, "NumFormatterTestCase" );
79 // ----------------------------------------------------------------------------
81 // ----------------------------------------------------------------------------
83 void NumFormatterTestCase::LongToString()
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));
99 void NumFormatterTestCase::DoubleToString()
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));
118 void NumFormatterTestCase::NoTrailingZeroes()
120 WX_ASSERT_FAILS_WITH_ASSERT
122 wxNumberFormatter::ToString(123L, wxNumberFormatter::Style_NoTrailingZeroes
)
131 wxNumberFormatter::ToString(123., 3)
137 wxNumberFormatter::ToString(123., 3, wxNumberFormatter::Style_NoTrailingZeroes
)
143 wxNumberFormatter::ToString(123., 9, wxNumberFormatter::Style_NoTrailingZeroes
)
149 wxNumberFormatter::ToString(123.456, 3, wxNumberFormatter::Style_NoTrailingZeroes
)
155 wxNumberFormatter::ToString(123.456, 9)
161 wxNumberFormatter::ToString(123.456, 9, wxNumberFormatter::Style_NoTrailingZeroes
)
165 void NumFormatterTestCase::LongFromString()
170 WX_ASSERT_FAILS_WITH_ASSERT
172 wxNumberFormatter::FromString("123", static_cast<long *>(0))
176 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l
) );
177 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l
) );
178 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l
) );
180 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l
) );
181 CPPUNIT_ASSERT_EQUAL( 123, l
);
183 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l
) );
184 CPPUNIT_ASSERT_EQUAL( 1234, l
);
186 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l
) );
187 CPPUNIT_ASSERT_EQUAL( 1234, l
);
189 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l
) );
190 CPPUNIT_ASSERT_EQUAL( 12345, l
);
192 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l
) );
193 CPPUNIT_ASSERT_EQUAL( 123456, l
);
195 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l
) );
196 CPPUNIT_ASSERT_EQUAL( 1234567, l
);
199 void NumFormatterTestCase::DoubleFromString()
204 WX_ASSERT_FAILS_WITH_ASSERT
206 wxNumberFormatter::FromString("123", static_cast<double *>(0))
210 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &d
) );
211 CPPUNIT_ASSERT( !wxNumberFormatter::FromString("bar", &d
) );
213 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &d
) );
214 CPPUNIT_ASSERT_EQUAL( 123., d
);
216 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123.456789012", &d
) );
217 CPPUNIT_ASSERT_EQUAL( 123.456789012, d
);
219 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234.56789012", &d
) );
220 CPPUNIT_ASSERT_EQUAL( 1234.56789012, d
);
222 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345.6789012", &d
) );
223 CPPUNIT_ASSERT_EQUAL( 12345.6789012, d
);
225 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456.789012", &d
) );
226 CPPUNIT_ASSERT_EQUAL( 123456.789012, d
);
228 CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567.89012", &d
) );
229 CPPUNIT_ASSERT_EQUAL( 1234567.89012, d
);
231 CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345,678.9012", &d
) );
232 CPPUNIT_ASSERT_EQUAL( 12345678.9012, d
);
234 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456,789.012", &d
) );
235 CPPUNIT_ASSERT_EQUAL( 123456789.012, d
);
237 CPPUNIT_ASSERT( wxNumberFormatter::FromString("123456789.012", &d
) );
238 CPPUNIT_ASSERT_EQUAL( 123456789.012, d
);