use crate::common::assert_unsat_unique;
use backtrack::problems::TotalSum;
use backtrack::solve::IterSolveExt;
use backtrack::solvers::IterSolveCached;
#[test]
fn total_sum_search_sat() {
let sum = TotalSum::new(3, &[2, 0], 3);
let solver = IterSolveCached::new(&sum);
let mut sats = solver.sat_iter();
assert_eq!(sats.next(), Some(vec![2, 2, 0]));
assert_eq!(sats.next(), Some(vec![2, 0, 2]));
assert_eq!(sats.next(), Some(vec![0, 2, 2]));
assert_eq!(sats.next(), None);
}
#[test]
fn total_sum_unsat_unique() {
let sum = TotalSum::new(3, &[2, 0], 3);
let unsats = IterSolveCached::new(&sum).unsat_iter();
assert_unsat_unique(unsats);
}
#[test]
fn total_sum_search_sat_cached() {
let sum = TotalSum::new(3, &[2, 0], 3);
let solver = IterSolveCached::new(&sum);
let mut sats = solver.sat_iter();
assert_eq!(sats.next(), Some(vec![2, 2, 0]));
assert_eq!(sats.next(), Some(vec![2, 0, 2]));
assert_eq!(sats.next(), Some(vec![0, 2, 2]));
assert_eq!(sats.next(), None);
}
#[test]
fn total_sum_unsat_unique_cached() {
let sum = TotalSum::new(3, &[2, 0], 3);
let unsats = IterSolveCached::new(&sum).unsat_iter();
assert_unsat_unique(unsats);
}