public void WriteAndCompleteAddingTest() { var data = Enumerable.Range(0, 200).Select(v => (byte)v).ToArray(); var buffer = new byte[100]; using var stream = new PipelineStream(); Assert.AreEqual(true, stream.CanWrite); stream.Write(data.AsSpan()); stream.Complete(); Assert.AreEqual(false, stream.CanWrite); Assert.ThrowsException <InvalidOperationException>(() => stream.Write(data.AsSpan())); }
public void TestClosedAndWrite() { var stream = new PipelineStream(256); Assert.AreEqual(true, stream.CanWrite); stream.Write(Encoding.UTF8.GetBytes("0123456789"), 0, 10); stream.Close(); Assert.AreEqual(false, stream.CanWrite); Assert.AreEqual(true, stream.CanRead); Assert.AreEqual(true, stream.Closed); stream.Write(Encoding.UTF8.GetBytes("0123456789"), 0, 10); }
public void WriteTest() { var data = Enumerable.Range(0, 200).Select(v => (byte)v).ToArray(); var buffer = new byte[100]; using var stream = new PipelineStream(); stream.Write(data.AsSpan()); }
public void WriteThread(object obj) { var data = Encoding.UTF8.GetBytes("0123456789"); for (var i = 0; i < 1000; i++) { stream.Write(data, 0, data.Length); } stream.Close(); }
public void CompleteTest() { using var Stream = new PipelineStream(); Assert.AreEqual(0, Stream.Length); var WriteMessage1 = "HELLO"; Stream.Write(Encoding.GetBytes(WriteMessage1)); Stream.Flush(); var ReadCount = Encoding.GetByteCount(WriteMessage1); Assert.AreEqual(ReadCount, Stream.Length); var ReadBytes = new byte[ReadCount]; ReadCount = Stream.Read(ReadBytes); Assert.AreEqual(0, Stream.Length); var ReadMessage1 = Encoding.GetString(ReadBytes.AsSpan().Slice(0, ReadCount)); Assert.AreEqual(WriteMessage1, ReadMessage1); Stream.Complete(); var WriteMessage2 = "HI!"; Assert.ThrowsException <InvalidOperationException>(() => Stream.Write(Encoding.GetBytes(WriteMessage2))); }
public void TestLargeWithVaryingChunkSizes() { FakeRandomGenerator frg = new FakeRandomGenerator(); byte[] source = frg.Generate(500000); int[] chunkSizes = { 1, 2, 3, 5, 7, 11, 13, 17, 19, 64, 128, 256, 257, }; using (MemoryStream destination = new MemoryStream()) { using (PipelineStream pipeline = new PipelineStream(new CancellationToken())) { Task producerTask = Task.Run(() => { int i = 0; int total = 0; while (total < source.Length) { int count = chunkSizes[i++ % chunkSizes.Length]; count = total + count > source.Length ? source.Length - total : count; pipeline.Write(source, total, count); total += count; } pipeline.Complete(); }); Task consumerTask = Task.Run(() => { byte[] read = new byte[17]; int count; while ((count = pipeline.Read(read, 0, read.Length)) > 0) { destination.Write(read, 0, count); } }); Task.WaitAll(producerTask, consumerTask); } byte[] result = destination.ToArray(); Assert.That(source.IsEquivalentTo(result), "The source and result should be the same after passing through the pipeline."); } }