コード例 #1
0
ファイル: ColumnStreamTests.cs プロジェクト: mpvyard/Minotaur
        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();
        }
コード例 #2
0
ファイル: ColumnStreamTests.cs プロジェクト: mpvyard/Minotaur
        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();
        }