X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a9e994615409e36d441135e4fa0761cf0398a2aa..1ec4e9c2b72a01a7ba7da569e0f8d04a81aaba10:/tests/longlong/longlongtest.cpp?ds=inline diff --git a/tests/longlong/longlongtest.cpp b/tests/longlong/longlongtest.cpp index 93ef095150..595a86553d 100644 --- a/tests/longlong/longlongtest.cpp +++ b/tests/longlong/longlongtest.cpp @@ -11,7 +11,7 @@ // headers // ---------------------------------------------------------------------------- -#include "wx/wxprec.h" +#include "testprec.h" #ifdef __BORLANDC__ #pragma hdrstop @@ -24,7 +24,7 @@ #include "wx/longlong.h" #include "wx/timer.h" -#include "wx/cppunit.h" +#if wxUSE_LONGLONG // ---------------------------------------------------------------------------- // helpers for testing @@ -68,6 +68,8 @@ private: CPPUNIT_TEST( Division ); CPPUNIT_TEST( BitOperations ); CPPUNIT_TEST( ToString ); + CPPUNIT_TEST( LoHi ); + CPPUNIT_TEST( Limits ); CPPUNIT_TEST_SUITE_END(); void Conversion(); @@ -77,6 +79,8 @@ private: void Division(); void BitOperations(); void ToString(); + void LoHi(); + void Limits(); DECLARE_NO_COPY_CLASS(LongLongTestCase) }; @@ -84,7 +88,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( LongLongTestCase ); -// also include in it's own registry so that these tests can be run alone +// also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( LongLongTestCase, "LongLongTestCase" ); LongLongTestCase::LongLongTestCase() @@ -235,37 +239,37 @@ void LongLongTestCase::Division() void LongLongTestCase::BitOperations() { - for ( size_t n = 0; n < ITEMS; n++ ) + for ( size_t m = 0; m < ITEMS; m++ ) { wxLongLong a = RAND_LL(); for ( size_t n = 0; n < 33; n++ ) { wxLongLong b(a.GetHi(), a.GetLo()), c, d = b, e; - d >>= n; - c = b >> n; + d >>= n; + c = b >> n; CPPUNIT_ASSERT( c == d ); - d <<= n; - e = c << n; + d <<= n; + e = c << n; CPPUNIT_ASSERT( d == e ); #if wxUSE_LONGLONG_WX wxLongLongWx b1(a.GetHi(), a.GetLo()), c1, d1 = b1, e1; - d1 >>= n; - c1 = b1 >> n; + d1 >>= n; + c1 = b1 >> n; CPPUNIT_ASSERT( c1 == d1 ); - d1 <<= n; - e1 = c1 << n; + d1 <<= n; + e1 = c1 << n; CPPUNIT_ASSERT( d1 == e1 ); #endif #if wxUSE_LONGLONG_NATIVE wxLongLongNative b2(a.GetHi(), a.GetLo()), c2, d2 = b2, e2; - d2 >>= n; - c2 = b2 >> n; + d2 >>= n; + c2 = b2 >> n; CPPUNIT_ASSERT( c2 == d2 ); - d2 <<= n; - e2 = c2 << n; + d2 <<= n; + e2 = c2 << n; CPPUNIT_ASSERT( d2 == e2 ); #endif } @@ -279,10 +283,14 @@ void LongLongTestCase::ToString() for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ ) { wxLongLong a = testLongs[n]; - s1 = wxString::Format(_T("%ld"), testLongs[n]); + s1 = wxString::Format(wxT("%ld"), testLongs[n]); s2 = a.ToString(); CPPUNIT_ASSERT( s1 == s2 ); + s2 = wxEmptyString; + s2 << a; + CPPUNIT_ASSERT( s1 == s2 ); + #if wxUSE_LONGLONG_WX wxLongLongWx a1 = testLongs[n]; s2 = a1.ToString(); @@ -297,23 +305,53 @@ void LongLongTestCase::ToString() } wxLongLong a(0x12345678, 0x87654321); - CPPUNIT_ASSERT( a.ToString() == _T("1311768467139281697") ); + CPPUNIT_ASSERT( a.ToString() == wxT("1311768467139281697") ); a.Negate(); - CPPUNIT_ASSERT( a.ToString() == _T("-1311768467139281697") ); + CPPUNIT_ASSERT( a.ToString() == wxT("-1311768467139281697") ); + + wxLongLong llMin(-2147483647L - 1L, 0); + CPPUNIT_ASSERT( llMin.ToString() == wxT("-9223372036854775808") ); #if wxUSE_LONGLONG_WX wxLongLongWx a1(a.GetHi(), a.GetLo()); - CPPUNIT_ASSERT( a1.ToString() == _T("-1311768467139281697") ); + CPPUNIT_ASSERT( a1.ToString() == wxT("-1311768467139281697") ); a1.Negate(); - CPPUNIT_ASSERT( a1.ToString() == _T("1311768467139281697") ); + CPPUNIT_ASSERT( a1.ToString() == wxT("1311768467139281697") ); #endif #if wxUSE_LONGLONG_NATIVE wxLongLongNative a2(a.GetHi(), a.GetLo()); - CPPUNIT_ASSERT( a2.ToString() == _T("-1311768467139281697") ); + CPPUNIT_ASSERT( a2.ToString() == wxT("-1311768467139281697") ); a2.Negate(); - CPPUNIT_ASSERT( a2.ToString() == _T("1311768467139281697") ); + CPPUNIT_ASSERT( a2.ToString() == wxT("1311768467139281697") ); #endif } +void LongLongTestCase::LoHi() +{ + wxLongLong ll(123, 456); + CPPUNIT_ASSERT_EQUAL( 456u, ll.GetLo() ); + CPPUNIT_ASSERT_EQUAL( 123, ll.GetHi() ); + + wxULongLong ull(987, 654); + CPPUNIT_ASSERT_EQUAL( 654u, ull.GetLo() ); + CPPUNIT_ASSERT_EQUAL( 987u, ull.GetHi() ); +} + +void LongLongTestCase::Limits() +{ + // VC6 doesn't specialize numeric_limits<> for __int64 so skip this test + // for it. +#ifndef __VISUALC6__ +#if wxUSE_LONGLONG_NATIVE + CPPUNIT_ASSERT( std::numeric_limits::is_specialized ); + CPPUNIT_ASSERT( std::numeric_limits::is_specialized ); + + wxULongLong maxval = std::numeric_limits::max(); + CPPUNIT_ASSERT( maxval.ToDouble() > 0 ); +#endif // wxUSE_LONGLONG_NATIVE +#endif // !__VISUALC6__ +} + +#endif // wxUSE_LONGLONG