mod common;
use tinyjuice::reduce_execution_with_rules;
use tinyjuice::rules::load_builtin_rules;
use tinyjuice::types::ReduceOptions;
#[test]
fn all_reduce_fixtures_produce_expected_output() {
let rules = load_builtin_rules();
let mut failures = Vec::new();
for (path, fixture) in common::load_reduce_fixtures() {
let result =
reduce_execution_with_rules(fixture.input.clone(), &rules, &ReduceOptions::default());
let got = result.inline_text.trim_end();
let want = fixture.expected_output.trim_end();
if got != want {
failures.push(format!(
"fixture {} ({}):\n family: {}\n expected:\n---\n{}\n---\n got:\n---\n{}\n---",
path.file_name().unwrap().to_string_lossy(),
fixture.description,
result.classification.family,
want,
got,
));
}
}
assert!(
failures.is_empty(),
"{} fixture(s) failed:\n\n{}",
failures.len(),
failures.join("\n\n")
);
}
#[test]
fn fixtures_report_shrinkage_stats_consistently() {
let rules = load_builtin_rules();
for (path, fixture) in common::load_reduce_fixtures() {
let result = reduce_execution_with_rules(fixture.input, &rules, &ReduceOptions::default());
assert!(
result.stats.reduced_chars <= result.stats.raw_chars,
"{}: reduced_chars ({}) exceeds raw_chars ({})",
path.display(),
result.stats.reduced_chars,
result.stats.raw_chars,
);
}
}