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