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);
}
for i in vec {
self.asg.assign_at_root_level(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]))
}
}