public void CreateReadOnlySequence()
        {
            var arrayOne   = new[] { 0, 1, 2, 3, 4 };
            var arrayTwo   = new[] { 5, 6, 7, 8, 9 };
            var arrayThree = new[] { 10, 11, 12, 13, 14 };

            var firstSegment = new MemorySegment <int>(arrayOne);
            var lastSegment  = firstSegment.Append(arrayTwo).Append(arrayThree);

            var sequence = new ReadOnlySequence <int>(firstSegment, 0, lastSegment, lastSegment.Memory.Length);

            var ints = new Span <int>(new int[arrayOne.Length + arrayTwo.Length + arrayThree.Length]);

            sequence.Fill(ints);

            Assert.AreEqual(0, sequence.Length);

            var i = 0;

            for (var j = 0; j < arrayOne.Length; j++, i++)
            {
                Assert.AreEqual(arrayOne[j], ints[i]);
            }
            for (var j = 0; j < arrayTwo.Length; j++, i++)
            {
                Assert.AreEqual(arrayTwo[j], ints[i]);
            }
            for (var j = 0; j < arrayThree.Length; j++, i++)
            {
                Assert.AreEqual(arrayThree[j], ints[i]);
            }

            // but maybe creating segments is expensive and a pipe would be better...
        }
        public void FillSpan()
        {
            var sequence = new ReadOnlySequence <byte>(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
            var bytes    = new byte[20];
            var span     = new Span <byte>(bytes);

            try
            {
                sequence.Fill(span);
                Assert.Fail("Expected exception.");
            }
            catch (ArgumentOutOfRangeException) { /* expected */ }

            bytes = new byte[8];
            span  = new Span <byte>(bytes);

            sequence.Fill(span);
            Assert.That(sequence.Length, Is.EqualTo(2));
            for (var i = 0; i < 8; i++)
            {
                Assert.That(bytes[i], Is.EqualTo(i));
            }

            var bytes1       = new byte[] { 0, 1, 2, 3, 4 };
            var bytes2       = new byte[] { 5, 6, 7, 8, 9 };
            var firstSegment = new MemorySegment <byte>(bytes1);
            var lastSegment  = firstSegment.Append(bytes2);

            sequence = new ReadOnlySequence <byte>(firstSegment, 0, lastSegment, lastSegment.Memory.Length);

            sequence.Fill(span);
            Assert.That(sequence.Length, Is.EqualTo(2));
            for (var i = 0; i < 8; i++)
            {
                Assert.That(bytes[i], Is.EqualTo(i));
            }
        }