#![cfg(test)]
use pumpkin_conflict_resolvers::resolvers::ResolutionResolver;
use pumpkin_core::Solver;
use pumpkin_core::predicate;
use pumpkin_core::results::SatisfactionResultUnderAssumptions;
use pumpkin_core::termination::Indefinite;
#[test]
fn basic_core_extraction() {
let mut solver = Solver::default();
let x = solver.new_bounded_integer(0, 2);
let y = solver.new_bounded_integer(0, 2);
let z = solver.new_bounded_integer(0, 2);
let constraint_tag = solver.new_constraint_tag();
let _ = solver
.add_constraint(pumpkin_constraints::all_different(
vec![x, y, z],
constraint_tag,
))
.post();
let mut termination = Indefinite;
let mut brancher = solver.default_brancher();
let mut resolver = ResolutionResolver::default();
let assumptions = vec![predicate!(x == 1), predicate!(y <= 1), predicate!(y != 0)];
let result = solver.satisfy_under_assumptions(
&mut brancher,
&mut termination,
&mut resolver,
&assumptions,
);
if let SatisfactionResultUnderAssumptions::UnsatisfiableUnderAssumptions(mut unsatisfiable) =
result
{
let core = unsatisfiable.extract_core();
assert_eq!(
core,
vec![predicate!(x == 1), predicate!(y <= 1), predicate!(y != 0)].into()
);
}
}