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