use jbig2enc::arith::{ArithEncoder, IntProc};
#[test]
fn encode_int_produces_output() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, 0);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_range0_value0() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, 0);
enc.encode_final();
let out0 = enc.to_vec();
let mut enc2 = ArithEncoder::new();
enc2.encode_int(IntProc::Dh, 0);
enc2.encode_final();
assert_eq!(out0, enc2.to_vec());
}
#[test]
fn encode_int_range0_different_values() {
let mut enc0 = ArithEncoder::new();
enc0.encode_int(IntProc::Dh, 0);
enc0.encode_final();
let mut enc3 = ArithEncoder::new();
enc3.encode_int(IntProc::Dh, 3);
enc3.encode_final();
assert_ne!(enc0.to_vec(), enc3.to_vec());
}
#[test]
fn encode_int_range1_minus1() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, -1);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_range2_minus2() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, -2);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_range2_minus2_vs_minus3() {
let mut enc2 = ArithEncoder::new();
enc2.encode_int(IntProc::Dh, -2);
enc2.encode_final();
let mut enc3 = ArithEncoder::new();
enc3.encode_int(IntProc::Dh, -3);
enc3.encode_final();
assert_ne!(enc2.to_vec(), enc3.to_vec());
}
#[test]
fn encode_int_range3_value4() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, 4);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_max_value() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, 2_000_000_000);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_min_value() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Dh, -2_000_000_000);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_int_different_procs_independent() {
let mut enc_dh = ArithEncoder::new();
enc_dh.encode_int(IntProc::Dh, 5);
enc_dh.encode_int(IntProc::Dh, 5);
enc_dh.encode_final();
let mut enc_dw = ArithEncoder::new();
enc_dw.encode_int(IntProc::Dw, 5);
enc_dw.encode_int(IntProc::Dw, 5);
enc_dw.encode_final();
assert_eq!(enc_dh.to_vec(), enc_dw.to_vec());
}
#[test]
fn encode_int_multiple_values() {
let mut enc = ArithEncoder::new();
for v in [0, 1, 2, 3, -1, 4, 19, -4, -19, 20, 83, -20, -83] {
enc.encode_int(IntProc::Dh, v);
}
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_oob_produces_output() {
let mut enc = ArithEncoder::new();
enc.encode_oob(IntProc::Fs);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_oob_and_int_interleaved() {
let mut enc = ArithEncoder::new();
enc.encode_int(IntProc::Fs, 0);
enc.encode_oob(IntProc::Fs);
enc.encode_int(IntProc::Fs, 1);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_oob_twice_different_output() {
let mut enc1 = ArithEncoder::new();
enc1.encode_oob(IntProc::Fs);
enc1.encode_final();
let mut enc2 = ArithEncoder::new();
enc2.encode_oob(IntProc::Fs);
enc2.encode_oob(IntProc::Fs);
enc2.encode_final();
assert!(!enc1.to_vec().is_empty());
assert!(!enc2.to_vec().is_empty());
}
#[test]
fn encode_iaid_produces_output() {
let mut enc = ArithEncoder::new();
enc.encode_iaid(4, 0); enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_iaid_different_values() {
let mut enc0 = ArithEncoder::new();
enc0.encode_iaid(4, 0);
enc0.encode_final();
let mut enc1 = ArithEncoder::new();
enc1.encode_iaid(4, 1);
enc1.encode_final();
assert_ne!(enc0.to_vec(), enc1.to_vec());
}
#[test]
fn encode_iaid_zero_codelen() {
let mut enc = ArithEncoder::new();
enc.encode_iaid(0, 0);
enc.encode_final();
let mut enc_empty = ArithEncoder::new();
enc_empty.encode_final();
assert_eq!(enc.to_vec(), enc_empty.to_vec());
}
#[test]
fn encode_iaid_repeated() {
let mut enc = ArithEncoder::new();
enc.encode_iaid(4, 5);
enc.encode_iaid(4, 5);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}
#[test]
fn encode_iaid_max_value_8bit() {
let mut enc = ArithEncoder::new();
enc.encode_iaid(8, 255);
enc.encode_final();
assert!(!enc.to_vec().is_empty());
}