| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        tests/streams/datastreamtest.cpp
 
- // Purpose:     wxDataXXXStream Unit Test
 
- // Author:      Ryan Norton
 
- // Created:     2004-08-14
 
- // Copyright:   (c) 2004 Ryan Norton
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // ----------------------------------------------------------------------------
 
- // headers
 
- // ----------------------------------------------------------------------------
 
- #include "testprec.h"
 
- #ifdef __BORLANDC__
 
-     #pragma hdrstop
 
- #endif
 
- #ifndef WX_PRECOMP
 
-     #include "wx/wx.h"
 
- #endif // WX_PRECOMP
 
- #include <vector>
 
- #include "wx/datstrm.h"
 
- #include "wx/wfstream.h"
 
- #include "wx/math.h"
 
- // ----------------------------------------------------------------------------
 
- // test class
 
- // ----------------------------------------------------------------------------
 
- class DataStreamTestCase : public CppUnit::TestCase
 
- {
 
- public:
 
-     DataStreamTestCase();
 
- private:
 
-     CPPUNIT_TEST_SUITE( DataStreamTestCase );
 
-         CPPUNIT_TEST( FloatRW );
 
-         CPPUNIT_TEST( DoubleRW );
 
- #if wxUSE_LONGLONG
 
-         CPPUNIT_TEST( LongLongRW );
 
- #endif
 
- #if wxHAS_INT64
 
-         CPPUNIT_TEST( Int64RW );
 
- #endif
 
-         CPPUNIT_TEST( NaNRW );
 
-         CPPUNIT_TEST( PseudoTest_UseBigEndian );
 
-         CPPUNIT_TEST( FloatRW );
 
-         CPPUNIT_TEST( DoubleRW );
 
-         // Only test standard IEEE 754 formats if we're using IEEE extended
 
-         // format by default, otherwise the tests above already covered them.
 
- #if wxUSE_APPLE_IEEE
 
-         CPPUNIT_TEST( PseudoTest_UseIEEE754 );
 
-         CPPUNIT_TEST( FloatRW );
 
-         CPPUNIT_TEST( DoubleRW );
 
-         // Also retest little endian version with standard formats.
 
-         CPPUNIT_TEST( PseudoTest_UseLittleEndian );
 
-         CPPUNIT_TEST( FloatRW );
 
-         CPPUNIT_TEST( DoubleRW );
 
- #endif // wxUSE_APPLE_IEEE
 
-     CPPUNIT_TEST_SUITE_END();
 
-     wxFloat64 TestFloatRW(wxFloat64 fValue);
 
-     void FloatRW();
 
-     void DoubleRW();
 
- #if wxUSE_LONGLONG
 
-     void LongLongRW();
 
- #endif
 
- #if wxHAS_INT64
 
-     void Int64RW();
 
- #endif
 
-     void NaNRW();
 
-     void PseudoTest_UseBigEndian() { ms_useBigEndianFormat = true; }
 
-     void PseudoTest_UseLittleEndian() { ms_useBigEndianFormat = false; }
 
- #if wxUSE_APPLE_IEEE
 
-     void PseudoTest_UseIEEE754() { ms_useIEEE754 = true; }
 
- #endif // wxUSE_APPLE_IEEE
 
-     static bool ms_useBigEndianFormat;
 
- #if wxUSE_APPLE_IEEE
 
-     static bool ms_useIEEE754;
 
- #endif // wxUSE_APPLE_IEEE
 
-     DECLARE_NO_COPY_CLASS(DataStreamTestCase)
 
- };
 
- // register in the unnamed registry so that these tests are run by default
 
- CPPUNIT_TEST_SUITE_REGISTRATION( DataStreamTestCase );
 
- // also include in its own registry so that these tests can be run alone
 
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( DataStreamTestCase, "DataStreamTestCase" );
 
- bool DataStreamTestCase::ms_useBigEndianFormat = false;
 
- #if wxUSE_APPLE_IEEE
 
- bool DataStreamTestCase::ms_useIEEE754 = false;
 
- #endif // wxUSE_APPLE_IEEE
 
- DataStreamTestCase::DataStreamTestCase()
 
- {
 
- }
 
- wxFloat64 DataStreamTestCase::TestFloatRW(wxFloat64 fValue)
 
- {
 
-     {
 
-         wxFileOutputStream pFileOutput( wxT("mytext.dat") );
 
-         wxDataOutputStream pDataOutput( pFileOutput );
 
-         if ( ms_useBigEndianFormat )
 
-             pDataOutput.BigEndianOrdered(true);
 
- #if wxUSE_APPLE_IEEE
 
-         if ( ms_useIEEE754 )
 
-             pDataOutput.UseBasicPrecisions();
 
- #endif // wxUSE_APPLE_IEEE
 
-         pDataOutput << fValue;
 
-     }
 
-     wxFileInputStream pFileInput( wxT("mytext.dat") );
 
-     wxDataInputStream pDataInput( pFileInput );
 
-     if ( ms_useBigEndianFormat )
 
-         pDataInput.BigEndianOrdered(true);
 
- #if wxUSE_APPLE_IEEE
 
-     if ( ms_useIEEE754 )
 
-         pDataInput.UseBasicPrecisions();
 
- #endif // wxUSE_APPLE_IEEE
 
-     wxFloat64 fInFloat;
 
-     pDataInput >> fInFloat;
 
-     return fInFloat;
 
- }
 
- template <class T>
 
- class TestMultiRW {
 
- public:
 
-     typedef std::vector<T> ValueArray;
 
-     typedef void (wxDataOutputStream::*FnWriter)(const T *buffer, size_t size);
 
-     typedef void (wxDataInputStream::*FnReader)(T *buffer, size_t size);
 
- private:
 
-     bool m_ok;
 
- private:
 
-     void ProcessData(const T *Values,
 
-                      typename ValueArray::size_type Size,
 
-                      FnWriter pfnWriter,
 
-                      FnReader pfnReader)
 
-     {
 
-         ValueArray InValues(Size);
 
-         {
 
-             wxFileOutputStream FileOutput( wxT("mytext.dat") );
 
-             wxDataOutputStream DataOutput( FileOutput );
 
-             (DataOutput.*pfnWriter)(Values, Size);
 
-         }
 
-         {
 
-             wxFileInputStream FileInput( wxT("mytext.dat") );
 
-             wxDataInputStream DataInput( FileInput );
 
-             (DataInput.*pfnReader)(&*InValues.begin(), InValues.size());
 
-         }
 
-         m_ok = true;
 
-         for (typename ValueArray::size_type idx=0; idx!=Size; ++idx) {
 
-             if (InValues[idx]!=Values[idx]) {
 
-                 m_ok = false;
 
-                 break;
 
-             }
 
-         }
 
-     }
 
- public:
 
-     TestMultiRW(const T *Values,
 
-                 size_t Size,
 
-                 FnWriter pfnWriter,
 
-                 FnReader pfnReader)
 
-     {
 
-         ProcessData(Values, (typename ValueArray::size_type) Size, pfnWriter, pfnReader);
 
-     }
 
-     TestMultiRW(const ValueArray &Values,
 
-                 FnWriter pfnWriter,
 
-                 FnReader pfnReader)
 
-     {
 
-         ProcessData(&*Values.begin(), Values.size(), pfnWriter, pfnReader);
 
-     }
 
-     bool IsOk() const
 
-     {
 
-         return m_ok;
 
-     }
 
- };
 
- template <class T>
 
- static
 
- T TestRW(const T &Value)
 
- {
 
-     T InValue;
 
-     {
 
-         wxFileOutputStream FileOutput( wxT("mytext.dat") );
 
-         wxDataOutputStream DataOutput( FileOutput );
 
-         DataOutput << Value;
 
-     }
 
-     {
 
-         wxFileInputStream FileInput( wxT("mytext.dat") );
 
-         wxDataInputStream DataInput( FileInput );
 
-         DataInput >> InValue;
 
-     }
 
-     return InValue;
 
- }
 
- void DataStreamTestCase::FloatRW()
 
- {
 
-     CPPUNIT_ASSERT( TestFloatRW(5.5) == 5.5 );
 
-     CPPUNIT_ASSERT( TestFloatRW(5) == 5 );
 
-     CPPUNIT_ASSERT( TestFloatRW(5.55) == 5.55 );
 
-     CPPUNIT_ASSERT( TestFloatRW(55555.555555) == 55555.555555 );
 
- }
 
- void DataStreamTestCase::DoubleRW()
 
- {
 
-     CPPUNIT_ASSERT( TestFloatRW(2132131.1232132) == 2132131.1232132 );
 
-     CPPUNIT_ASSERT( TestFloatRW(21321343431.1232143432) == 21321343431.1232143432 );
 
- }
 
- #if wxUSE_LONGLONG
 
- void DataStreamTestCase::LongLongRW()
 
- {
 
-     TestMultiRW<wxLongLong>::ValueArray ValuesLL;
 
-     TestMultiRW<wxULongLong>::ValueArray ValuesULL;
 
-     ValuesLL.push_back(wxLongLong(0l));
 
-     ValuesLL.push_back(wxLongLong(1l));
 
-     ValuesLL.push_back(wxLongLong(-1l));
 
-     ValuesLL.push_back(wxLongLong(0x12345678l));
 
-     ValuesLL.push_back(wxLongLong(0x12345678l, 0xabcdef01l));
 
-     ValuesULL.push_back(wxULongLong(0l));
 
-     ValuesULL.push_back(wxULongLong(1l));
 
-     ValuesULL.push_back(wxULongLong(0x12345678l));
 
-     ValuesULL.push_back(wxULongLong(0x12345678l, 0xabcdef01l));
 
-     CPPUNIT_ASSERT( TestRW(wxLongLong(0x12345678l)) == wxLongLong(0x12345678l) );
 
-     CPPUNIT_ASSERT( TestRW(wxLongLong(0x12345678l, 0xabcdef01l)) == wxLongLong(0x12345678l, 0xabcdef01l) );
 
-     CPPUNIT_ASSERT( TestMultiRW<wxLongLong>(ValuesLL, &wxDataOutputStream::WriteLL, &wxDataInputStream::ReadLL).IsOk() );
 
-     CPPUNIT_ASSERT( TestMultiRW<wxULongLong>(ValuesULL, &wxDataOutputStream::WriteLL, &wxDataInputStream::ReadLL).IsOk() );
 
- }
 
- #endif
 
- #if wxHAS_INT64
 
- void DataStreamTestCase::Int64RW()
 
- {
 
-     TestMultiRW<wxInt64>::ValueArray ValuesI64;
 
-     TestMultiRW<wxUint64>::ValueArray ValuesUI64;
 
-     ValuesI64.push_back(wxInt64(0l));
 
-     ValuesI64.push_back(wxInt64(1l));
 
-     ValuesI64.push_back(wxInt64(-1l));
 
-     ValuesI64.push_back(wxInt64(0x12345678l));
 
-     ValuesI64.push_back((wxInt64(0x12345678l) << 32) + wxInt64(0xabcdef01l));
 
-     ValuesUI64.push_back(wxUint64(0l));
 
-     ValuesUI64.push_back(wxUint64(1l));
 
-     ValuesUI64.push_back(wxUint64(0x12345678l));
 
-     ValuesUI64.push_back((wxUint64(0x12345678l) << 32) + wxUint64(0xabcdef01l));
 
-     CPPUNIT_ASSERT( TestRW(wxUint64(0x12345678l)) == wxUint64(0x12345678l) );
 
-     CPPUNIT_ASSERT( TestRW((wxUint64(0x12345678l) << 32) + wxUint64(0xabcdef01l)) == (wxUint64(0x12345678l) << 32) + wxUint64(0xabcdef01l) );
 
-     CPPUNIT_ASSERT( TestMultiRW<wxInt64>(ValuesI64, &wxDataOutputStream::Write64, &wxDataInputStream::Read64).IsOk() );
 
-     CPPUNIT_ASSERT( TestMultiRW<wxUint64>(ValuesUI64, &wxDataOutputStream::Write64, &wxDataInputStream::Read64).IsOk() );
 
- }
 
- #endif
 
- void DataStreamTestCase::NaNRW()
 
- {
 
-     //TODO?
 
- }
 
 
  |