From 69b8aa703e2a767f6665cb6a5d6fb774f132f8e7 Mon Sep 17 00:00:00 2001
From: Regis Blanc <regwblanc@gmail.com>
Date: Thu, 14 Jan 2016 15:36:45 +0100
Subject: [PATCH] new test suite for detecting aliasing problems

---
 .../xlang/error/ArrayAliasing1.scala          | 13 ++++++
 .../xlang/error/ArrayAliasing2.scala          | 11 +++++
 .../xlang/error/ArrayAliasing3.scala          | 11 +++++
 .../xlang/XLangDesugaringSuite.scala          | 46 +++++++++++++++++++
 4 files changed, 81 insertions(+)
 create mode 100644 src/test/resources/regression/xlang/error/ArrayAliasing1.scala
 create mode 100644 src/test/resources/regression/xlang/error/ArrayAliasing2.scala
 create mode 100644 src/test/resources/regression/xlang/error/ArrayAliasing3.scala
 create mode 100644 src/test/scala/leon/regression/xlang/XLangDesugaringSuite.scala

diff --git a/src/test/resources/regression/xlang/error/ArrayAliasing1.scala b/src/test/resources/regression/xlang/error/ArrayAliasing1.scala
new file mode 100644
index 000000000..30b1652da
--- /dev/null
+++ b/src/test/resources/regression/xlang/error/ArrayAliasing1.scala
@@ -0,0 +1,13 @@
+import leon.lang._
+
+object ArrayAliasing1 {
+
+  def f1(): BigInt = {
+    val a = Array.fill(10)(BigInt(0))
+    val b = a
+    b(0) = 10
+    a(0)
+  } ensuring(_ == 10)
+
+}
+
diff --git a/src/test/resources/regression/xlang/error/ArrayAliasing2.scala b/src/test/resources/regression/xlang/error/ArrayAliasing2.scala
new file mode 100644
index 000000000..4e906865a
--- /dev/null
+++ b/src/test/resources/regression/xlang/error/ArrayAliasing2.scala
@@ -0,0 +1,11 @@
+import leon.lang._
+
+object ArrayAliasing2 {
+
+  def f1(a: Array[BigInt]): BigInt = {
+    val b = a
+    b(0) = 10
+    a(0)
+  } ensuring(_ == 10)
+
+}
diff --git a/src/test/resources/regression/xlang/error/ArrayAliasing3.scala b/src/test/resources/regression/xlang/error/ArrayAliasing3.scala
new file mode 100644
index 000000000..0398fc37b
--- /dev/null
+++ b/src/test/resources/regression/xlang/error/ArrayAliasing3.scala
@@ -0,0 +1,11 @@
+import leon.lang._
+
+object ArrayAliasing3 {
+
+  def f1(a: Array[BigInt], b: Boolean): BigInt = {
+    val c = if(b) a else Array[BigInt](1,2,3,4,5)
+    c(0) = 10
+    a(0)
+  } ensuring(_ == 10)
+
+}
diff --git a/src/test/scala/leon/regression/xlang/XLangDesugaringSuite.scala b/src/test/scala/leon/regression/xlang/XLangDesugaringSuite.scala
new file mode 100644
index 000000000..41260ec2d
--- /dev/null
+++ b/src/test/scala/leon/regression/xlang/XLangDesugaringSuite.scala
@@ -0,0 +1,46 @@
+/* Copyright 2009-2015 EPFL, Lausanne */
+
+package leon.regression.xlang
+
+import leon._
+import leon.test._
+import purescala.Definitions.Program
+import java.io.File
+
+class XLangDesugaringSuite extends LeonRegressionSuite {
+  // Hard-code output directory, for Eclipse purposes
+
+  val pipeline = frontends.scalac.ExtractionPhase andThen new utils.PreprocessingPhase(true)
+
+  def testFrontend(f: File, forError: Boolean) = {
+    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"))
+
+    for(f <- fs) {
+      block(f)
+    } 
+  }
+
+  val baseDir = "regression/xlang/"
+
+  forEachFileIn(baseDir+"passing/") { f => 
+    testFrontend(f, false)
+  }
+  forEachFileIn(baseDir+"error/") { f =>
+    testFrontend(f, true)
+  }
+   
+}
-- 
GitLab