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()); }
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>()); }
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()); }
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()); }
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()); }
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()); }
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); }
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); }