From 2712fddb8cb60802a40d4b62697795e25af792c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20Sinan=20K=C3=B6ksal?= <alisinan@gmail.com>
Date: Fri, 20 May 2011 13:27:51 +0000
Subject: [PATCH] perform lucky tests by default at it substantially helps
 finding models

---
 src/cp/CPPlugin.scala             | 2 ++
 src/cp/RuntimeSettings.scala      | 1 +
 src/funcheck/FunCheckPlugin.scala | 4 ++--
 src/purescala/Settings.scala      | 2 +-
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/cp/CPPlugin.scala b/src/cp/CPPlugin.scala
index 3c8a14418..fd0d3b64e 100644
--- a/src/cp/CPPlugin.scala
+++ b/src/cp/CPPlugin.scala
@@ -28,6 +28,7 @@ class CPPlugin(val global: Global) extends Plugin {
     "  -P:constraint-programming:CAV                CAV 2011 settings. In progress." + "\n" +
     "  -P:constraint-programming:prune              (with CAV) Use additional SMT queries to rule out some unrollings." + "\n" +
     "  -P:constraint-programming:cores              (with CAV) Use UNSAT cores in the unrolling/refinement step." + "\n" +
+    "  -P:constraint-programming:noLuckyTests       (with CAV) Do not perform additional tests to potentially find models early." + "\n" +
     "  -P:constraint-programming:scalaEval          (with CAV) Use functions stored in constraints to evaluate models."
   )
 
@@ -47,6 +48,7 @@ class CPPlugin(val global: Global) extends Plugin {
         case "CAV"       =>                      { purescala.Settings.experimental = true; purescala.Settings.useInstantiator = false; purescala.Settings.useFairInstantiator = true; purescala.Settings.useBAPA = false; purescala.Settings.zeroInlining = true }
         case "prune"     =>                      purescala.Settings.pruneBranches = true
         case "cores"     =>                      purescala.Settings.useCores = true
+        case "noLuckyTests" =>                   purescala.Settings.luckyTest = false
         case "scalaEval" =>                      cp.Settings.useScalaEvaluator = true
         case s if s.startsWith("unrolling=") =>  purescala.Settings.unrollingLevel = try { s.substring("unrolling=".length, s.length).toInt } catch { case _ => 0 }
         case s if s.startsWith("functions=") =>  purescala.Settings.functionsToAnalyse = Set(splitList(s.substring("functions=".length, s.length)): _*)
diff --git a/src/cp/RuntimeSettings.scala b/src/cp/RuntimeSettings.scala
index 813ebb884..051ea9b94 100644
--- a/src/cp/RuntimeSettings.scala
+++ b/src/cp/RuntimeSettings.scala
@@ -12,6 +12,7 @@ package cp
   var useCores : Boolean = purescala.Settings.useCores 
   var pruneBranches : Boolean = purescala.Settings.pruneBranches 
   var solverTimeout : Option[Int] = purescala.Settings.solverTimeout 
+  var luckyTest : Boolean = purescala.Settings.luckyTest 
 
   var useScalaEvaluator : Boolean = Settings.useScalaEvaluator
 }
diff --git a/src/funcheck/FunCheckPlugin.scala b/src/funcheck/FunCheckPlugin.scala
index 08945e8d8..8180ef78c 100644
--- a/src/funcheck/FunCheckPlugin.scala
+++ b/src/funcheck/FunCheckPlugin.scala
@@ -37,7 +37,7 @@ class FunCheckPlugin(val global: Global, val actionAfterExtraction : Option[Prog
     "  -P:funcheck:CAV                CAV 2011 settings. In progress." + "\n" +
     "  -P:funcheck:prune              (with CAV) Use additional SMT queries to rule out some unrollings." + "\n" +
     "  -P:funcheck:cores              (with CAV) Use UNSAT cores in the unrolling/refinement step." + "\n" +
-    "  -P:funcheck:lucky              (with CAV) Perform additional tests to potentially find models early."
+    "  -P:funcheck:noLuckyTests       (with CAV) Do not perform additional tests to potentially find models early."
   )
 
   /** Processes the command-line options. */
@@ -59,7 +59,7 @@ class FunCheckPlugin(val global: Global, val actionAfterExtraction : Option[Prog
         case "CAV"       =>                      { purescala.Settings.experimental = true; purescala.Settings.useInstantiator = false; purescala.Settings.useFairInstantiator = true; purescala.Settings.useBAPA = false; purescala.Settings.zeroInlining = true }
         case "prune"     =>                      purescala.Settings.pruneBranches = true
         case "cores"     =>                      purescala.Settings.useCores = true
-        case "lucky"     =>                      purescala.Settings.luckyTest = true
+        case "noLuckyTests" =>                   purescala.Settings.luckyTest = false
         case s if s.startsWith("unrolling=") =>  purescala.Settings.unrollingLevel = try { s.substring("unrolling=".length, s.length).toInt } catch { case _ => 0 }
         case s if s.startsWith("functions=") =>  purescala.Settings.functionsToAnalyse = Set(splitList(s.substring("functions=".length, s.length)): _*)
         case s if s.startsWith("extensions=") => purescala.Settings.extensionNames = splitList(s.substring("extensions=".length, s.length))
diff --git a/src/purescala/Settings.scala b/src/purescala/Settings.scala
index a872ad20e..555e07958 100644
--- a/src/purescala/Settings.scala
+++ b/src/purescala/Settings.scala
@@ -21,5 +21,5 @@ object Settings {
   var pruneBranches : Boolean = false
   def useAnyInstantiator : Boolean = useInstantiator || useFairInstantiator
   var solverTimeout : Option[Int] = None
-  var luckyTest : Boolean = false
+  var luckyTest : Boolean = true
 }
-- 
GitLab