Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        public void WriteInteger_NoOverflow()
        {
            Initialize();
            var target = new BitTarget(Serializer);

            target.WriteInteger(48, 6);
            target.WriteInteger(2, 2);
            target.Apply();

            AssertAndGoToStart(194);
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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));
                }
            }
        }
Esempio n. 6
0
        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());
        }