public void TestBlocking() { int rc = 0; var s = new UnbufferedMemoryStream.UnbufferedMemoryStream(); var t1 = Task.Run(() => { s.ReadByte(); if (Interlocked.Increment(ref rc) != 2) { Assert.Fail(); } }); var t2 = Task.Run(async() => { await Task.Delay(100); s.WriteByte(10); if (Interlocked.Increment(ref rc) != 1) { Assert.Fail(); } }); Task.WaitAll(t1, t2); s.Dispose(); }
public void TestSequentialReadWritre([Random(1024, 1024 * 1024, 100)] int length) { byte input = 0; byte output = 0; int generatedBytes = 0; int readBytesTotal = 0; var rnd = new Random(length); using (var stream = new UnbufferedMemoryStream.UnbufferedMemoryStream()) { while (generatedBytes < length) { var bufferSize = rnd.Next(1, 1024); var buffer = new byte[bufferSize]; for (var i = 0; i < bufferSize; i++) { buffer[i] = input++; } generatedBytes += bufferSize; stream.Write(buffer, 0, bufferSize); bufferSize = rnd.Next(1, 1024); buffer = new byte[bufferSize]; var read = stream.Read(buffer, 0, bufferSize); for (int i = 0; i < read; i++) { Assert.AreEqual(output++, buffer[i]); } readBytesTotal += read; } while (generatedBytes > readBytesTotal) { var bufferSize = rnd.Next(1, Math.Min(1024, generatedBytes - readBytesTotal)); var buffer = new byte[bufferSize]; var read = stream.Read(buffer, 0, bufferSize); for (int i = 0; i < read; i++) { Assert.AreEqual(output++, buffer[i]); } readBytesTotal += read; } } }
public async Task TestConcurrent() { var output = new byte[10]; Task <int> readTask; using (var s = new UnbufferedMemoryStream.UnbufferedMemoryStream()) { readTask = s.ReadAsync(output, 0, 10); s.WriteByte(10); } var read = await readTask; Assert.AreEqual(1, read); Assert.AreEqual(10, output[0]); }
public void TestSequentialReadWritre([Random(1, 1024, 10)] int length, [Random(10)] int seed) { var rnd = new Random(seed); var buffer = new byte[length]; for (var i = 0; i < length; i++) { buffer[i] = (byte)rnd.Next(0, 255); } var output = new byte[length]; using (var stream = new UnbufferedMemoryStream.UnbufferedMemoryStream()) { stream.Write(buffer, 0, length); stream.Read(output, 0, length); } CollectionAssert.AreEquivalent(buffer, output); }