public void BitsRead()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            Assert.AreEqual(0, writer.BitsWritten);
            writer.b(true);
            Assert.AreEqual(1, writer.BitsWritten);
            writer.u8(123);
            Assert.AreEqual(9, writer.BitsWritten);
            writer.i16(12345);
            Assert.AreEqual(33, writer.BitsWritten);
            writer.i32(1234567890);
            Assert.AreEqual(73, writer.BitsWritten);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);

            Assert.AreEqual(0, reader.BitsRead);
            reader.b();
            Assert.AreEqual(1, reader.BitsRead);
            reader.u8();
            Assert.AreEqual(9, reader.BitsRead);
            reader.i16();
            Assert.AreEqual(33, reader.BitsRead);
            reader.i32();
            Assert.AreEqual(73, reader.BitsRead);
        }
        public void RandomManyTimes()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();
            var random = new Random(42);

            for (var i = 0; i < i16.MaxValue; i++)
            {
                for (var j = 0; j < BitBufferLimits.MtuIeee802; j++)
                {
                    if (random.Next() % 11 == 0)
                    {
                        writer.i64(long.MaxValue);
                    }
                    if (random.Next() % 7 == 0)
                    {
                        writer.i32(int.MaxValue);
                    }
                    if (random.Next() % 5 == 0)
                    {
                        writer.i16(i16.MaxValue);
                    }
                    if (random.Next() % 3 == 0)
                    {
                        writer.b(true);
                    }
                }


                var result = writer.ToArray();
                reader.CopyFrom(result);
                writer.Reset();
            }
        }
        public void ResetSet()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >(8);

            writer.i32(666);
            var bitsWritten   = writer.BitsWritten;
            var bitsAvailable = writer.BitsAvailable;

            writer.Reset();
            Assert.AreEqual(0, writer.BitsWritten);

            writer.i32(666);
            Assert.AreEqual(bitsWritten, writer.BitsWritten);
            Assert.AreEqual(bitsAvailable, writer.BitsAvailable);
            writer.i32(-273);
            writer.b(true);
            writer.i64(1234567890);
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(writer.ToArray());
            Assert.AreEqual(666, reader.i32());
            var bitsRead = reader.BitsRead;

            reader.i32();
            reader.SetPosition(bitsRead);
            Assert.AreEqual(-273, reader.i32());
            var bitPosition = reader.BitsRead;

            reader.b();
            reader.SetPosition(bitPosition);
            Assert.True(reader.b());
        }
        public void CodePagesBitsRequited()
        {
            var bits      = BitBuffer.BitsRequired("0".AsSpan(), 1);
            var bitBuffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            bitBuffer.c("0".AsSpan());
            Assert.AreEqual(bits, bitBuffer.BitsWritten);
            var result = bitBuffer.ToArray();
        }
        public void NoEncodingsWrite()
        {
            var writer = new BitBufferWriter <RawEncoding <u32ArrayMemory> >();

            writer.i32(i32.MaxValue);
            var data  = writer.ToArray();
            var value = BitConverter.ToInt32(data, 0);

            Assert.AreEqual(i32.MaxValue, value);
        }
示例#6
0
        public void u16ReadWrite()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.u16(u16.MinValue);
            writer.u16(u16.MaxValue / 2);
            writer.u16(u16.MaxValue);
            var data = writer.ToArray();

            writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(u16.MinValue, reader.u16());
            var half = u16.MaxValue / 2;

            Assert.AreEqual(half, reader.u16());
            Assert.AreEqual(u16.MaxValue, reader.u16());
        }
示例#7
0
        public void f64ReadWrite()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.f64(f64.MaxValue);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(f64.MaxValue, reader.f64());
        }
示例#8
0
        public void f32Bits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.f32(1f, 0f, 1f, 1);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(1, reader.f32(0f, 1f, 1));
        }
示例#9
0
        public void f32MinMaxRequired()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.f32(1234.5f, 0, 12345.6f, 0.01f);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(1234.5f, reader.f32(0, 12345.6f, 0.01f));
        }
        public void u8MaxValueWritePeek()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.u8(u8.MaxValue);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(u8.MaxValue, reader.u8Peek());
            Assert.AreEqual(reader.u8Peek(), reader.u8());
        }
示例#11
0
        public void PeekBool()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.b(true);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.True(reader.bPeek());
            Assert.True(reader.b());
        }
        public void RawToEncodedReadWrite()
        {
            var rawWriter = new BitBufferWriter <RawEncoding <u32ArrayMemory> >();

            rawWriter.i32(i32.MaxValue - 13);
            rawWriter.u32(u32.MaxValue - 666);
            var rawReader = new BitBufferReader <RawDecoding <u32ArrayMemory> >();
            var data      = rawWriter.ToArray();

            rawReader.CopyFrom(data);
            Assert.AreEqual(i32.MaxValue - 13, rawReader.i32());
            Assert.AreEqual(u32.MaxValue - 666, rawReader.u32());
        }
示例#13
0
        public void i32BdiffLimits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i32BDiff(0, 1, -1, 10);
            writer.i32BDiff(1, 1, 0, 100);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(1, reader.i32BDiff(0, -1, 10));
            Assert.AreEqual(1, reader.i32BDiff(1, 0, 100));
        }
示例#14
0
        public void f32ReadWrite()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.f32(123.456f);
            writer.Align();
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(123.456f, reader.f32Peek());
            Assert.AreEqual(123.456f, reader.f32());
        }
示例#15
0
        public void u16Bdiff()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.u16BDiff(0, 1);
            writer.u16BDiff(1, 1);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(1, reader.u16BDiff(0));
            Assert.AreEqual(1, reader.u16BDiff(1));
        }
示例#16
0
        public void u16ReadWriteLimits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.u16(2, 0, 10);
            writer.u16(1, 3);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(2, reader.i16(0, 10));
            Assert.AreEqual(1, reader.u16(3));
        }
示例#17
0
        public void BoolWritePeek128()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.b(true);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            for (int i = 0; i < 128; i++)
            {
                Assert.True(reader.bPeek());
            }
        }
        public void u8ArrayReadLimit()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var input  = new byte[writer.Options.U8SpanLengthMax];

            writer.u8(input);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);

            Assert.Throws <ArgumentException>(() => reader.u8(new byte[1]));
            Assert.Throws <ArgumentException>(() => reader.u8(new byte[writer.Options.U8SpanLengthMax], writer.Options.U8SpanLengthMax + 1));
        }
        public void i8ReadWriteLimits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i8(13, 0, 14);
            writer.i8(2, 4);
            var bitsWritten = writer.BitsWritten;
            var data        = writer.ToArray();
            var reader      = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(13, reader.i8(0, 14));
            Assert.AreEqual(2, reader.i8(4));
            Assert.AreEqual(bitsWritten, reader.BitsRead);
        }
示例#20
0
        public void AngleZero()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var angle  = 0f;

            buffer.f32(angle);
            Assert.AreEqual(32, buffer.BitsWritten);
            var data   = buffer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            var result = reader.f32();

            Assert.AreEqual(0f, result, 1);
        }
        public void u32ReadWriteLimits <TEncoder, TDecoder>()
            where TEncoder : struct, ICompression <RawBitWriter <u32ArrayMemory> >
            where TDecoder : struct, IDecompression <RawBitReader <u32ArrayMemory> >
        {
            var writer = new BitBufferWriter <TEncoder>();

            writer.u32(123123, 0, 13213123);
            writer.u32(123, 20);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <TDecoder>();

            reader.CopyFrom(data);
            Assert.AreEqual(123123u, reader.u32(0, 13213123));
            Assert.AreEqual(123u, reader.u32(20));
        }
        private void u32ReadWrite <TEncoder, TDecoder>()
            where TEncoder : struct, ICompression <RawBitWriter <u32ArrayMemory> >
            where TDecoder : struct, IDecompression <BitBufferReader <TDecoder> >
        {
            var writer = new BitBufferWriter <TEncoder>();

            writer.u32(u32.MinValue);
            writer.u32(u32.MaxValue);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <TDecoder>();

            reader.CopyFrom(data);
            Assert.AreEqual(u32.MinValue, reader.u32());
            Assert.AreEqual(u32.MaxValue, reader.u32());
        }
示例#23
0
        public void AngleHalf()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var angle  = 359.1f;

            buffer.f32Half(angle);
            Assert.AreEqual(16, buffer.BitsWritten);
            var data   = buffer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            var result = reader.f32Half();

            Assert.AreEqual(359, result);
        }
示例#24
0
        public void AngleQuantization()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var angle  = 35901u;

            buffer.u32(angle, 0, 36000);
            Assert.AreEqual(16, buffer.BitsWritten);
            var data   = buffer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            var result = reader.f32(0f, 360f, 0.01f);

            Assert.AreEqual(359.01f, result, 2);
        }
        public void ToArrayFromFrom()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >(100);

            writer.i64(i64.MaxValue);
            writer.i32(i32.MaxValue);
            writer.i16(i16.MaxValue);
            var result = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(result);
            Assert.AreEqual(i64.MaxValue, reader.i64());
            Assert.AreEqual(i32.MaxValue, reader.i32());
            Assert.AreEqual(i16.MaxValue, reader.i16());
            reader.CopyFrom(result);
            Assert.AreEqual(i64.MaxValue, reader.i64());
            Assert.AreEqual(i32.MaxValue, reader.i32());
            Assert.AreEqual(i16.MaxValue, reader.i16());
        }
        private void i8ReadWrite <TEncoder, TDecoder>()
            where TEncoder : struct, ICompression <RawBitWriter <u32ArrayMemory> >
            where TDecoder : struct, IDecompression <RawBitReader <u32ArrayMemory> >
        {
            var writer = new BitBufferWriter <TEncoder>();

            writer.i8(i8.MinValue);
            i8 half = i8.MaxValue / 2;

            writer.i8(half);
            writer.i8(i8.MaxValue);
            var data   = writer.ToArray();
            var reader = new BitBufferReader <TDecoder>();

            reader.CopyFrom(data);
            Assert.AreEqual(i8.MinValue, reader.i8());
            Assert.AreEqual(half, reader.i8Peek());
            Assert.AreEqual(half, reader.i8());
            Assert.AreEqual(i8.MaxValue, reader.i8());
        }
        public void u8WritePeekRead256()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >(1000);

            for (int i = 0; i < 513; i++)
            {
                var val = (u8)(u8.MaxValue / (i % 2 + 1));
                writer.u8(val);
            }

            var data   = writer.ToArray();
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            for (int i = 0; i < 513; i++)
            {
                var val = (u8)(u8.MaxValue / (i % 2 + 1));
                Assert.AreEqual(val, reader.u8Peek());
                Assert.AreEqual(val, reader.u8());
            }
        }
        public void u8MinMaxRequired()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            buffer.u8(123, 0, 201);
            buffer.u8(1);
            buffer.u8(42, 1, 43);
            buffer.u8(1, 0, 10);
            buffer.u8(2, 3);
            buffer.u8(0);
            var bitsWritten = buffer.BitsWritten;
            var data        = buffer.ToArray();
            var reader      = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(123, reader.u8(0, 201));
            Assert.AreEqual(1, reader.u8());
            Assert.AreEqual(42, reader.u8(1, 43));
            Assert.AreEqual(1, reader.u8(0, 10));
            Assert.AreEqual(2, reader.u8(3));
            Assert.AreEqual(0, reader.u8());
            Assert.AreEqual(bitsWritten, reader.BitsRead);
        }
示例#29
0
        public void IntMinMaxRequired()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i32(12345, 0, 123456);
            writer.i32(1);
            writer.i32(42, -1, 43);
            writer.i32(1, 0, 10);
            writer.i32(2, 3);
            writer.i32(0);
            var bitsWritten = writer.BitsWritten;
            var data        = writer.ToArray();
            var reader      = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >();

            reader.CopyFrom(data);
            Assert.AreEqual(12345, reader.i32(0, 123456));
            Assert.AreEqual(1, reader.i32());
            Assert.AreEqual(42, reader.i32Peek(-1, 43));
            Assert.AreEqual(42, reader.i32(-1, 43));
            Assert.AreEqual(1, reader.i32(0, 10));
            Assert.AreEqual(2, reader.i32(3));
            Assert.AreEqual(0, reader.i32());
            Assert.AreEqual(bitsWritten, reader.BitsRead);
        }