From 2d3672a3b293aaed752f1f03cb2ddcafdcc31067 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Wed, 1 Oct 2025 18:33:28 +0200 Subject: [PATCH] tests: let EqualTerminatingCondition remember matches to return even if no longer equal --- env/src/main.rs | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/env/src/main.rs b/env/src/main.rs index 75a70b2eac195df70532465b6c109b558ac11d51..74e8f72e10a711879304af0d1d046115e79af0e5 100644 --- a/env/src/main.rs +++ b/env/src/main.rs @@ -278,15 +278,31 @@ trait TerminatingCondition } 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 TerminatingCondition for EqualTerminatingCondition { @@ -296,7 +312,13 @@ impl TerminatingCondition for EqualTerminatingCondition { _: &Vec>, _: 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) ] ),