public void u8VerySmallReader()
        {
            var smallReader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(1);

            smallReader.CopyFrom(new u8[4]);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            Assert.True(smallReader.BitsRead > 0);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            smallReader.u8(u8.MinValue, u8.MaxValue);
            Assert.Throws <ArgumentOutOfRangeException>(() => smallReader.u8(u8.MinValue, u8.MaxValue));
        }
        public void ToFromArrayPosition()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.u8(13);
            writer.i64(i64.MaxValue);
            writer.Align();
            var allocated = new byte[ushort.MaxValue];

            writer.ToSpan(new Span <u8>(allocated, 10, 100));
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(allocated.Length);

            reader.CopyFrom(new ReadOnlySpan <u8>(allocated, 10, 100));
            Assert.AreEqual(13, reader.u8());
            Assert.AreEqual(long.MaxValue, reader.i64());
        }
Esempio n. 3
0
        public void SimpleStructReadWrite()
        {
            var buffer   = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var expected = new SimpleStruct {
                a = 1.2f, b = 123, c = byte.MaxValue, d = ushort.MaxValue
            };

            buffer.block(expected);
            buffer.Align();
            var allocated = new byte[ushort.MaxValue];

            buffer.ToSpan(allocated);
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(allocated.Length);

            reader.CopyFrom(allocated);
            Assert.AreEqual(expected, reader.block <SimpleStruct>());
        }
Esempio n. 4
0
        public void IntReadWrite()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i32(int.MinValue);
            writer.i32(0);
            writer.i32(int.MaxValue);
            writer.Align();
            var allocated = new byte[ushort.MaxValue];

            writer.ToSpan(allocated);
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(allocated.Length);

            reader.CopyFrom(allocated);
            Assert.AreEqual(int.MinValue, reader.i32());
            Assert.AreEqual(0, reader.i32());
            Assert.AreEqual(int.MaxValue, reader.i32());
        }
Esempio n. 5
0
        public void TrueFalseTrueReadWrite()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.b(true);
            writer.b(false);
            writer.b(true);
            writer.Align();
            var allocated = new byte[ushort.MaxValue];

            writer.ToSpan(allocated);
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(allocated.Length);

            reader.CopyFrom(allocated);
            Assert.True(reader.b());
            Assert.False(reader.b());
            Assert.True(reader.b());
        }
Esempio n. 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());
        }
Esempio n. 7
0
        public void BoolWritePeekRead1024()
        {
            var write = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            for (int i = 0; i < 1024; i++)
            {
                write.b(true);
            }

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

            reader.CopyFrom(data);
            for (int i = 0; i < 1024; i++)
            {
                Assert.True(reader.bPeek());
                Assert.True(reader.b());
            }
        }
        public void u8ArrayWriteRead()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();
            var input  = new byte[] { 1, 2, 3, 4, 5 };

            writer.u8(input);
            writer.Align();
            var allocated = new u8[ushort.MaxValue];

            writer.ToSpan(allocated);
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(allocated.Length);

            reader.CopyFrom(allocated);
            var output     = new byte[5];
            var lengthPeek = reader.u8SpanLengthPeek();
            var length     = reader.u8(output);

            Assert.AreEqual(lengthPeek, length);
            Assert.AreEqual(input, output);
        }
        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 RawToEncoded()
        {
            var rawWriter = new BitBufferWriter <RawEncoding <u32ArrayMemory> >();

            rawWriter.i32(i32.MaxValue - 13);
            rawWriter.u32(u32.MaxValue - 666);
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >(rawWriter);

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

            rawReader.CopyFrom(data);
            Assert.AreEqual(i32.MaxValue - 13, rawReader.i32());
            Assert.AreEqual(u32.MaxValue - 666, rawReader.u32());
            var reader = new BitBufferReader <SevenBitDecoding <u32ArrayMemory> >(rawReader);

            Assert.AreEqual(i32.MaxValue - 13, reader.i32());
            Assert.AreEqual(u32.MaxValue - 666, reader.u32());
        }
Esempio n. 11
0
        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());
            }
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
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);
        }