use num_traits::real::Real;
mod improvement_criterion;
mod iter_criterion;
mod quality_criterion;
mod time_criterion;
mod criterion_combiner;
#[cfg(test)]
pub(crate) mod test_helpers;
pub use improvement_criterion::ImprovementCriterion;
pub use iter_criterion::IterCriterion;
pub use quality_criterion::QualityCriterion;
pub use time_criterion::TimeCriterion;
pub use criterion_combiner::CriterionCombiner;
use super::Problem;
pub trait StopCriterion<P: Problem, R: Real = f64> {
fn progress(&self) -> R;
fn should_stop(&self) -> bool {
self.progress() >= R::one()
}
fn update(&mut self, new_value: P::Value);
fn current_iter(&self) -> usize;
}