public void GivenLazyTransformStream_WhenTransformedDataHasDifferentLength_ReturnsTheCorrectStreamLength()
        {
            using (var lazyTransformStream = new LazyTransformReadOnlyStream <byte[]>(TestData, DoubleByteArray))
            {
                Assert.Equal(TestData.Length * 2, lazyTransformStream.Length);

                var readBuffer = new byte[lazyTransformStream.Length];
                lazyTransformStream.Read(readBuffer, 0, readBuffer.Length);
                Assert.Equal(readBuffer.Length, lazyTransformStream.Position);
            }
        }
        private static GCWatch GetGCWatch <T>(T inputData, Func <T, Stream> transformFunction)
        {
            var lazyTransform = new LazyTransformReadOnlyStream <T>(inputData, transformFunction);
            var result        = new GCWatch(lazyTransform);

            // Read the entire stream
            var outputBuffer = new byte[lazyTransform.Length];

            lazyTransform.Read(outputBuffer, 0, outputBuffer.Length);

            return(result);
        }
        public void GivenReverseStreamFunction_WhenUsingLazyTransformStream_StreamIsReversed()
        {
            using (var lazyTransform = new LazyTransformReadOnlyStream <byte[]>(TestData, ReverseByteArray))
            {
                Assert.Equal(TestData.Length, lazyTransform.Length);

                var resultBuffer = new byte[TestData.Length];
                Assert.Equal(TestData.Length, lazyTransform.Read(resultBuffer, 0, TestData.Length));

                for (var i = 0; i < TestData.Length; i++)
                {
                    Assert.Equal(TestData[i], resultBuffer[TestData.Length - 1 - i]);
                }
            }
        }