use vyre_conform::specs::string::tokenize::{tokenize_cpu, KAT};
#[test]
fn every_kat_matches_cpu_reference() {
for (i, v) in KAT.iter().enumerate() {
let actual = tokenize_cpu(v.input);
assert_eq!(
actual.as_slice(),
v.expected,
"KAT #{i} mismatch for input {:?} ({}): expected {:?}, got {:?}",
v.input,
v.source,
v.expected,
actual
);
}
}
#[test]
fn kat_covers_every_state() {
let mut seen = [false; 8];
for v in KAT {
for chunk in v.expected.chunks_exact(4) {
let state = chunk[0] as usize;
if state < 8 {
seen[state] = true;
}
}
}
let state_names = [
"String",
"Identifier",
"Number",
"Comment",
"Regex",
"Operator",
"Whitespace",
"Unknown",
];
for (state, was_seen) in seen.iter().enumerate() {
assert!(
*was_seen,
"KAT coverage gap: no vector exercises state {state} ({}); expand KAT",
state_names[state]
);
}
}