summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2007-04-28 17:14:27 +0000
committerChris Wilson <chris+github@qwirx.com>2007-04-28 17:14:27 +0000
commitd7f3062292dd3b859c6d2632945b6ef6f102a116 (patch)
treed53a2c243b1826f992349e564212172e653a991f /test
parentf71cab7197bc0582dcfb3a4320520d8fbe54718b (diff)
Test that PartialReadStream and ReadGatherStream can handle streams
over 2GB in size. (refs #3)
Diffstat (limited to 'test')
-rw-r--r--test/common/testcommon.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/common/testcommon.cpp b/test/common/testcommon.cpp
index 6c90602a..19c83d2d 100644
--- a/test/common/testcommon.cpp
+++ b/test/common/testcommon.cpp
@@ -31,6 +31,8 @@
#include "Archive.h"
#include "Timer.h"
#include "Logging.h"
+#include "ZeroStream.h"
+#include "PartialReadStream.h"
#include "MemLeakFindOn.h"
@@ -173,6 +175,41 @@ class TestLogger : public Logger
int test(int argc, const char *argv[])
{
+ // Test PartialReadStream and ReadGatherStream handling of files
+ // over 2GB (refs #2)
+ {
+ char buffer[8];
+
+ ZeroStream zero(0x80000003);
+ zero.Seek(0x7ffffffe, IOStream::SeekType_Absolute);
+ TEST_THAT(zero.GetPosition() == 0x7ffffffe);
+ TEST_THAT(zero.Read(buffer, 8) == 5);
+ TEST_THAT(zero.GetPosition() == 0x80000003);
+ TEST_THAT(zero.Read(buffer, 8) == 0);
+ zero.Seek(0, IOStream::SeekType_Absolute);
+ TEST_THAT(zero.GetPosition() == 0);
+
+ char* buffer2 = new char [0x1000000];
+ TEST_THAT(buffer2 != NULL);
+
+ PartialReadStream part(zero, 0x80000002);
+ for (int i = 0; i < 0x80; i++)
+ {
+ int read = part.Read(buffer2, 0x1000000);
+ TEST_THAT(read == 0x1000000);
+ }
+ TEST_THAT(part.Read(buffer, 8) == 2);
+ TEST_THAT(part.Read(buffer, 8) == 0);
+
+ delete [] buffer2;
+
+ ReadGatherStream gather(false);
+ zero.Seek(0, IOStream::SeekType_Absolute);
+ int component = gather.AddComponent(&zero);
+ gather.AddBlock(component, 0x80000002);
+ TEST_THAT(gather.Read(buffer, 8) == 8);
+ }
+
// Test self-deleting temporary file streams
{
std::string tempfile("testfiles/tempfile");