use super::*;
#[test]
fn add_bits_single_symbol_emits_correct_byte() {
let mut out: Vec<u8> = Vec::new();
let mut s = HufCStream::new(&mut out, 64).expect("init ok");
let elt = pack_huf_celt(0b1011, 4);
s.add_bits::<false>(elt, 0);
let n = s.close();
assert!(n > 0);
assert_eq!(out.len(), 1);
assert_eq!(
out[0], 0x1B,
"first emitted byte must mirror upstream zstd's HUF_addBits + \
HUF_endMark packing collapsed to a 5-bit prefix 0b11011",
);
}
#[test]
fn add_bits_overflowing_container_flushes_correctly() {
let mut out: Vec<u8> = Vec::new();
let mut s = HufCStream::new(&mut out, 256).expect("init ok");
for i in 0..8 {
let elt = pack_huf_celt(i as u32, 8);
s.add_bits::<false>(elt, 0);
}
s.flush_bits::<false>();
assert_eq!(s.cursor - s.start_idx, 8);
assert_eq!(s.pending_bits(), 0);
let n = s.close();
assert!(n >= 8);
}
#[test]
fn encode_unrolled_dual_container_size_is_deterministic() {
let mut out: Vec<u8> = Vec::new();
let mut s = HufCStream::new(&mut out, 64).expect("init ok");
let table = [pack_huf_celt(0b1010, 4); 256];
let data = [0u8; 16];
s.encode_unrolled::<4, false, false>(&table, &data);
let n = s.close();
assert_eq!(
n, 9,
"16 symbols * 4 bits + 1 end-mark bit = 65 bits = 9 bytes"
);
}