| | 178 | // Test PartialReadStream and ReadGatherStream handling of files |
| | 179 | // over 2GB (refs #2) |
| | 180 | { |
| | 181 | char buffer[8]; |
| | 182 | |
| | 183 | ZeroStream zero(0x80000003); |
| | 184 | zero.Seek(0x7ffffffe, IOStream::SeekType_Absolute); |
| | 185 | TEST_THAT(zero.GetPosition() == 0x7ffffffe); |
| | 186 | TEST_THAT(zero.Read(buffer, 8) == 5); |
| | 187 | TEST_THAT(zero.GetPosition() == 0x80000003); |
| | 188 | TEST_THAT(zero.Read(buffer, 8) == 0); |
| | 189 | zero.Seek(0, IOStream::SeekType_Absolute); |
| | 190 | TEST_THAT(zero.GetPosition() == 0); |
| | 191 | |
| | 192 | char* buffer2 = new char [0x1000000]; |
| | 193 | TEST_THAT(buffer2 != NULL); |
| | 194 | |
| | 195 | PartialReadStream part(zero, 0x80000002); |
| | 196 | for (int i = 0; i < 0x80; i++) |
| | 197 | { |
| | 198 | int read = part.Read(buffer2, 0x1000000); |
| | 199 | TEST_THAT(read == 0x1000000); |
| | 200 | } |
| | 201 | TEST_THAT(part.Read(buffer, 8) == 2); |
| | 202 | TEST_THAT(part.Read(buffer, 8) == 0); |
| | 203 | |
| | 204 | delete [] buffer2; |
| | 205 | |
| | 206 | ReadGatherStream gather(false); |
| | 207 | zero.Seek(0, IOStream::SeekType_Absolute); |
| | 208 | int component = gather.AddComponent(&zero); |
| | 209 | gather.AddBlock(component, 0x80000002); |
| | 210 | TEST_THAT(gather.Read(buffer, 8) == 8); |
| | 211 | } |
| | 212 | |