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]); } }
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); }