public void WriteBitOff(bool overflow) { Initialize(); var target = new BitTarget(Serializer); target.WriteBitOff(); if (overflow) { for (int i = 0; i < 8; i++) { target.WriteBitOff(); } } target.Apply(); if (overflow) { AssertAndGoToStart(0, 0); } else { AssertAndGoToStart(0); } }
public void WriteInteger_Overflow(bool lazy) { Initialize(ABSaveSettings.ForSpeed); var target = new BitTarget(Serializer); target.WriteInteger(0, 4); target.WriteInteger(42, 6); target.Apply(); AssertAndGoToStart(10, 128); }
public void WriteInteger_NoOverflow() { Initialize(); var target = new BitTarget(Serializer); target.WriteInteger(48, 6); target.WriteInteger(2, 2); target.Apply(); AssertAndGoToStart(194); }
public void FreeBits() { Initialize(ABSaveSettings.ForSize); var target = new BitTarget(Serializer); target.WriteInteger(0, 4); Assert.AreEqual(target.FreeBits, 4); target.WriteBitOff(); target.WriteBitOn(); Assert.AreEqual(target.FreeBits, 2); target.WriteInteger(42, 6); Assert.AreEqual(target.FreeBits, 4); target.Apply(); }
public void UTF8() { Initialize(); // Stack buffer { var header = new BitTarget(Serializer); Serializer.WriteUTF8("ABC".AsSpan(), ref header); AssertAndGoToStart(3, 65, 66, 67); } { var header = new BitSource(Deserializer); "ABC".AsSpan().SequenceEqual(Deserializer.ReadUTF8(s => new char[s], c => c.AsMemory(), ref header)); } ResetState(); // Heap buffer. (Trying twice to make sure getting an already used buffer works) TestHeapBuffer(); ResetState(); TestHeapBuffer(); void TestHeapBuffer() { var chArr = GenerateBlankCharArr(); var expected = GenerateBlankExpected(); { var header = new BitTarget(Serializer); Serializer.WriteUTF8(chArr.AsSpan(), ref header); AssertAndGoToStart(expected); } { var header = new BitSource(Deserializer); chArr.AsSpan().SequenceEqual(Deserializer.ReadUTF8(s => new char[s], c => c.AsMemory(), ref header)); } } }
void TestWithSettings(ulong data, byte bitsFree, bool lazy) { Initialize(ABSaveSettings.ForSpeed, null, lazy); // Serialization { var header = new BitTarget(Serializer, bitsFree); if (data < uint.MaxValue) { Serializer.WriteCompressedInt((uint)data, ref header); } else { Serializer.WriteCompressedLong(data, ref header); } } Serializer.WriteByte(127); GoToStart(); // Deserialization { var header = new BitSource(Deserializer, bitsFree); if (data < uint.MaxValue) { Assert.AreEqual((uint)data, Deserializer.ReadCompressedInt(ref header)); } else { Assert.AreEqual(data, Deserializer.ReadCompressedLong(ref header)); } } // Make sure we can still successfully read the byte after. Assert.AreEqual(127, Deserializer.ReadByte()); }