#[cfg(test)]
mod tests {
use aho_corasick::{AhoCorasick, MatchKind};
use libfse::{FseMap, FseOpcode, FseScanner, Rule};
#[test]
fn test_differential_parity_vs_std_aho() {
let patterns = vec![
"fox", "brown", "jumps", "dog", "lazy", "quick", "the", "over"
];
let text = "the quick brown fox jumps over the lazy dog";
let ac = AhoCorasick::builder()
.match_kind(MatchKind::Standard) .build(&patterns)
.unwrap();
let mut expected_hits = vec![false; patterns.len()];
for mat in ac.find_iter(text) {
let pid = mat.pattern().as_usize();
expected_hits[pid] = true;
}
let rules: Vec<Rule> = patterns.iter().enumerate().map(|(i, &p)| {
Rule::new(p, FseOpcode::Record(i as u32))
}).collect();
let map = FseMap::compile(rules).unwrap();
let mut scanner = FseScanner::new(&map).unwrap();
scanner.scan(text.as_bytes()).expect("Scan failed");
let expected_count = expected_hits.iter().filter(|&&h| h).count();
let actual_count = scanner.scan(text.as_bytes()).unwrap().rules_recorded;
assert_eq!(actual_count as usize, expected_count,
"LibFSE recorded {} unique rules, Oracle found {}. Divergence!", actual_count, expected_count);
}
}