use kurbo::BezPath; use libtest_mimic::{Arguments, Failed, Trial}; use linesweeper::binary_op; use std::path::{Path, PathBuf}; fn main() { let args = Arguments::from_args(); let tests = regression_tests(); libtest_mimic::run(&args, tests).exit(); } fn regression_tests() -> Vec { let ws = std::env::var("CARGO_MANIFEST_DIR").unwrap(); let paths = glob::glob(&format!("{ws}/tests/regression/**/*.txt")).unwrap(); paths .into_iter() .map(|p| { let p = p.unwrap(); let name = input_path_base(&p).display().to_string(); Trial::test(name, || generate_regression_test(p)) }) .collect() } fn input_path_base(input_path: &Path) -> &Path { let ws = std::env::var("CARGO_MANIFEST_DIR").unwrap(); let base = format!("{ws}/tests/regression"); input_path.strip_prefix(base).unwrap() } fn generate_regression_test(path: PathBuf) -> Result<(), Failed> { let input = std::fs::read_to_string(&path).unwrap(); let lines: Vec<_> = input.lines().collect(); assert_eq!(lines.len(), 2); let p0 = BezPath::from_svg(lines[0]).unwrap(); let p1 = BezPath::from_svg(lines[1]).unwrap(); binary_op( &p0, &p1, linesweeper::FillRule::EvenOdd, linesweeper::BinaryOp::Xor, ) .unwrap(); Ok(()) }