public async Task Test_IBufferWriterStream_WriteAsync_Array() { ArrayPoolBufferWriter <byte> writer = new ArrayPoolBufferWriter <byte>(); Stream stream = ((IBufferWriter <byte>)writer).AsStream(); byte[] data = Test_MemoryStream.CreateRandomData(64); // Same test as above, but using an asynchronous write instead await stream.WriteAsync(data, 0, data.Length); Assert.AreEqual(writer.WrittenCount, data.Length); Assert.IsTrue(writer.WrittenSpan.SequenceEqual(data)); await Assert.ThrowsExceptionAsync <ArgumentNullException>(() => stream.WriteAsync(null, 0, 10)); await Assert.ThrowsExceptionAsync <ArgumentOutOfRangeException>(() => stream.WriteAsync(data, -1, 10)); await Assert.ThrowsExceptionAsync <ArgumentException>(() => stream.WriteAsync(data, 200, 10)); await Assert.ThrowsExceptionAsync <ArgumentOutOfRangeException>(() => stream.WriteAsync(data, 0, -24)); await Assert.ThrowsExceptionAsync <ArgumentException>(() => stream.WriteAsync(data, 0, 200)); stream.Dispose(); await Assert.ThrowsExceptionAsync <ObjectDisposedException>(() => stream.WriteAsync(data, 0, data.Length)); }
public void Test_IBufferWriterStream_Write_Array() { ArrayPoolBufferWriter <byte> writer = new ArrayPoolBufferWriter <byte>(); Stream stream = ((IBufferWriter <byte>)writer).AsStream(); byte[] data = Test_MemoryStream.CreateRandomData(64); // Write random data to the stream wrapping the buffer writer, and validate // that the state of the writer is consistent, and the written content matches. stream.Write(data, 0, data.Length); Assert.AreEqual(writer.WrittenCount, data.Length); Assert.IsTrue(writer.WrittenSpan.SequenceEqual(data)); // A few tests with invalid inputs (null buffers, invalid indices, etc.) Assert.ThrowsException <ArgumentNullException>(() => stream.Write(null, 0, 10)); Assert.ThrowsException <ArgumentOutOfRangeException>(() => stream.Write(data, -1, 10)); Assert.ThrowsException <ArgumentException>(() => stream.Write(data, 200, 10)); Assert.ThrowsException <ArgumentOutOfRangeException>(() => stream.Write(data, 0, -24)); Assert.ThrowsException <ArgumentException>(() => stream.Write(data, 0, 200)); stream.Dispose(); Assert.ThrowsException <ObjectDisposedException>(() => stream.Write(data, 0, data.Length)); }
public async Task Test_IBufferWriterStream_WriteAsync_Memory() { ArrayPoolBufferWriter <byte> writer = new ArrayPoolBufferWriter <byte>(); Stream stream = ((IBufferWriter <byte>)writer).AsStream(); Memory <byte> data = Test_MemoryStream.CreateRandomData(64); // Same as the other asynchronous test above, but writing from a Memory<T> await stream.WriteAsync(data); Assert.AreEqual(writer.WrittenCount, data.Length); Assert.IsTrue(data.Span.SequenceEqual(writer.WrittenSpan)); }
public void Test_IBufferWriterStream_Write_Span() { ArrayPoolBufferWriter <byte> writer = new ArrayPoolBufferWriter <byte>(); Stream stream = ((IBufferWriter <byte>)writer).AsStream(); Memory <byte> data = Test_MemoryStream.CreateRandomData(64); // This will use the extension when on .NET Standard 2.0, // as the Stream class doesn't have Spam<T> or Memory<T> // public APIs there. This is the case eg. on UWP as well. stream.Write(data.Span); Assert.AreEqual(writer.WrittenCount, data.Length); Assert.IsTrue(data.Span.SequenceEqual(writer.WrittenSpan)); }