diff --git a/src/main/scala/leon/synthesis/rules/CEGISLike.scala b/src/main/scala/leon/synthesis/rules/CEGISLike.scala index 1247edf3357e91eb9ce6535cdc4db868e4628542..60cc1ca5ea5a98d0c52f748be59399ccbf9a76f8 100644 --- a/src/main/scala/leon/synthesis/rules/CEGISLike.scala +++ b/src/main/scala/leon/synthesis/rules/CEGISLike.scala @@ -866,7 +866,7 @@ abstract class CEGISLike(name: String) extends Rule(name) { val examples = allInputExamples() var badExamples = List[Example]() var stop = false - for (e <- examples if !stop) { + for (e <- examples if !stop && !badExamples.contains(e)) { ndProgram.testForProgram(bs)(e) match { case Some(true) => // ok, passes case Some(false) => @@ -936,8 +936,9 @@ abstract class CEGISLike(name: String) extends Rule(name) { failedTestsStats(ce) += 1 ndProgram.excludeProgram(bs, false) + var bad = false // Retest whether the newly found C-E invalidates some programs - ndProgram.prunedPrograms.foreach { p => + for (p <- ndProgram.prunedPrograms if !bad) { ndProgram.testForProgram(p)(ce) match { case Some(true) => case Some(false) => @@ -947,6 +948,7 @@ abstract class CEGISLike(name: String) extends Rule(name) { case None => debug(s" Test $ce failed, removing...") gi -= ce + bad = true } }