+void memStream::Ctor_InFromIn()
+{
+ wxMemoryInputStream *pMemInStream1 = DoCreateInStream();
+ wxMemoryInputStream *pMemInStream2 = new wxMemoryInputStream(*pMemInStream1);
+ CPPUNIT_ASSERT(pMemInStream2->IsOk());
+ CPPUNIT_ASSERT_EQUAL(pMemInStream1->GetLength(), pMemInStream2->GetLength());
+ wxFileOffset len = pMemInStream2->GetLength();
+ char *dat = new char[len];
+ pMemInStream2->Read(dat, len);
+ CPPUNIT_ASSERT_EQUAL(len, (wxFileOffset)pMemInStream2->LastRead());
+ wxStreamBuffer *buf = pMemInStream1->GetInputStreamBuffer();
+ void *pIn = buf->GetBufferStart();
+ CPPUNIT_ASSERT(memcmp(pIn, dat, len) == 0);
+ delete pMemInStream2;
+
+ wxFileOffset len2 = len / 2;
+ CPPUNIT_ASSERT(len2);
+ CPPUNIT_ASSERT(pMemInStream1->SeekI(-len2, wxFromCurrent) != wxInvalidOffset);
+ pIn = buf->GetBufferPos();
+ pMemInStream2 = new wxMemoryInputStream(*pMemInStream1, len2);
+ CPPUNIT_ASSERT(pMemInStream2->IsOk());
+ CPPUNIT_ASSERT_EQUAL((wxFileOffset)len2, pMemInStream2->GetLength());
+ pMemInStream2->Read(dat, len2);
+ CPPUNIT_ASSERT_EQUAL(len2, (wxFileOffset)pMemInStream2->LastRead());
+ CPPUNIT_ASSERT(memcmp(pIn, dat, len2) == 0);
+
+ delete[] dat;
+ delete pMemInStream2;
+ delete pMemInStream1;
+}
+
+void memStream::Ctor_InFromOut()
+{
+ wxMemoryOutputStream *pMemOutStream = DoCreateOutStream();
+ pMemOutStream->Write(GetDataBuffer(), DATABUFFER_SIZE);
+ wxMemoryInputStream *pMemInStream = new wxMemoryInputStream(*pMemOutStream);
+ CPPUNIT_ASSERT(pMemInStream->IsOk());
+ CPPUNIT_ASSERT_EQUAL(pMemInStream->GetLength(), pMemOutStream->GetLength());
+ size_t len = pMemInStream->GetLength();
+ wxStreamBuffer *in = pMemInStream->GetInputStreamBuffer();
+ wxStreamBuffer *out = pMemOutStream->GetOutputStreamBuffer();
+ void *pIn = in->GetBufferStart();
+ void *pOut = out->GetBufferStart();
+ CPPUNIT_ASSERT(pIn != pOut);
+ CPPUNIT_ASSERT(memcmp(pIn, pOut, len) == 0);
+ delete pMemInStream;
+ delete pMemOutStream;
+}