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);
                }
            }
        }