use crate::arith::ArithState;
use crate::arith_int::ArithIntCtx;
const TEST_STREAM: &[u8] = &[
0x84, 0xC7, 0x3B, 0xFC, 0xE1, 0xA1, 0x43, 0x04, 0x02, 0x20, 0x00, 0x00,
0x41, 0x0D, 0xBB, 0x86, 0xF4, 0x31, 0x7F, 0xFF, 0x88, 0xFF, 0x37, 0x47,
0x1A, 0xDB, 0x6A, 0xDF, 0xFF, 0xAC,
0x00, 0x00,
];
#[test]
fn decode_integers() {
let mut as_ = ArithState::new(TEST_STREAM).unwrap();
let mut ctx = ArithIntCtx::new();
let mut values = Vec::new();
for _ in 0..10 {
match ctx.decode(&mut as_) {
Ok(Some(v)) => values.push(v),
Ok(None) => break, Err(_) => break,
}
}
let mut as2 = ArithState::new(TEST_STREAM).unwrap();
let mut ctx2 = ArithIntCtx::new();
for (i, &expected) in values.iter().enumerate() {
let v = ctx2.decode(&mut as2).unwrap();
assert_eq!(v, Some(expected), "integer mismatch at index {i}");
}
}
#[test]
fn decode_produces_values_or_oob() {
let mut as_ = ArithState::new(TEST_STREAM).unwrap();
let mut ctx = ArithIntCtx::new();
for _ in 0..5 {
let result = ctx.decode(&mut as_);
assert!(result.is_ok());
}
}
#[test]
fn fresh_context_is_zeroed() {
let ctx = ArithIntCtx::new();
let ctx2 = ArithIntCtx::new();
let _ = (ctx, ctx2);
}