diff --git a/src/test/resources/regression/verification/purescala/error/Asserts.scala b/src/test/resources/regression/frontends/error/simple/Asserts.scala similarity index 100% rename from src/test/resources/regression/verification/purescala/error/Asserts.scala rename to src/test/resources/regression/frontends/error/simple/Asserts.scala diff --git a/src/test/resources/regression/verification/purescala/error/ConvertBigInt.scala b/src/test/resources/regression/frontends/error/simple/ConvertBigInt.scala similarity index 100% rename from src/test/resources/regression/verification/purescala/error/ConvertBigInt.scala rename to src/test/resources/regression/frontends/error/simple/ConvertBigInt.scala diff --git a/src/test/resources/regression/verification/purescala/error/InstanceOf1.scala b/src/test/resources/regression/frontends/error/simple/InstanceOf1.scala similarity index 100% rename from src/test/resources/regression/verification/purescala/error/InstanceOf1.scala rename to src/test/resources/regression/frontends/error/simple/InstanceOf1.scala diff --git a/src/test/resources/regression/verification/purescala/error/LiteralBigInt.scala b/src/test/resources/regression/frontends/error/simple/LiteralBigInt.scala similarity index 100% rename from src/test/resources/regression/verification/purescala/error/LiteralBigInt.scala rename to src/test/resources/regression/frontends/error/simple/LiteralBigInt.scala diff --git a/src/test/resources/regression/verification/purescala/error/NotEquals.scala b/src/test/resources/regression/frontends/error/simple/NotEquals.scala similarity index 100% rename from src/test/resources/regression/verification/purescala/error/NotEquals.scala rename to src/test/resources/regression/frontends/error/simple/NotEquals.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array1.scala b/src/test/resources/regression/frontends/error/xlang/Array1.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array1.scala rename to src/test/resources/regression/frontends/error/xlang/Array1.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array10.scala b/src/test/resources/regression/frontends/error/xlang/Array10.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array10.scala rename to src/test/resources/regression/frontends/error/xlang/Array10.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array2.scala b/src/test/resources/regression/frontends/error/xlang/Array2.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array2.scala rename to src/test/resources/regression/frontends/error/xlang/Array2.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array3.scala b/src/test/resources/regression/frontends/error/xlang/Array3.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array3.scala rename to src/test/resources/regression/frontends/error/xlang/Array3.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array4.scala b/src/test/resources/regression/frontends/error/xlang/Array4.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array4.scala rename to src/test/resources/regression/frontends/error/xlang/Array4.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array5.scala b/src/test/resources/regression/frontends/error/xlang/Array5.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array5.scala rename to src/test/resources/regression/frontends/error/xlang/Array5.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array6.scala b/src/test/resources/regression/frontends/error/xlang/Array6.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array6.scala rename to src/test/resources/regression/frontends/error/xlang/Array6.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array7.scala b/src/test/resources/regression/frontends/error/xlang/Array7.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array7.scala rename to src/test/resources/regression/frontends/error/xlang/Array7.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array8.scala b/src/test/resources/regression/frontends/error/xlang/Array8.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array8.scala rename to src/test/resources/regression/frontends/error/xlang/Array8.scala diff --git a/src/test/resources/regression/verification/xlang/error/Array9.scala b/src/test/resources/regression/frontends/error/xlang/Array9.scala similarity index 100% rename from src/test/resources/regression/verification/xlang/error/Array9.scala rename to src/test/resources/regression/frontends/error/xlang/Array9.scala diff --git a/src/test/resources/regression/frontends/Fields.scala b/src/test/resources/regression/frontends/passing/Fields.scala similarity index 100% rename from src/test/resources/regression/frontends/Fields.scala rename to src/test/resources/regression/frontends/passing/Fields.scala diff --git a/src/test/resources/regression/frontends/Operators.scala b/src/test/resources/regression/frontends/passing/Operators.scala similarity index 100% rename from src/test/resources/regression/frontends/Operators.scala rename to src/test/resources/regression/frontends/passing/Operators.scala diff --git a/src/test/scala/leon/test/frontends/FrontEndsTest.scala b/src/test/scala/leon/test/frontends/FrontEndsTest.scala index c5b7e63fb2311544fa945787b66576ab1c41013b..90335806c2eb597b31becd36e78d609267a49373 100644 --- a/src/test/scala/leon/test/frontends/FrontEndsTest.scala +++ b/src/test/scala/leon/test/frontends/FrontEndsTest.scala @@ -3,11 +3,29 @@ package leon.test.frontends import leon._ +import test.LeonTestSuite +import purescala.Definitions.Program import java.io.File -class FrontEndsTest extends leon.test.LeonTestSuite { +class FrontEndsTest extends LeonTestSuite { // Hard-code output directory, for Eclipse purposes - lazy val tmpPath = java.nio.file.Files.createTempDirectory("leon-frontends"); + + val pipeFront = frontends.scalac.ExtractionPhase andThen utils.PreprocessingPhase + + def testFrontend(f: File, pipeBack: Pipeline[Program, Program], forError: Boolean) = { + val pipeline = pipeFront andThen pipeBack + test ("Testing " + f.getName) { + val ctx = createLeonContext() + if (forError) { + intercept[LeonFatalError]{ + pipeline.run(ctx)(List(f.getAbsolutePath())) + } + } else { + pipeline.run(ctx)(List(f.getAbsolutePath())) + } + } + + } private def forEachFileIn(path : String)(block : File => Unit) { val fs = filesInResourceDir(path, _.endsWith(".scala")) @@ -16,54 +34,19 @@ class FrontEndsTest extends leon.test.LeonTestSuite { block(f) } } - - val pipeline1 = - frontends.scalac.ExtractionPhase andThen - utils.ScopingPhase andThen - purescala.MethodLifting andThen - utils.TypingPhase andThen - purescala.CompleteAbstractDefinitions andThen - utils.FileOutputPhase - - val pipeline2 = - frontends.scalac.ExtractionPhase andThen - utils.ScopingPhase andThen - purescala.MethodLifting andThen - utils.TypingPhase andThen - purescala.CompleteAbstractDefinitions andThen - purescala.RestoreMethods andThen - utils.FileOutputPhase - - forEachFileIn("regression/frontends" ) { f => - testExtr(f) - } - - def testExtr(f : File) { - val outFileName1 = tmpPath.toString ++ "/" ++ f.getName - val outFileName2 = tmpPath.toString ++ "/restored" ++ f.getName - test ("Testing " + f.getName) { - // Compile original file - val timeOut = 2 - val settings = testContext.settings.copy( - debugSections = Set() - ) - val ctx1 = testContext.copy( - // We want a reporter that actually prints some output - //reporter = new DefaultReporter(settings), - settings = settings, - options = testContext.options :+ LeonValueOption("o", outFileName1) - ) - - val ctx2 = ctx1.copy( - //reporter = new DefaultReporter(settings), - settings = settings, - options = testContext.options :+ LeonValueOption("o", outFileName2 ) - ) - - pipeline1.run(ctx1)(List(f.getAbsolutePath())) - pipeline2.run(ctx2)(List(f.getAbsolutePath())) - } - + val pipeNormal = xlang.NoXLangFeaturesChecking andThen NoopPhase() // redundant NoopPhase to trigger throwing error between phases + val pipeX = NoopPhase[Program]() + val baseDir = "regression/frontends/" + + forEachFileIn(baseDir+"passing/") { f => + testFrontend(f, pipeNormal, false) + } + forEachFileIn(baseDir+"error/simple/") { f => + testFrontend(f, pipeNormal, true) } + forEachFileIn(baseDir+"error/xlang/") { f => + testFrontend(f, pipeX, true) + } + } diff --git a/src/test/scala/leon/test/verification/PureScalaVerificationRegression.scala b/src/test/scala/leon/test/verification/PureScalaVerificationRegression.scala index c907a66569bee4906fce477d9216afd8a278cd75..51aa4fced083cb589898609bc089c8a684bd941c 100644 --- a/src/test/scala/leon/test/verification/PureScalaVerificationRegression.scala +++ b/src/test/scala/leon/test/verification/PureScalaVerificationRegression.scala @@ -67,6 +67,5 @@ class PureScalaVerificationRegression extends VerificationRegression { assert(reporter.errorCount >= report.totalInvalid) assert(reporter.warningCount === 0) } - forEachFileIn("error", true) { output => () } } diff --git a/src/test/scala/leon/test/verification/VerificationRegression.scala b/src/test/scala/leon/test/verification/VerificationRegression.scala index d0b2e14aa3129cf65bc6c59fa6518df91e3ff938..210a5ab7e5e3a67e02fbc4c63ce6b61f63162b60 100644 --- a/src/test/scala/leon/test/verification/VerificationRegression.scala +++ b/src/test/scala/leon/test/verification/VerificationRegression.scala @@ -31,27 +31,21 @@ trait VerificationRegression extends LeonTestSuite { val pipeFront: Pipeline[Program, Program] val pipeBack : Pipeline[Program, VerificationReport] - private def mkTest(files: List[String], leonOptions : Seq[String], forError: Boolean)(block: Output=>Unit) = { + private def mkTest(files: List[String], leonOptions : Seq[String])(block: Output=>Unit) = { val extraction = ExtractionPhase andThen PreprocessingPhase andThen pipeFront - if(forError) { - intercept[LeonFatalError]{ - extraction.run(createLeonContext((files ++ leonOptions):_*))(files) - } - } else { - val ctx = createLeonContext(leonOptions:_*) - val ast = extraction.run(createLeonContext((files ++ leonOptions):_*))(files) - val programs = { - val (user, lib) = ast.units partition { _.isMainUnit } - user map { u => Program(u.id.freshen, u :: lib) } - } - for (p <- programs; displayName = p.id.name) test("%3d: %s %s".format(nextInt(), displayName, leonOptions.mkString(" "))) { - val report = pipeBack.run(ctx)(p) - block(Output(report, ctx.reporter)) - } + val ctx = createLeonContext(leonOptions:_*) + val ast = extraction.run(createLeonContext((files ++ leonOptions):_*))(files) + val programs = { + val (user, lib) = ast.units partition { _.isMainUnit } + user map { u => Program(u.id.freshen, u :: lib) } + } + for (p <- programs; displayName = p.id.name) test("%3d: %s %s".format(nextInt(), displayName, leonOptions.mkString(" "))) { + val report = pipeBack.run(ctx)(p) + block(Output(report, ctx.reporter)) } } @@ -65,11 +59,8 @@ trait VerificationRegression extends LeonTestSuite { val files = fs map { _.getPath } - // If error, try to verify each file separately (and fail for each one) - val groupedFiles = if (forError) files map (List(_)) else List(files) - - for (files <- groupedFiles; options <- optionVariants) { - mkTest(files, options, forError)(block) + for (options <- optionVariants) { + mkTest(files, options)(block) } } diff --git a/src/test/scala/leon/test/verification/XLangVerificationRegression.scala b/src/test/scala/leon/test/verification/XLangVerificationRegression.scala index f331b1c119100f2c723a50a7a81fb684ef225828..83e89516991052b4d83103461941631fe6d74065 100644 --- a/src/test/scala/leon/test/verification/XLangVerificationRegression.scala +++ b/src/test/scala/leon/test/verification/XLangVerificationRegression.scala @@ -106,6 +106,4 @@ class XLangVerificationRegression extends LeonTestSuite { assert(reporter.errorCount >= report.totalInvalid) } - forEachFileIn("error", true) { output => () } - }