use crate::{
assign::{AssignIF, PropagateIF},
cdb::ClauseDBIF,
solver::Solver,
types::{Lit, MaybeInconsistent, SolverError},
};
pub trait ValidateIF {
fn inject_assignment(&mut self, vec: &[i32]) -> MaybeInconsistent;
fn validate(&self) -> Option<Vec<i32>>;
}
impl ValidateIF for Solver {
fn inject_assignment(&mut self, vec: &[i32]) -> MaybeInconsistent {
if vec.is_empty() {
return Err(SolverError::Inconsistent);
}
let Solver { asg, cdb, .. } = self;
for i in vec {
asg.assign_at_root_level(cdb, Lit::from(*i))?;
}
Ok(())
}
fn validate(&self) -> Option<Vec<i32>> {
self.cdb
.validate(&self.asg.assign_ref(), true)
.map(|cid| Vec::<i32>::from(&self.cdb[cid]))
}
}