public void SeekOutsideBuffer(int bufferSize) { using (var memoryStream = _randomIntStructGenerator.GetMemoryStream()) { var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize); // Structs skipped each seek and amount of bytes seeked. int sizeOfStruct = Struct.GetSize <RandomIntStruct>(); int structsSkip = (bufferSize * 2) / sizeOfStruct; int bytesSeek = structsSkip * sizeOfStruct; int currentStructIndex = 0; // Seek to said index and compare, multiple times. for (int x = 0; x < _randomIntStructGenerator.Structs.Length / structsSkip; x++) { // Read current reader.Read(out RandomIntStruct value); Assert.Equal(_randomIntStructGenerator.Structs[currentStructIndex], value); // Skip structsSkip amount of structs. Remove sizeOfStruct from bytesSeek as reading once // auto-advanced internal pointer by 1 struct. currentStructIndex += structsSkip; reader.Seek(bytesSeek - sizeOfStruct, SeekOrigin.Current); } } }
public void SeekBeginAndEndOutsideBuffer(int bufferSize) { using (var memoryStream = _randomIntStructGenerator.GetMemoryStream()) { var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize); // Structs skipped each seek and amount of bytes seeked. int sizeOfStruct = Struct.GetSize <RandomIntStruct>(); int structsSkip = (bufferSize * 2) / sizeOfStruct; int bytesSeek = structsSkip * sizeOfStruct; // Beginning reader.Seek(bytesSeek, SeekOrigin.Begin); reader.Read(out RandomIntStruct beginValue); Assert.Equal(_randomIntStructGenerator.Structs[structsSkip], beginValue); // End reader.Seek(bytesSeek, SeekOrigin.End); reader.Read(out RandomIntStruct endValue); Assert.Equal(_randomIntStructGenerator.Structs[_randomIntStructGenerator.Structs.Length - structsSkip], endValue); } }
public void SeekBackwards() { using (var memoryStream = _randomIntStructGenerator.GetMemoryStream()) { var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, Struct.GetSize <RandomIntStruct>() * 4); // Structs skipped each seek and amount of bytes seeked. int sizeOfStruct = Struct.GetSize <RandomIntStruct>(); for (int x = 0; x < _randomIntStructGenerator.Structs.Length; x++) { reader.Read(out RandomIntStruct firstRead); reader.Seek(-sizeOfStruct, SeekOrigin.Current); reader.Read(out RandomIntStruct secondRead); Assert.Equal(firstRead, secondRead); } } }