~ruther/ctu-fee-eoa

2d3672a3b293aaed752f1f03cb2ddcafdcc31067 — Rutherther 2 days ago 70ae200
tests: let EqualTerminatingCondition remember matches to return even if no longer equal
1 files changed, 27 insertions(+), 5 deletions(-)

M env/src/main.rs
M env/src/main.rs => env/src/main.rs +27 -5
@@ 278,15 278,31 @@ trait TerminatingCondition<T>
}

struct EqualTerminatingCondition {
    target: BinaryString
    target: BinaryString,
    remember_match: bool,
    matched: bool,
}

impl EqualTerminatingCondition {
    pub fn new(target: BinaryString) -> Self {
        Self {
            target
            target,
            remember_match: false,
            matched: false,
        }
    }

    pub fn new_remembered(target: BinaryString) -> Self {
        Self {
            target,
            remember_match: true,
            matched: false,
        }
    }

    pub fn reset_match(self: &mut Self) {
        self.matched = false;
    }
}

impl<T: Clone> TerminatingCondition<T> for EqualTerminatingCondition {


@@ 296,7 312,13 @@ impl<T: Clone> TerminatingCondition<T> for EqualTerminatingCondition {
        _: &Vec<LocalSearchCandidate<T>>,
        _: usize
    ) -> bool {
        candidate.pos == self.target
        let matched = candidate.pos == self.target;

        if matched && self.remember_match {
            self.matched = true;
        }

        matched || self.matched
    }
}



@@ 455,7 477,7 @@ fn test_local_search_one_max() {
        &mut
            AndTerminatingConditions::new(
                vec![
                    &mut EqualTerminatingCondition::new(optimum.clone()),
                    &mut EqualTerminatingCondition::new_remembered(optimum.clone()),
                    &mut NoBetterForCyclesTerminatingCondition::new(100)
                ]
            ),


@@ 491,7 513,7 @@ fn test_local_search_sphere() {
        &mut
            AndTerminatingConditions::new(
                vec![
                    &mut EqualTerminatingCondition::new(optimum.clone()),
                    &mut EqualTerminatingCondition::new_remembered(optimum.clone()),
                    &mut NoBetterForCyclesTerminatingCondition::new(100)
                ]
            ),