use crate::bitreader::BitReader;
#[test]
fn read_bits_basic() {
let data = [0xA5];
let mut r = BitReader::new(&data);
assert_eq!(r.read_bit(), 1);
assert_eq!(r.read_bit(), 0);
assert_eq!(r.read_bit(), 1);
assert_eq!(r.read_bit(), 0);
assert_eq!(r.read_bit(), 0);
assert_eq!(r.read_bit(), 1);
assert_eq!(r.read_bit(), 0);
assert_eq!(r.read_bit(), 1);
assert_eq!(r.read_bit(), 0);
}
#[test]
fn read_across_bytes() {
let data = [0xFF, 0x00];
let mut r = BitReader::new(&data);
let val = r.read_bits(12);
assert_eq!(val, 0xFF0);
let val = r.read_bits(4);
assert_eq!(val, 0x0);
}
#[test]
fn read_byte_aligned() {
let data = [0xAB, 0xCD];
let mut r = BitReader::new(&data);
assert_eq!(r.read_byte(), 0xAB);
assert_eq!(r.read_byte(), 0xCD);
}
#[test]
fn align_to_byte() {
let data = [0xFF, 0xAB];
let mut r = BitReader::new(&data);
r.read_bits(3);
r.align();
assert_eq!(r.read_byte(), 0xAB);
}
#[test]
fn read_bits_multi_byte() {
let data = [0x12, 0x34, 0x56, 0x78];
let mut r = BitReader::new(&data);
let val = r.read_bits(32);
assert_eq!(val, 0x12345678);
}
#[test]
fn eof_detection() {
let data = [0xFF];
let mut r = BitReader::new(&data);
assert!(!r.is_eof());
r.read_byte();
assert!(r.is_eof());
}