Beispiel #1
0
        public void TestBufferReaderWriter()
        {
            var writer = new BlockBufferWriter();
            int loop   = 10000;
            var data   = generateCheckData();

            Assert.IsNotNull(data);
            for (int i = 0; i < loop; i++)
            {
                var index = Rand.Default.RandInt(data.Count);
                writeData(writer, index, data[index]);
            }

            var reader = new BlockBufferReader(writer.Block, writer.Position);
            var count  = readData(reader, data);

            Assert.AreEqual(count, loop);

            // check read block
            var block = writer.Block;
            var size  = writer.Position;

            writer = new BlockBufferWriter();
            writer.WriteBlock(block, size);
            var blockWrite = writer.ToBlock();

            reader = new BlockBufferReader(blockWrite);
            Assert.AreEqual(reader.Limit, size);
            var checkBlock = new BlockBuffer();

            Assert.AreEqual(reader.ReadBlock(checkBlock), size);
            Assert.IsTrue(reader.IsEnd);
            var array      = block.ToArray();
            var arrayCheck = checkBlock.ToArray();

            for (int i = 0; i < size; i++)
            {
                Assert.AreEqual(array[i], arrayCheck[i]);
            }
        }
Beispiel #2
0
        private int readData(BlockBufferReader reader, List <object> data)
        {
            Assert.IsNotNull(reader);
            Assert.IsNotNull(data);
            int count = 0;

            while (reader.Position < reader.Limit)
            {
                int    index = (int)reader.ReadVarint32();
                object value = null;
                switch (index)
                {
                case 0: value = reader.ReadByte(); break;

                case 1: value = reader.ReadUint16(); break;

                case 2: value = reader.ReadUint32(); break;

                case 3: value = reader.ReadUint64(); break;

                case 4: value = reader.ReadInt16(); break;

                case 5: value = reader.ReadInt32(); break;

                case 6: value = reader.ReadInt64(); break;

                case 7: value = reader.ReadVarint32(); break;

                case 8: value = reader.ReadVarint64(); break;

                case 9: value = reader.ReadSVarint32(); break;

                case 10: value = reader.ReadSVarint64(); break;

                case 11: value = reader.ReadFloat(); break;

                case 12: value = reader.ReadDouble(); break;

                case 13: value = reader.ReadBool(); break;

                case 14: value = reader.ReadString(); break;

                case 15: {
                    int length = (int)reader.ReadVarint32();
                    value = new byte[length];
                    int ret = reader.ReadBuffer((byte[])value);
                    Assert.AreEqual(ret, length);
                }
                break;

                case 16: {
                    int size = (int)reader.ReadVarint32();
                    value = reader.Skip(size);
                }
                break;

                default: Assert.Fail(); break;
                }

                Assert.AreEqual(value, data[index]);
                count++;
            }

            return(count);
        }