private static void ReadWf(IColumnStream stream, UnsafeBuffer rData, byte wVal, int wLen) { // Clean rData.SetAll(0); stream.Reset(); // 1.1 Read more than wrote var read = stream.Read(rData.Ptr, wLen * 2); read.Check(wLen); rData.AllUntil(wLen - 1, wVal); rData.AllFrom(wLen, 0); // Clean rData.SetAll(0); stream.Reset(); // 1.2 Read less than wrote and until after end var split = 7; var splitLen = wLen / split; for (var i = 0; i < split; i++) { read = stream.Read(rData.Ptr + (splitLen * i), splitLen); read.Check(splitLen); rData.AllUntil(splitLen * i - 1, wVal); rData.AllFrom(splitLen * (i + 1), 0); } var remaining = wLen - splitLen * split; read = stream.Read(rData.Ptr + splitLen * split, splitLen); read.Check(remaining); rData.AllUntil(wLen - 1, wVal); rData.AllFrom(wLen, 0); // Clean rData.SetAll(0); stream.Reset(); // 1.3 Read exactly the neumber of byte wrote read = stream.Read(rData.Ptr, wLen); read.Check(wLen); rData.AllUntil(wLen - 1, wVal); rData.AllFrom(wLen, 0); read = stream.Read(rData.Ptr + wLen, wLen); read.Check(0); rData.AllUntil(wLen - 1, wVal); rData.AllFrom(wLen, 0); // Clean rData.SetAll(0); stream.Reset(); }
public void ReadWriteWorkflowTest() { var ms = new MinotaurMemoryStream(); const int bufferSize = 1024; var wrapSize = sizeof(PayloadHeader) + sizeof(byte) * 2 + sizeof(byte); var bufferSizeWithoutWrapSize = bufferSize - wrapSize; const int fullBufferSize = bufferSize * 5 + 512; var writeBuffer = new UnsafeBuffer(fullBufferSize); var readBuffer = new UnsafeBuffer(fullBufferSize); writeBuffer.SetAll(2); readBuffer.SetAll(0); var stream = new ColumnStream <byte>(ms, new VoidCodec <byte>(), bufferSize); // 1. Test write less than buffer var write = 100; var wrote = stream.Write(writeBuffer.Ptr, write); wrote.Check(write); ms.Position.Check(0); stream.Flush(); ms.Position.Check(write + wrapSize); ReadWf(stream, readBuffer, 2, write); // 2. Test write more than buffer writeBuffer.SetAll(2); stream.Reset(); ms.SetLength(0); write = bufferSize * 4 + 512; wrote = stream.Write(writeBuffer.Ptr, write); wrote.Check(write); ms.Position.Check((bufferSize + wrapSize) * 4); stream.Flush(); ms.Position.Check(write + 5 * wrapSize); ReadWf(stream, readBuffer, 2, write); // 2. Test write exactly buffer size writeBuffer.SetAllUntil(bufferSizeWithoutWrapSize, 2); stream.Reset(); ms.SetLength(0); write = bufferSize; wrote = stream.Write(writeBuffer.Ptr, write); wrote.Check(write); ms.Position.Check(bufferSize + wrapSize); stream.Flush(); ms.Position.Check(bufferSize + wrapSize); stream.Reset(); ReadWf(stream, readBuffer, 2, write); stream.Dispose(); writeBuffer.Dispose(); readBuffer.Dispose(); }