use std::collections::HashSet; use varisat::{solver::Solver, Lit}; macro_rules! test_cnf { ($name:ident, $result:expr) => { #[test] fn $name() { let cnf = include_bytes!(concat!("cnfs/", stringify!($name), ".cnf")); let mut solver = Solver::new(); solver.enable_self_checking(); let formula = varisat_dimacs::DimacsParser::parse(&cnf[..]).expect("parsing failed"); solver.add_formula(&formula); let result = $result; assert_eq!(solver.solve().expect("solve failed"), result); if result { let model: HashSet = solver.model().unwrap().into_iter().collect(); for clause in formula.iter() { assert!(clause.iter().any(|&lit| model.contains(&lit))); } } } }; } test_cnf!(sgen1_unsat_57_0, false); test_cnf!(sgen1_sat_90_0, true);