public async Task Read_Async()
        {
            using var concatenation = SequenceStream.Concatenation(
                      new Stream[]
            {
                new MemoryStream(new byte[] { 1, 2, 3 }),
                new MemoryStream(new byte[] { 7, 40, 80, 78 })
            }.ToAsyncEnumerable(),
                      ArrayPool <byte> .Shared,
                      2
                      );
            var buffer = new byte[5];
            await concatenation.ReadAsync(buffer, 0, 5);

            buffer.Should().Equal(1, 2, 3, 7, 40);
        }
        public void Read_Piece()
        {
            using var concatenation = SequenceStream.Concatenation(
                      new Stream[]
            {
                new MemoryStream(new byte[] { 1, 2, 3 }),
                new MemoryStream(new byte[] { 7, 40, 80, 78 })
            },
                      ArrayPool <byte> .Shared,
                      2
                      );
            var buffer = new byte[5];

            concatenation.Read(buffer, 0, 5);

            buffer.Should().Equal(1, 2, 3, 7, 40);
        }
        public void Dispose_Used_Streams_On_Dispose([Range(1, 5)] int chunkSize, [Values(1, 3, 5, 7, 10, 12, 17)] int read)
        {
            var streams = new[]
            {
                new Disposable(new MemoryStream(new byte[] { 7, 40, 80, 78 })),
                new Disposable(new MemoryStream(new byte[] { 20, 40, 70 })),
                new Disposable(new MemoryStream(new byte[] { 17, 50, 233, 89, 54 }))
            };

            using (var concatenation = SequenceStream.Concatenation(streams, ArrayPool <byte> .Shared, chunkSize))
            {
                concatenation.Read(new byte[read], 0, read);
            }

            streams.Should().OnlyContain(
                stream => stream.Position == 0 || stream.Disposed
                );
        }
        public void Read_Entire_Content()
        {
            using var concatenation = SequenceStream.Concatenation(
                      new Stream[]
            {
                new MemoryStream(new byte[] { 1, 2, 3 }),
                new MemoryStream(new byte[] { 7, 40, 80, 78 })
            },
                      ArrayPool <byte> .Shared,
                      3
                      );

            var buffer = new byte[100];
            var read   = concatenation.Read(buffer, 0, 100);

            read.Should().Be(7);
            buffer.Take(read).Should().Equal(1, 2, 3, 7, 40, 80, 78);
        }