From bf8ef03eff6c220081ff60ada5983f7532ed74dd Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Fri, 9 Oct 2015 15:14:12 +0200
Subject: [PATCH] Get VerificationSuite up to date

---
 .../isabelle/IsabelleVerificationSuite.scala  | 10 +---
 .../PureScalaVerificationSuite.scala          |  5 --
 .../verification/VerificationSuite.scala      | 60 +++++++++----------
 3 files changed, 30 insertions(+), 45 deletions(-)

diff --git a/src/test/scala/leon/isabelle/IsabelleVerificationSuite.scala b/src/test/scala/leon/isabelle/IsabelleVerificationSuite.scala
index 9892bdbf4..628a523ad 100644
--- a/src/test/scala/leon/isabelle/IsabelleVerificationSuite.scala
+++ b/src/test/scala/leon/isabelle/IsabelleVerificationSuite.scala
@@ -1,16 +1,12 @@
 package leon.isabelle
 
-import leon._
-import leon.regression.verification._
-import leon.solvers.isabelle.AdaptationPhase
-import leon.test._
-import leon.verification.AnalysisPhase
+import leon.regression.verification.VerificationSuite
 
 class IsabelleVerificationSuite extends VerificationSuite {
 
   val testDir = "regression/verification/isabelle/"
-  val pipeFront = xlang.NoXLangFeaturesChecking
-  val pipeBack = AdaptationPhase andThen AnalysisPhase
+  override val isabelle = true
+
   val optionVariants: List[List[String]] = List(List("--isabelle:download=true", "--solvers=isabelle"))
 
 }
diff --git a/src/test/scala/leon/regression/verification/PureScalaVerificationSuite.scala b/src/test/scala/leon/regression/verification/PureScalaVerificationSuite.scala
index b1ee19996..c54ec2b59 100644
--- a/src/test/scala/leon/regression/verification/PureScalaVerificationSuite.scala
+++ b/src/test/scala/leon/regression/verification/PureScalaVerificationSuite.scala
@@ -3,9 +3,6 @@
 package leon.regression
 package verification
 
-import leon._
-import leon.verification.AnalysisPhase
-
 import _root_.smtlib.interpreters._
 
 // If you add another regression test, make sure it contains one object whose name matches the file name
@@ -13,8 +10,6 @@ import _root_.smtlib.interpreters._
 class PureScalaVerificationSuite extends VerificationSuite {
   
   val testDir = "regression/verification/purescala/"
-  val pipeFront = xlang.NoXLangFeaturesChecking
-  val pipeBack = AnalysisPhase
 
   val optionVariants: List[List[String]] = {
     val isZ3Available = try {
diff --git a/src/test/scala/leon/regression/verification/VerificationSuite.scala b/src/test/scala/leon/regression/verification/VerificationSuite.scala
index 63bf613d1..dd8b08879 100644
--- a/src/test/scala/leon/regression/verification/VerificationSuite.scala
+++ b/src/test/scala/leon/regression/verification/VerificationSuite.scala
@@ -5,12 +5,15 @@ package leon.regression.verification
 import leon._
 import leon.test._
 
-import leon.verification.VerificationReport
+import leon.utils.UniqueCounter
+import leon.verification.{AnalysisPhase, VerificationReport}
 import leon.purescala.Definitions.Program
 import leon.frontends.scalac.ExtractionPhase
 import leon.utils.PreprocessingPhase
+import leon.solvers.isabelle.AdaptationPhase
+import leon.xlang.FixReportLabels
 
-import org.scalatest.{Reporter => TestReporter, _}
+import org.scalatest.{Reporter => _, _}
 
 // If you add another regression test, make sure it contains one object whose name matches the file name
 // This is because we compile all tests from each folder separately.
@@ -20,28 +23,28 @@ trait VerificationSuite extends LeonRegressionSuite {
   val testDir: String
 
   val ignored: Seq[String] = Seq()
+  val desugarXLang: Boolean = false
+  val isabelle: Boolean = false
 
-  private var counter: Int = 0
-  private def nextInt(): Int = {
-    counter += 1
-    counter
-  }
+  private val counter = new UniqueCounter[Unit]
+  counter.nextGlobal // Start with 1
 
-  private[verification] case class Output(report: VerificationReport, reporter: Reporter)
- 
-  val pipeFront: Pipeline[Program, Program]
-  val pipeBack : Pipeline[Program, VerificationReport]
+  private case class Output(report: VerificationReport, reporter: Reporter)
 
-  private def mkTest(files: List[String], cat: String, forError: Boolean)(block: Output => Unit) = {
+  private def mkTest(files: List[String], cat: String)(block: Output => Unit) = {
     val extraction =
       ExtractionPhase andThen
-      new PreprocessingPhase andThen // Warning: If XLang at some point inherits this, we need to fix this line
-      pipeFront
+      new PreprocessingPhase(desugarXLang)
+
+    val analysis =
+      (if (isabelle) AdaptationPhase else NoopPhase[Program]) andThen
+      AnalysisPhase andThen
+      (if (desugarXLang) FixReportLabels else NoopPhase[VerificationReport])
 
     val ctx = createLeonContext(files:_*)
 
     try {
-      val (ctx2, ast) = extraction.run(ctx, files)
+      val (_, ast) = extraction.run(ctx, files)
       val programs = {
         val (user, lib) = ast.units partition { _.isMainUnit }
         user map ( u => Program(u :: lib) )
@@ -50,7 +53,7 @@ trait VerificationSuite extends LeonRegressionSuite {
 
         val displayName = s"$cat/${p.units.head.id.name}.scala"
 
-        val index = nextInt()
+        val index = counter.nextGlobal
         val ts = if (ignored exists (_.endsWith(displayName)))
           ignore _
         else
@@ -58,15 +61,8 @@ trait VerificationSuite extends LeonRegressionSuite {
 
         ts(f"$index%3d: $displayName ${options.mkString(" ")}", Seq()) {
           val ctx = createLeonContext(options: _*)
-          if (forError) {
-            intercept[LeonFatalError] {
-              pipeBack.run(ctx, p)
-            }
-          }
-          else {
-            val (ctx2, report) = pipeBack.run(ctx, p)
-            block(Output(report, ctx2.reporter))
-          }
+          val (ctx2, report) = analysis.run(ctx, p)
+          block(Output(report, ctx2.reporter))
         }
       }
     } catch {
@@ -83,7 +79,7 @@ trait VerificationSuite extends LeonRegressionSuite {
     }
   }
 
-  private[verification] def forEachFileIn(cat: String, forError: Boolean)(block: Output => Unit) {
+  private[verification] def forEachFileIn(cat: String)(block: Output => Unit) {
     val fs = filesInResourceDir(testDir + cat, _.endsWith(".scala")).toList
 
     fs foreach { file => 
@@ -93,11 +89,11 @@ trait VerificationSuite extends LeonRegressionSuite {
 
     val files = fs map { _.getPath }
 
-    mkTest(files, cat, forError)(block)
+    mkTest(files, cat)(block)
   }
 
   override def run(testName: Option[String], args: Args): Status = {
-    forEachFileIn("valid", false) { output =>
+    forEachFileIn("valid") { output =>
       val Output(report, reporter) = output
       for ((vc, vr) <- report.vrs if vr.isInvalid) {
         fail(s"The following verification condition was invalid: $vc @${vc.getPos}")
@@ -108,7 +104,7 @@ trait VerificationSuite extends LeonRegressionSuite {
       reporter.terminateIfError()
     }
 
-    forEachFileIn("invalid", false) { output =>
+    forEachFileIn("invalid") { output =>
       val Output(report, _) = output
       assert(report.totalUnknown === 0,
         "There should not be unknown verification conditions.")
@@ -116,19 +112,17 @@ trait VerificationSuite extends LeonRegressionSuite {
         "There should be at least one invalid verification condition.")
     }
 
-    forEachFileIn("unknown", false) { output =>
+    forEachFileIn("unknown") { output =>
       val Output(report, reporter) = output
       for ((vc, vr) <- report.vrs if vr.isInvalid) {
         fail(s"The following verification condition was invalid: $vc @${vc.getPos}")
       }
       assert(report.totalUnknown > 0,
-        "There should be at least one unknown verification conditions.")
+        "There should be at least one unknown verification condition.")
 
       reporter.terminateIfError()
     }
 
-    forEachFileIn("error", true) { _ => () }
-
     super.run(testName, args)
   }
 }
-- 
GitLab