sdec-bitstream 0.8.0

Low-level bit packing primitives for the sdec codec
Documentation
use bitstream::{BitReader, BitVecWriter, BitWriter};

#[test]
fn bounded_writer_roundtrip_bits() {
    let mut buf = [0u8; 8];
    let mut writer = BitWriter::new(&mut buf);
    writer.write_bits(0b1010, 4).unwrap();
    writer.write_bits(0xAB, 8).unwrap();
    let bytes_used = writer.finish();

    let mut reader = BitReader::new(&buf[..bytes_used]);
    assert_eq!(reader.read_bits(4).unwrap(), 0b1010);
    assert_eq!(reader.read_bits(8).unwrap(), 0xAB);
}

#[test]
fn vec_writer_roundtrip_mixed() {
    let mut writer = BitVecWriter::new();
    writer.write_bit(true);
    writer.write_bits(0b1010, 4).unwrap();
    writer.align_to_byte();
    writer.write_u16_aligned(0xBEEF).unwrap();
    writer.write_varu32(300).unwrap();
    writer.write_vars32(-1).unwrap();
    let bytes = writer.finish();

    let mut reader = BitReader::new(&bytes);
    assert!(reader.read_bit().unwrap());
    assert_eq!(reader.read_bits(4).unwrap(), 0b1010);
    reader.align_to_byte().unwrap();
    assert_eq!(reader.read_u16_aligned().unwrap(), 0xBEEF);
    assert_eq!(reader.read_varu32().unwrap(), 300);
    assert_eq!(reader.read_vars32().unwrap(), -1);
}