예제 #1
0
        private static void StichingTestNoStichingNeeded(int inputBufferSize)
        {
            Span <byte> source = new byte[inputBufferSize];

            Base64TestHelper.InitalizeDecodableBytes(source);
            Span <byte> expected = new byte[inputBufferSize];

            Base64.Decoder.Transform(source, expected, out int expectedConsumed, out int expectedWritten);

            Base64TestHelper.SplitSourceIntoSpans(source, false, out ReadOnlySpan <byte> source1, out ReadOnlySpan <byte> source2);

            Span <byte> destination = new byte[inputBufferSize]; // Plenty of space

            int bytesConsumed = 0;
            int bytesWritten  = 0;

            foreach (var iteration in Benchmark.Iterations)
            {
                using (iteration.StartMeasurement())
                {
                    for (int i = 0; i < Benchmark.InnerIterationCount; i++)
                    {
                        Base64TestHelper.DecodeNoNeedToStich(source1, source2, destination, out bytesConsumed, out bytesWritten);
                    }
                }
            }

            Assert.Equal(expectedConsumed, bytesConsumed);
            Assert.Equal(expectedWritten, bytesWritten);
            Assert.True(expected.SequenceEqual(destination));
        }
예제 #2
0
        [InlineData(30000, 50000)]  // No Third Call
        private static void StichingTestStichingRequired(int stackSize, int inputBufferSize)
        {
            Span <byte> source = new byte[inputBufferSize];

            Base64TestHelper.InitalizeDecodableBytes(source);
            Span <byte> expected = new byte[inputBufferSize];

            Base64.Utf8ToBytes(source, expected, out int expectedConsumed, out int expectedWritten);

            Base64TestHelper.SplitSourceIntoSpans(source, true, out ReadOnlySpan <byte> source1, out ReadOnlySpan <byte> source2);

            Span <byte> destination = new byte[inputBufferSize]; // Plenty of space
            Span <byte> stackSpan   = stackalloc byte[stackSize];

            int bytesConsumed = 0;
            int bytesWritten  = 0;

            foreach (var iteration in Benchmark.Iterations)
            {
                using (iteration.StartMeasurement())
                {
                    for (int i = 0; i < Benchmark.InnerIterationCount; i++)
                    {
                        Base64TestHelper.DecodeStichUsingStack(source1, source2, destination, stackSpan, out bytesConsumed, out bytesWritten);
                    }
                }
            }

            Assert.Equal(expectedConsumed, bytesConsumed);
            Assert.Equal(expectedWritten, bytesWritten);
            Assert.True(expected.SequenceEqual(destination));
        }