use crate::common::assert_unsat_unique;
use backtrack::problems::CountUp;
use backtrack::solve::IterSolveExt;
use backtrack::solvers::IterSolveNaive;
#[test]
fn count_up_search_sat() {
let asc = CountUp::new(3, 0..4);
let solver = IterSolveNaive::new(&asc);
let mut sats = solver.sat_iter();
assert_eq!(sats.next(), Some(vec![0, 1, 2]));
assert_eq!(sats.next(), Some(vec![0, 1, 3]));
assert_eq!(sats.next(), Some(vec![0, 2, 3]));
assert_eq!(sats.next(), Some(vec![1, 2, 3]));
assert_eq!(sats.next(), None);
}
#[test]
fn total_sum_unsat_unique() {
let asc = CountUp::new(3, 0..4);
let unsats = IterSolveNaive::new(&asc).unsat_iter();
assert_unsat_unique(unsats);
}
#[test]
fn count_up_search_nosat() {
let asc = CountUp::new(4, 0..3);
let solver = IterSolveNaive::new(&asc);
let unsats: Vec<_> = solver.solution_iter().collect();
assert_eq!(unsats.len(), 17);
}