예제 #1
0
        public void u8WriteOutOfRange()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            Assert.Throws <ArgumentOutOfRangeException>(() => writer.u8(125, 0, 123));
            Assert.Throws <ArgumentOutOfRangeException>(() => writer.u8(1, 2, 123));
            Assert.Throws <ArgumentException>(() => writer.u8(123, 2));
            Assert.Throws <ArgumentException>(() => writer.u8(44, 55, 33));
        }
예제 #2
0
        public void ByteMin3()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            buffer.u8(byte.MinValue);
            buffer.u8(byte.MinValue);
            buffer.u8(byte.MinValue);
            Assert.AreEqual(3, buffer.LengthWritten);
        }
        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);
        }
예제 #4
0
        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());
        }
예제 #5
0
        public void ByteHalf()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            buffer.u8(byte.MaxValue / 2);
            Assert.AreEqual(8, buffer.LengthWritten);
        }
예제 #6
0
        public void u8WriteRead()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

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

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

            reader.CopyFrom(allocated);
            Assert.AreEqual(u8.MaxValue, reader.u8());
        }
        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());
        }
예제 #8
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());
            }
        }
예제 #9
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);
        }