From 0b2aa0d3b808cb7fa3bf55534edc890ccc74088b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Thu, 7 Apr 2016 16:53:00 +0200
Subject: [PATCH] update epsilon tests

---
 .../leon/xlang/XLangDesugaringPhase.scala     |  2 ++
 .../verification/xlang/invalid/Epsilon7.scala | 19 ++++++++++++++
 .../verification/xlang/invalid/Epsilon8.scala | 12 +++++++++
 .../verification/xlang/invalid/Epsilon9.scala | 26 +++++++++++++++++++
 .../verification/xlang/valid/Epsilon2.scala   | 16 ------------
 5 files changed, 59 insertions(+), 16 deletions(-)
 create mode 100644 src/test/resources/regression/verification/xlang/invalid/Epsilon7.scala
 create mode 100644 src/test/resources/regression/verification/xlang/invalid/Epsilon8.scala
 create mode 100644 src/test/resources/regression/verification/xlang/invalid/Epsilon9.scala
 delete mode 100644 src/test/resources/regression/verification/xlang/valid/Epsilon2.scala

diff --git a/src/main/scala/leon/xlang/XLangDesugaringPhase.scala b/src/main/scala/leon/xlang/XLangDesugaringPhase.scala
index b00935fcd..ae216dc62 100644
--- a/src/main/scala/leon/xlang/XLangDesugaringPhase.scala
+++ b/src/main/scala/leon/xlang/XLangDesugaringPhase.scala
@@ -17,7 +17,9 @@ object XLangDesugaringPhase extends LeonPhase[Program, Program] {
       PrintTreePhase(title).when(ctx.reporter.isDebugEnabled(DebugSectionTrees))
 
     val phases =
+      debugTrees("Program before starting xlang-desugaring") andThen
       IntroduceGlobalStatePhase andThen
+      debugTrees("Program after introduce-global-state") andThen
       AntiAliasingPhase andThen
       debugTrees("Program after anti-aliasing") andThen
       EpsilonElimination andThen
diff --git a/src/test/resources/regression/verification/xlang/invalid/Epsilon7.scala b/src/test/resources/regression/verification/xlang/invalid/Epsilon7.scala
new file mode 100644
index 000000000..3bbfde20d
--- /dev/null
+++ b/src/test/resources/regression/verification/xlang/invalid/Epsilon7.scala
@@ -0,0 +1,19 @@
+/* Copyright 2009-2016 EPFL, Lausanne */
+
+import leon.lang._
+import leon.lang.xlang._
+
+object Epsilon7 {
+
+  def rand(): Int = epsilon((x: Int) => true)
+
+  //this used to be VALID until the introduction
+  //of a global state that can tracks epsilon calls
+  //and ensure each epsilon is invoked with a different
+  //seed value
+  def wrongProperty1(): Boolean = {
+    rand() == rand() 
+  }.holds
+
+
+}
diff --git a/src/test/resources/regression/verification/xlang/invalid/Epsilon8.scala b/src/test/resources/regression/verification/xlang/invalid/Epsilon8.scala
new file mode 100644
index 000000000..a95ff4ea7
--- /dev/null
+++ b/src/test/resources/regression/verification/xlang/invalid/Epsilon8.scala
@@ -0,0 +1,12 @@
+/* Copyright 2009-2016 EPFL, Lausanne */
+
+import leon.lang._
+import leon.lang.xlang._
+
+object Epsilon8 {
+
+  def wrongProp: Boolean = {
+    epsilon((y: Int) => true) == epsilon((y: Int) => true)
+  } holds
+
+}
diff --git a/src/test/resources/regression/verification/xlang/invalid/Epsilon9.scala b/src/test/resources/regression/verification/xlang/invalid/Epsilon9.scala
new file mode 100644
index 000000000..c21e5333e
--- /dev/null
+++ b/src/test/resources/regression/verification/xlang/invalid/Epsilon9.scala
@@ -0,0 +1,26 @@
+/* Copyright 2009-2016 EPFL, Lausanne */
+
+import leon.lang._
+import leon.lang.xlang._
+
+object Epsilon9 {
+
+  def random(): BigInt = epsilon((x: BigInt) => true)
+
+  /*
+   * The implementation relies on a potential bug in random(), when
+   * two calls of random with the same args (0 here) will return
+   * the same value. If that's the case, then we can prove the
+   * postcondition. Epsilon should behave really randomly, so that
+   * postcondition should be invalid.
+   */
+  def findPositive(): BigInt = {
+    val x = random()
+    if(x < 0) {
+      -random()
+    } else {
+      x
+    }
+  } ensuring(res => res >= 0)
+
+}
diff --git a/src/test/resources/regression/verification/xlang/valid/Epsilon2.scala b/src/test/resources/regression/verification/xlang/valid/Epsilon2.scala
deleted file mode 100644
index 6506c4d97..000000000
--- a/src/test/resources/regression/verification/xlang/valid/Epsilon2.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright 2009-2016 EPFL, Lausanne */
-
-import leon.lang._
-import leon.lang.xlang._
-
-object Epsilon2 {
-
-  def rand(): Int = epsilon((x: Int) => true)
-
-  //this should hold, that is the expected semantic of our epsilon
-  def property1(): Boolean = {
-    rand() == rand() 
-  }.holds
-
-
-}
-- 
GitLab