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