#![cfg(not(miri))]
#![allow(
clippy::unwrap_used,
clippy::expect_used,
reason = "test code: a failing unwrap is a failing test"
)]
use urna_format::encoding::{
decode_payload_with_dict, decode_zstd_dict_payload, encode_zstd_dict, train_dict,
};
use urna_format::layout::SECTION_ENCODING_ZSTD_DICT;
fn framed_and_dict() -> (Vec<u8>, Vec<u8>) {
let texts: Vec<String> = (0..200)
.map(|i| format!("noticia curta similar numero {} no dia {}", i % 13, i))
.collect();
let mut su = texts.clone();
su.sort_unstable();
su.dedup();
let dict = train_dict(&su).unwrap();
let framed = encode_zstd_dict(&texts, &dict).unwrap();
(framed, dict)
}
#[test]
fn empty_payload_errors() {
let (_, dict) = framed_and_dict();
assert!(decode_zstd_dict_payload(&[], &dict).is_err());
}
#[test]
fn missing_dict_via_dispatch_errors() {
let (framed, _) = framed_and_dict();
let res = decode_payload_with_dict(SECTION_ENCODING_ZSTD_DICT, &framed, None);
assert!(res.is_err(), "dict-framed section with no dict must error");
}
#[test]
fn oversized_or_garbage_dict_errors_no_panic() {
let (framed, _) = framed_and_dict();
let garbage = vec![0xABu8; 64 * 1024];
let _ = decode_zstd_dict_payload(&framed, &garbage); let _ = decode_zstd_dict_payload(&framed, &[]);
}
#[test]
fn prefix_truncation_fuzz_never_panics() {
let (framed, dict) = framed_and_dict();
for cut in 0..framed.len() {
let _ = decode_zstd_dict_payload(&framed[..cut], &dict);
}
}
#[test]
fn bad_kind_byte_errors() {
let (mut framed, dict) = framed_and_dict();
framed[0] = 0xFE; assert!(decode_zstd_dict_payload(&framed, &dict).is_err());
}