From 73d58d51a9e6817b58a9bb2c07c33f64537c4a9f Mon Sep 17 00:00:00 2001
From: "Emmanouil (Manos) Koukoutos" <emmanouil.koukoutos@epfl.ch>
Date: Tue, 16 Dec 2014 17:44:15 +0100
Subject: [PATCH] Shortcut test discovery

---
 src/main/scala/leon/repair/Repairman.scala | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/main/scala/leon/repair/Repairman.scala b/src/main/scala/leon/repair/Repairman.scala
index 68abb20c5..d14db9d35 100644
--- a/src/main/scala/leon/repair/Repairman.scala
+++ b/src/main/scala/leon/repair/Repairman.scala
@@ -296,7 +296,12 @@ class Repairman(ctx: LeonContext, initProgram: Program, fd: FunDef, verifTimeout
     val vctx = VerificationContext(ctx, prog, solver, reporter)
     val vcs = AnalysisPhase.generateVerificationConditions(vctx, Some(List(fd.id.name)))
 
-    AnalysisPhase.checkVerificationConditions(vctx, vcs, checkInParallel = true)
+    AnalysisPhase.checkVerificationConditions(
+      vctx, 
+      vcs, 
+      checkInParallel = true,
+      interruptOn = _.counterExample.isDefined 
+    )
 
     var invalid = false;
     var ces = List[Seq[Expr]]()
@@ -357,7 +362,7 @@ class Repairman(ctx: LeonContext, initProgram: Program, fd: FunDef, verifTimeout
           new InExample(ins)
       }
     }
-
+    
     val generatedTests = inputs
       .take(maxEnumerated)
       .filter(filtering)
@@ -370,14 +375,17 @@ class Repairman(ctx: LeonContext, initProgram: Program, fd: FunDef, verifTimeout
       case _               => false
     }
 
-    // Try to verify, if it fails, we have at least one CE
-    val ces = getVerificationCounterExamples(fd, program) getOrElse Nil 
-
     // Extract passing/failing from the passes in POST
     val ef = new ExamplesFinder(ctx, program)
-    val (userPassing, userFailing) = ef.extractTests(fd)
+    val (userPassing, userFailing) = ef.extractTests(fd)   
+    
+    // If we have no ce yet, try to verify, if it fails, we have at least one CE
+    val ces = (generatedFailing ++ userFailing) match {
+      case Seq() => getVerificationCounterExamples(fd, program) getOrElse Nil
+      case nonEmpty => nonEmpty
+    }
 
-    (generatedPassing ++ userPassing, generatedFailing ++ ces ++ userFailing)
+    (generatedPassing ++ userPassing, ces.toList )
   }
 
 
-- 
GitLab