#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
#![allow(clippy::missing_panics_doc)]
mod parity_support;
use parity_support::{Case, Expect, Op, Oracle, Prim, Xf, run_corpus};
const NONE: &[Xf] = &[];
const HALF_X: &[Xf] = &[Xf::Translate(0.5, 0.0, 0.0)];
const STACK_Z: &[Xf] = &[Xf::Translate(0.0, 0.0, 1.0)];
const INSET: &[Xf] = &[Xf::Translate(0.5, 0.5, 0.5)];
const CORNER: &[Xf] = &[Xf::Translate(0.5, 0.5, 0.0)];
const UNIT_SQUARE: &[(f64, f64)] = &[(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)];
const CUBE: Prim = Prim::Box(1.0, 1.0, 1.0);
#[test]
fn planar_boolean_corpus() {
#[rustfmt::skip]
let cases: &[Case] = &[
Case { name: "identical_cubes_fuse_area", a: (CUBE, NONE), b: (CUBE, NONE), op: Op::Fuse, oracle: Oracle::Area(6.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "identical_cubes_fuse_volume", a: (CUBE, NONE), b: (CUBE, NONE), op: Op::Fuse, oracle: Oracle::Volume(1.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "identical_cubes_common_area", a: (CUBE, NONE), b: (CUBE, NONE), op: Op::Common, oracle: Oracle::Area(6.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "identical_cubes_cut_empty", a: (CUBE, NONE), b: (CUBE, NONE), op: Op::Cut, oracle: Oracle::Empty, tol: 0.0, expect: Expect::Pass },
Case { name: "identical_cubes_cutrev_empty", a: (CUBE, NONE), b: (CUBE, NONE), op: Op::CutRev, oracle: Oracle::Empty, tol: 0.0, expect: Expect::Pass },
Case { name: "halfx_fuse_area", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::Fuse, oracle: Oracle::Area(8.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "halfx_fuse_volume", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::Fuse, oracle: Oracle::Volume(1.5), tol: 1e-6, expect: Expect::Pass },
Case { name: "halfx_cut_area", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::Cut, oracle: Oracle::Area(4.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "halfx_common_area", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::Common, oracle: Oracle::Area(4.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "halfx_common_volume", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::Common, oracle: Oracle::Volume(0.5), tol: 1e-6, expect: Expect::Pass },
Case { name: "halfx_cutrev_area", a: (CUBE, NONE), b: (CUBE, HALF_X), op: Op::CutRev, oracle: Oracle::Area(4.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "facez_fuse_area", a: (CUBE, NONE), b: (CUBE, STACK_Z), op: Op::Fuse, oracle: Oracle::Area(10.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "facez_fuse_volume", a: (CUBE, NONE), b: (CUBE, STACK_Z), op: Op::Fuse, oracle: Oracle::Volume(2.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "facez_cut_unchanged_area", a: (CUBE, NONE), b: (CUBE, STACK_Z), op: Op::Cut, oracle: Oracle::Area(6.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "facez_common_empty", a: (CUBE, NONE), b: (CUBE, STACK_Z), op: Op::Common, oracle: Oracle::Empty, tol: 0.0, expect: Expect::Pass },
Case { name: "contain_fuse_area", a: (Prim::Box(2.0, 2.0, 2.0), NONE), b: (CUBE, INSET), op: Op::Fuse, oracle: Oracle::Area(24.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "contain_common_area", a: (Prim::Box(2.0, 2.0, 2.0), NONE), b: (CUBE, INSET), op: Op::Common, oracle: Oracle::Area(6.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "contain_cut_hollow_area", a: (Prim::Box(2.0, 2.0, 2.0), NONE), b: (CUBE, INSET), op: Op::Cut, oracle: Oracle::Area(30.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "contain_cut_hollow_volume", a: (Prim::Box(2.0, 2.0, 2.0), NONE), b: (CUBE, INSET), op: Op::Cut, oracle: Oracle::Volume(7.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "contain_cutrev_empty", a: (Prim::Box(2.0, 2.0, 2.0), NONE), b: (CUBE, INSET), op: Op::CutRev, oracle: Oracle::Empty, tol: 0.0, expect: Expect::Pass },
Case { name: "corner_fuse_area", a: (CUBE, NONE), b: (CUBE, CORNER), op: Op::Fuse, oracle: Oracle::Area(9.5), tol: 1e-6, expect: Expect::Gap("corner interpenetration: fuse over-counts overlap") },
Case { name: "corner_fuse_volume", a: (CUBE, NONE), b: (CUBE, CORNER), op: Op::Fuse, oracle: Oracle::Volume(1.75), tol: 1e-6, expect: Expect::Gap("corner interpenetration: fuse volume 11/6 vs 7/4") },
Case { name: "corner_common_area", a: (CUBE, NONE), b: (CUBE, CORNER), op: Op::Common, oracle: Oracle::Area(2.5), tol: 1e-6, expect: Expect::Pass },
Case { name: "corner_cut_notch_area", a: (CUBE, NONE), b: (CUBE, CORNER), op: Op::Cut, oracle: Oracle::Area(5.5), tol: 1e-6, expect: Expect::Gap("corner interpenetration: notched cut has a spurious face (+0.25 area)") },
Case { name: "corner_cut_notch_volume", a: (CUBE, NONE), b: (CUBE, CORNER), op: Op::Cut, oracle: Oracle::Volume(0.75), tol: 1e-6, expect: Expect::Pass },
Case { name: "prism_box_halfx_fuse_area", a: (Prim::PrismZ(UNIT_SQUARE, 1.0), NONE), b: (CUBE, HALF_X), op: Op::Fuse, oracle: Oracle::Area(8.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "prism_box_identical_common_area", a: (Prim::PrismZ(UNIT_SQUARE, 1.0), NONE), b: (CUBE, NONE), op: Op::Common, oracle: Oracle::Area(6.0), tol: 1e-6, expect: Expect::Pass },
Case { name: "sphere_unit_box_fuse_area", a: (Prim::Sphere(1.0), NONE), b: (CUBE, NONE), op: Op::Fuse, oracle: Oracle::Area(14.6394), tol: 2e-2, expect: Expect::Gap("curved calibration probe") },
];
run_corpus(cases);
}