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

            writer.i16(i16.MinValue);
            writer.i16(i16.MinValue / 2);
            writer.i16(0);
            i16 half = i16.MaxValue / 2;

            writer.i16(half);
            writer.i16(i16.MaxValue);
            writer.Align();
            var allocated = new byte[i16.MaxValue];

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

            reader.CopyFrom(allocated);
            Assert.AreEqual(i16.MinValue, reader.i16());
            Assert.AreEqual(i16.MinValue / 2, reader.i16());
            Assert.AreEqual(0, reader.i16());
            Assert.AreEqual(half, reader.i16Peek());
            Assert.AreEqual(half, reader.i16());
            Assert.AreEqual(i16.MaxValue, reader.i16());
        }
예제 #2
0
        public void ShortZeroMax4()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i16(short.MaxValue, 0, short.MaxValue);
            writer.i16(short.MaxValue, 0, short.MaxValue);
            writer.i16(short.MaxValue, 0, short.MaxValue);
            writer.i16(short.MaxValue, 0, short.MaxValue);
            Assert.AreEqual(8, writer.LengthWritten);
        }
예제 #3
0
        public void ShortMinMax4()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            buffer.i16(short.MaxValue, short.MinValue, short.MaxValue);
            buffer.i16(short.MaxValue, short.MinValue, short.MaxValue);
            buffer.i16(short.MaxValue, short.MinValue, short.MaxValue);
            buffer.i16(short.MaxValue, short.MinValue, short.MaxValue);
            Assert.AreEqual(8, buffer.LengthWritten);
        }
예제 #4
0
        public void ByteShort0()
        {
            var buffer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            buffer.i16(0);
            buffer.i16(0);
            buffer.i16(0);
            buffer.i16(0);
            Assert.AreEqual(4, buffer.LengthWritten);
        }
예제 #5
0
        public void i16ReadWriteLimits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i16(-1, -2, 2);
            writer.i16(-1, 4);
            var allocated = new byte[i16.MaxValue];

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

            reader.CopyFrom(allocated);
            Assert.AreEqual(-1, reader.i16(-2, 2));
            Assert.AreEqual(-1, reader.i16(4));
        }
        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 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);
        }
예제 #8
0
        public void ShortMax4Divided()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            for (var i = 0; i < 8; i++)
            {
                writer.i16(short.MaxValue / 3);
            }

            Assert.AreEqual(24, writer.LengthWritten);
        }
        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());
        }
        public void ToSpanFromFrom()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >(100);

            writer.i64(i64.MaxValue);
            writer.i32(i32.MaxValue);
            writer.i16(i16.MaxValue);
            Span <byte>         span = new byte[writer.LengthWritten];
            ReadOnlySpan <byte> read = span;

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

            reader.CopyFrom(read);
            Assert.AreEqual(i64.MaxValue, reader.i64());
            Assert.AreEqual(i32.MaxValue, reader.i32());
            Assert.AreEqual(i16.MaxValue, reader.i16());
            reader.CopyFrom(read);
            Assert.AreEqual(i64.MaxValue, reader.i64());
            Assert.AreEqual(i32.MaxValue, reader.i32());
            Assert.AreEqual(i16.MaxValue, reader.i16());
        }
예제 #11
0
        public void i8ReadWriteSmallLimits()
        {
            var writer = new BitBufferWriter <SevenBitEncoding <u32ArrayMemory> >();

            writer.i32(500);
            writer.i16(1);
            writer.i32(0);
            writer.u8(0, 0, 4);
            writer.u8(1, 0, 4);
            writer.u8(2, 0, 4);
            writer.u8(3, 0, 4);
            writer.u8(4, 0, 4);
            writer.i32(0, 0, 4);
            writer.i32(1, 0, 4);
            writer.i32(2, 0, 4);
            writer.i32(3, 0, 4);
            writer.i32(4, 0, 4);
            #if !NO_EXCEPTIONS
            Assert.Throws <System.ArgumentOutOfRangeException>(() => writer.u8(5, 0, 4));
            Assert.Throws <System.ArgumentOutOfRangeException>(() => writer.u8(255, 0, 4));
            Assert.Throws <System.ArgumentOutOfRangeException>(() => writer.i32(5, 0, 4));
            Assert.Throws <System.ArgumentOutOfRangeException>(() => writer.i32(255, 0, 4));
            #endif
        }