use arris_debug::{differential, prop};
#[test]
fn arris_and_the_oracle_agree_on_drawn_recipes() {
let run = differential::run(&prop::seed(), differential::cases())
.unwrap_or_else(|e| panic!("the differential could not run: {e}"));
println!("{}", run.report());
assert!(
run.failures.is_empty(),
"{}\n{} failing recipes:\n\n{}",
run.report(),
run.failures.len(),
run.failures_text()
);
}
#[test]
fn arris_and_the_oracle_agree_on_turned_parts() {
let run = differential::run_over(
"turned",
arris_debug::prop::recipe::turned_recipe(),
&prop::seed(),
differential::cases(),
)
.unwrap_or_else(|e| panic!("the differential could not run: {e}"));
println!("{}", run.report());
assert!(
run.failures.is_empty(),
"{}\n{} failing recipes:\n\n{}",
run.report(),
run.failures.len(),
run.failures_text()
);
let histogram = run.histogram();
let count = |class: &str| histogram.get(class).copied().unwrap_or(0);
assert_eq!(
count("ArrisRefuses"),
0,
"Arris refuses a turned part Open CASCADE builds\n{}",
run.report()
);
assert!(
count("Agree") > 0,
"no turned part compared\n{}",
run.report()
);
}
#[test]
fn arris_and_the_oracle_agree_on_multi_tool_booleans() {
let run = differential::run_over(
"multi-tool",
arris_debug::prop::recipe::multi_tool_recipe(),
&prop::seed(),
differential::cases(),
)
.unwrap_or_else(|e| panic!("the differential could not run: {e}"));
println!("{}", run.report());
assert!(
run.failures.is_empty(),
"{}\n{} failing recipes:\n\n{}",
run.report(),
run.failures.len(),
run.failures_text()
);
}
#[test]
fn arris_and_the_oracle_agree_on_splits() {
let run = differential::run_over(
"split",
arris_debug::prop::recipe::split_recipe(),
&prop::seed(),
differential::cases(),
)
.unwrap_or_else(|e| panic!("the differential could not run: {e}"));
println!("{}", run.report());
assert!(
run.failures.is_empty(),
"{}\n{} failing recipes:\n\n{}",
run.report(),
run.failures.len(),
run.failures_text()
);
}
#[test]
fn an_oracle_with_no_solid_holds_arris_to_additivity() {
use arris_debug::{differential::Outcome, fixtures};
let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/oracle-wrong");
for slug in [
"revolve-pair-fuse-oracle-no-solid",
"revolve-triple-fuse-common-oracle-no-solid",
"extrude-mirrored-revolve-fuse-oracle-drops-an-operand",
] {
let fixture = fixtures::load(&root.join(slug)).unwrap();
let outcome = differential::judge(slug, &fixture.recipe, Ok(&fixture));
assert!(
matches!(&outcome, Outcome::OracleRefuses(why) if why.contains("additive")),
"{slug}: {outcome}"
);
}
}