public void WriteReadSequenceTest() { var s = new BlockingFixedLengthFifoStream(new AudioProperties(1, 1, 8, AudioFormat.LPCM), 10); Assert.AreEqual(0, s.Position); Assert.AreEqual(0, s.ReadPosition); Assert.AreEqual(0, s.Length); Assert.AreEqual(10, s.Capacity); s.Write(new byte[] { 1 }, 0, 1); Assert.AreEqual(1, s.Position); // Read 1st byte var readBuffer = new byte[1]; s.Read(readBuffer, 0, 1); Assert.AreEqual(1, s.Position); Assert.AreEqual(1, s.ReadPosition); CollectionAssert.AreEqual(new byte[] { 1 }, readBuffer); s.Write(new byte[] { 2, 3 }, 0, 2); Assert.AreEqual(3, s.Position); Assert.AreEqual(1, s.ReadPosition); // Read 2nd byte s.Read(readBuffer, 0, 1); Assert.AreEqual(3, s.Position); Assert.AreEqual(2, s.ReadPosition); CollectionAssert.AreEqual(new byte[] { 2 }, readBuffer); s.Write(new byte[] { 4, 5 }, 0, 2); Assert.AreEqual(5, s.Position); Assert.AreEqual(2, s.ReadPosition); // Read 3rd and 4th byte readBuffer = new byte[2]; s.Read(readBuffer, 0, 2); Assert.AreEqual(5, s.Position); Assert.AreEqual(4, s.ReadPosition); CollectionAssert.AreEqual(new byte[] { 3, 4 }, readBuffer); // Write 1 byte over the capacity, read index should now move back one byte to position 3 s.Write(new byte[] { 6, 7, 8, 9, 10, 11 }, 0, 6); Assert.AreEqual(10, s.Position); Assert.AreEqual(3, s.ReadPosition); s.Read(readBuffer, 0, 2); // Read 5th and 6th byte, read index should now be at position 5 Assert.AreEqual(10, s.Position); Assert.AreEqual(5, s.ReadPosition); CollectionAssert.AreEqual(new byte[] { 5, 6 }, readBuffer); // Buffer is already full and we write 6 more bytes, this should move the read index to -1, // which means we lose 1 byte (value 7) s.Write(new byte[] { 12, 13, 14, 15, 16, 17 }, 0, 6); Assert.AreEqual(10, s.Position); Assert.AreEqual(0, s.ReadPosition); s.Read(readBuffer, 0, 2); // Read 8th and 9th byte, read index should now be at position 2 Assert.AreEqual(10, s.Position); Assert.AreEqual(2, s.ReadPosition); CollectionAssert.AreEqual(new byte[] { 8, 9 }, readBuffer); }