@@ -284,28 +284,37 @@ std::string Checker::isOptimizedBetter(Program existing, Program optimized,
284284 // evaluate optimized program for fixed number of terms
285285 num_check = std::min<size_t >(num_check, terms.size ());
286286 num_check = std::max<size_t >(num_check, SequenceUtil::EXTENDED_SEQ_LENGTH);
287- Sequence tmp ;
287+ Sequence optimized_seq, existing_seq ;
288288 evaluator.clearCaches ();
289- auto optimized_steps = evaluator.eval (optimized, tmp, num_check, false );
289+ auto optimized_steps =
290+ evaluator.eval (optimized, optimized_seq, num_check, false );
290291 if (Signals::HALT) {
291292 return not_better; // interrupted evaluation
292293 }
293294
294295 // check if the first decreasing/non-increasing term is beyond the known
295296 // sequence terms => fake "better" program
296297 const int64_t s = terms.size ();
297- if (tmp .get_first_delta_lt (Number::ZERO) >= s || // decreasing
298- tmp .get_first_delta_lt (Number::ONE) >= s) { // non-increasing
299- return not_better; // => fake "better" program
298+ if (optimized_seq .get_first_delta_lt (Number::ZERO) >= s || // decreasing
299+ optimized_seq .get_first_delta_lt (Number::ONE) >= s) { // non-increasing
300+ return not_better; // => fake "better" program
300301 }
301302
302303 // evaluate existing program for same number of terms
303304 evaluator.clearCaches ();
304- const auto existing_steps = evaluator.eval (existing, tmp, num_check, false );
305+ const auto existing_steps =
306+ evaluator.eval (existing, existing_seq, num_check, false );
305307 if (Signals::HALT) {
306308 return not_better; // interrupted evaluation
307309 }
308310
311+ // check correctness of the existing program
312+ size_t num_checked_terms = std::min (terms.size (), existing_seq.size ());
313+ if (existing_seq.subsequence (0 , num_checked_terms) !=
314+ terms.subsequence (0 , num_checked_terms)) {
315+ return " Corrected" ;
316+ }
317+
309318 // check number of successfully computed terms
310319 // we don't try to optimize for number of terms
311320 double existing_terms = existing_steps.runs ;
0 commit comments