]>
git.saurik.com Git - wxWidgets.git/blob - tests/streams/datastreamtest.cpp
955d403903f71534b467ad3567324d0ebb802388
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/streams/datastreamtest.cpp
3 // Purpose: wxDataXXXStream Unit Test
7 // Copyright: (c) 2004 Ryan Norton
8 ///////////////////////////////////////////////////////////////////////////////
10 // ----------------------------------------------------------------------------
12 // ----------------------------------------------------------------------------
26 #include "wx/datstrm.h"
27 #include "wx/wfstream.h"
30 // ----------------------------------------------------------------------------
32 // ----------------------------------------------------------------------------
34 class DataStreamTestCase
: public CppUnit::TestCase
40 CPPUNIT_TEST_SUITE( DataStreamTestCase
);
41 CPPUNIT_TEST( FloatRW
);
42 CPPUNIT_TEST( DoubleRW
);
44 CPPUNIT_TEST( LongLongRW
);
47 CPPUNIT_TEST( Int64RW
);
49 CPPUNIT_TEST( NaNRW
);
50 CPPUNIT_TEST_SUITE_END();
62 DECLARE_NO_COPY_CLASS(DataStreamTestCase
)
65 // register in the unnamed registry so that these tests are run by default
66 CPPUNIT_TEST_SUITE_REGISTRATION( DataStreamTestCase
);
68 // also include in its own registry so that these tests can be run alone
69 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( DataStreamTestCase
, "DataStreamTestCase" );
71 DataStreamTestCase::DataStreamTestCase()
76 wxFloat64
TestFloatRW(wxFloat64 fValue
)
79 wxFileOutputStream
pFileOutput( wxT("mytext.dat") );
80 wxDataOutputStream
pDataOutput( pFileOutput
);
82 pDataOutput
<< fValue
;
85 wxFileInputStream
pFileInput( wxT("mytext.dat") );
86 wxDataInputStream
pDataInput( pFileInput
);
90 pDataInput
>> fInFloat
;
98 typedef std::vector
<T
> ValueArray
;
99 typedef void (wxDataOutputStream::*FnWriter
)(const T
*buffer
, size_t size
);
100 typedef void (wxDataInputStream::*FnReader
)(T
*buffer
, size_t size
);
106 void ProcessData(const T
*Values
,
107 typename
ValueArray::size_type Size
,
111 ValueArray
InValues(Size
);
114 wxFileOutputStream
FileOutput( wxT("mytext.dat") );
115 wxDataOutputStream
DataOutput( FileOutput
);
117 (DataOutput
.*pfnWriter
)(Values
, Size
);
121 wxFileInputStream
FileInput( wxT("mytext.dat") );
122 wxDataInputStream
DataInput( FileInput
);
124 (DataInput
.*pfnReader
)(&*InValues
.begin(), InValues
.size());
128 for (typename
ValueArray::size_type idx
=0; idx
!=Size
; ++idx
) {
129 if (InValues
[idx
]!=Values
[idx
]) {
138 TestMultiRW(const T
*Values
,
143 ProcessData(Values
, (typename
ValueArray::size_type
) Size
, pfnWriter
, pfnReader
);
145 TestMultiRW(const ValueArray
&Values
,
149 ProcessData(&*Values
.begin(), Values
.size(), pfnWriter
, pfnReader
);
160 T
TestRW(const T
&Value
)
165 wxFileOutputStream
FileOutput( wxT("mytext.dat") );
166 wxDataOutputStream
DataOutput( FileOutput
);
172 wxFileInputStream
FileInput( wxT("mytext.dat") );
173 wxDataInputStream
DataInput( FileInput
);
175 DataInput
>> InValue
;
181 void DataStreamTestCase::FloatRW()
183 CPPUNIT_ASSERT( TestFloatRW(5.5) == 5.5 );
184 CPPUNIT_ASSERT( TestFloatRW(5) == 5 );
185 CPPUNIT_ASSERT( TestFloatRW(5.55) == 5.55 );
186 CPPUNIT_ASSERT( TestFloatRW(55555.555555) == 55555.555555 );
189 void DataStreamTestCase::DoubleRW()
191 CPPUNIT_ASSERT( TestFloatRW(2132131.1232132) == 2132131.1232132 );
192 CPPUNIT_ASSERT( TestFloatRW(21321343431.1232143432) == 21321343431.1232143432 );
196 void DataStreamTestCase::LongLongRW()
198 TestMultiRW
<wxLongLong
>::ValueArray ValuesLL
;
199 TestMultiRW
<wxULongLong
>::ValueArray ValuesULL
;
201 ValuesLL
.push_back(wxLongLong(0l));
202 ValuesLL
.push_back(wxLongLong(1l));
203 ValuesLL
.push_back(wxLongLong(-1l));
204 ValuesLL
.push_back(wxLongLong(0x12345678l
));
205 ValuesLL
.push_back(wxLongLong(0x12345678l
, 0xabcdef01l
));
207 ValuesULL
.push_back(wxULongLong(0l));
208 ValuesULL
.push_back(wxULongLong(1l));
209 ValuesULL
.push_back(wxULongLong(0x12345678l
));
210 ValuesULL
.push_back(wxULongLong(0x12345678l
, 0xabcdef01l
));
212 CPPUNIT_ASSERT( TestRW(wxLongLong(0x12345678l
)) == wxLongLong(0x12345678l
) );
213 CPPUNIT_ASSERT( TestRW(wxLongLong(0x12345678l
, 0xabcdef01l
)) == wxLongLong(0x12345678l
, 0xabcdef01l
) );
214 CPPUNIT_ASSERT( TestMultiRW
<wxLongLong
>(ValuesLL
, &wxDataOutputStream::WriteLL
, &wxDataInputStream::ReadLL
).IsOk() );
215 CPPUNIT_ASSERT( TestMultiRW
<wxULongLong
>(ValuesULL
, &wxDataOutputStream::WriteLL
, &wxDataInputStream::ReadLL
).IsOk() );
220 void DataStreamTestCase::Int64RW()
222 TestMultiRW
<wxInt64
>::ValueArray ValuesI64
;
223 TestMultiRW
<wxUint64
>::ValueArray ValuesUI64
;
225 ValuesI64
.push_back(wxInt64(0l));
226 ValuesI64
.push_back(wxInt64(1l));
227 ValuesI64
.push_back(wxInt64(-1l));
228 ValuesI64
.push_back(wxInt64(0x12345678l
));
229 ValuesI64
.push_back((wxInt64(0x12345678l
) << 32) + wxInt64(0xabcdef01l
));
231 ValuesUI64
.push_back(wxUint64(0l));
232 ValuesUI64
.push_back(wxUint64(1l));
233 ValuesUI64
.push_back(wxUint64(0x12345678l
));
234 ValuesUI64
.push_back((wxUint64(0x12345678l
) << 32) + wxUint64(0xabcdef01l
));
236 CPPUNIT_ASSERT( TestRW(wxUint64(0x12345678l
)) == wxUint64(0x12345678l
) );
237 CPPUNIT_ASSERT( TestRW((wxUint64(0x12345678l
) << 32) + wxUint64(0xabcdef01l
)) == (wxUint64(0x12345678l
) << 32) + wxUint64(0xabcdef01l
) );
238 CPPUNIT_ASSERT( TestMultiRW
<wxInt64
>(ValuesI64
, &wxDataOutputStream::Write64
, &wxDataInputStream::Read64
).IsOk() );
239 CPPUNIT_ASSERT( TestMultiRW
<wxUint64
>(ValuesUI64
, &wxDataOutputStream::Write64
, &wxDataInputStream::Read64
).IsOk() );
243 void DataStreamTestCase::NaNRW()