diff --git a/src/main/scala/leon/repair/RepairTrackingEvaluator.scala b/src/main/scala/leon/repair/RepairTrackingEvaluator.scala index 3fcb7f331144b5337514e0437ef1325b7f36b452..8ac452b9f86412053b06d07861ab948b06f6b071 100644 --- a/src/main/scala/leon/repair/RepairTrackingEvaluator.scala +++ b/src/main/scala/leon/repair/RepairTrackingEvaluator.scala @@ -9,7 +9,7 @@ import leon.purescala.Definitions._ import leon.LeonContext import leon.evaluators.RecursiveEvaluator -abstract class RepairTrackingEvaluator(ctx: LeonContext, prog: Program) extends RecursiveEvaluator(ctx, prog, 50000) { +class RepairTrackingEvaluator(ctx: LeonContext, prog: Program) extends RecursiveEvaluator(ctx, prog, 50000) { type RC = CollectingRecContext type GC = GlobalContext diff --git a/src/main/scala/leon/repair/Repairman.scala b/src/main/scala/leon/repair/Repairman.scala index 818dbb9a788d0e5a25445f1b780a235165d05de2..1c0cf9ed9c38cfec83289e9d9672813f61dc4502 100644 --- a/src/main/scala/leon/repair/Repairman.scala +++ b/src/main/scala/leon/repair/Repairman.scala @@ -174,32 +174,19 @@ class Repairman(ctx: LeonContext, initProgram: Program, fd: FunDef, verifTimeout // We don't want tests whose invocation will call other failing tests. // This is because they will appear erroneous, // even though the error comes from the called test - val testEval : RepairTrackingEvaluator = new RepairTrackingEvaluator(ctx, program) { - def withFilter(fi : FI) = fi._1 == fd - } - - val passingTs = for (test <- passingTests) yield InExample(test.ins) - val failingTs = for (test <- failingTests) yield InExample(test.ins) - - (failingTs ++ passingTs) foreach { ts => + val testEval = new RepairTrackingEvaluator(ctx, program) + + failingTests foreach { ts => testEval.eval(functionInvocation(fd, ts.ins)) } val test2Tests : Map[FI, Set[FI]] = testEval.fullCallGraph - - //println("CALL GRAPH") - //for { - // ((fi, args), tos) <- test2Tests - // (tofi, toArgs) <- tos - //}{ - // println(s"${fi.id}(${args mkString ", "}) ----> ${tofi.id}(${toArgs mkString ", "})") - //} def isFailing(fi : FI) = !testEval.fiStatus(fi) && (fi._1 == fd) val failing = test2Tests filter { case (from, to) => - isFailing(from) && (to forall (!isFailing(_)) ) + isFailing(from) && (to forall (!isFailing(_)) ) } - + failing.keySet map { case (_, args) => InExample(args) } }