コード例 #1
0
        public void ReadBytes()
        {
            // Subarray utility class.
            T[] SubArray <T>(T[] data, int index, int length)
            {
                T[] result = new T[length];
                Array.Copy(data, index, result, 0, length);
                return(result);
            }

            // Test which alternates between reading middle of bytes and sequential array entries.
            using (var memoryStream = _randomIntegerGenerator.GetMemoryStream())
            {
                var reader       = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, 4096);
                int halfwayPoint = _randomIntegerGenerator.Bytes.Length / 2;
                int byteCount    = 200;
                int iterations   = 5;

                for (int x = 0; x < iterations; x++)
                {
                    // Read real.
                    reader.Read(out int value, true);
                    Assert.Equal(_randomIntegerGenerator.Structs[x], value);

                    // Read middle of array.
                    byte[] actual   = reader.ReadBytes(halfwayPoint, byteCount);
                    byte[] expected = SubArray(_randomIntegerGenerator.Bytes, halfwayPoint, byteCount);
                    Assert.Equal(expected, actual);
                }
            }
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }
        public void ReadAllElementsBigEndianUInt16(int bufferSize)
        {
            using (var memoryStream = _randomUInt16Generator.GetMemoryStream())
            {
                var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize);
                for (int x = 0; x < _randomUInt16Generator.Structs.Length; x++)
                {
                    reader.ReadBigEndianPrimitive(out UInt16 value);

                    var notExpected = _randomUInt16Generator.Structs[x];
                    var expected    = _randomUInt16Generator.Structs[x];
                    expected = Reloaded.Memory.Endian.Reverse(expected);

                    Assert.Equal(expected, value);
                    if (expected != notExpected)
                    {
                        Assert.NotEqual(_randomUInt16Generator.Structs[x], value);
                    }
                }
            }
        }
コード例 #5
0
        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 PeekAllElementsBigEndianOverloadInt16(int bufferSize)
        {
            using (var memoryStream = _randomInt16Generator.GetMemoryStream())
            {
                var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize);
                for (int x = 0; x < _randomInt16Generator.Structs.Length; x++)
                {
                    var peek   = reader.PeekBigEndianPrimitive <Int16>();
                    var actual = reader.ReadBigEndianPrimitive <Int16>();
                    Assert.Equal(peek, actual);

                    var notExpected = _randomInt16Generator.Structs[x];
                    var expected    = _randomInt16Generator.Structs[x];
                    expected = Reloaded.Memory.Endian.Reverse(expected);

                    Assert.Equal(expected, actual);
                    if (expected != notExpected)
                    {
                        Assert.NotEqual(_randomInt16Generator.Structs[x], actual);
                    }
                }
            }
        }
コード例 #7
0
        public void ReadAllElementsManaged(int bufferSize)
        {
            // Int Structs: Complex
            using (var memoryStream = _randomIntStructGenerator.GetMemoryStream())
            {
                var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize);
                for (int x = 0; x < _randomIntStructGenerator.Structs.Length; x++)
                {
                    reader.Read(out RandomIntStruct value, true);
                    Assert.Equal(_randomIntStructGenerator.Structs[x], value);
                }
            }

            // Integers: Primitive
            using (var memoryStream = _randomIntegerGenerator.GetMemoryStream())
            {
                var reader = new Reloaded.Memory.Streams.BufferedStreamReader(memoryStream, bufferSize);
                for (int x = 0; x < _randomIntegerGenerator.Structs.Length; x++)
                {
                    reader.Read(out int value, true);
                    Assert.Equal(_randomIntegerGenerator.Structs[x], value);
                }
            }
        }