From c9000256d880b5181785da128332d4eb19a8c51a Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <colder@php.net>
Date: Mon, 23 Sep 2013 13:47:51 +0200
Subject: [PATCH] Relax the way we report slow tests. Enforce types on set
 operations

---
 src/main/scala/leon/purescala/Trees.scala    | 12 +++++++++---
 src/test/scala/leon/test/LeonTestSuite.scala |  4 +++-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/leon/purescala/Trees.scala b/src/main/scala/leon/purescala/Trees.scala
index ad8330622..4cf4d8bbf 100644
--- a/src/main/scala/leon/purescala/Trees.scala
+++ b/src/main/scala/leon/purescala/Trees.scala
@@ -478,9 +478,15 @@ object Trees {
   case class SubsetOf(set1: Expr, set2: Expr) extends Expr with FixedType {
     val fixedType = BooleanType
   }
-  case class SetIntersection(set1: Expr, set2: Expr) extends Expr 
-  case class SetUnion(set1: Expr, set2: Expr) extends Expr 
-  case class SetDifference(set1: Expr, set2: Expr) extends Expr 
+  case class SetIntersection(set1: Expr, set2: Expr) extends Expr {
+    leastUpperBound(Seq(set1, set2).map(_.getType)).foreach(setType _)
+  }
+  case class SetUnion(set1: Expr, set2: Expr) extends Expr {
+    leastUpperBound(Seq(set1, set2).map(_.getType)).foreach(setType _)
+  }
+  case class SetDifference(set1: Expr, set2: Expr) extends Expr {
+    leastUpperBound(Seq(set1, set2).map(_.getType)).foreach(setType _)
+  }
   case class SetMin(set: Expr) extends Expr
   case class SetMax(set: Expr) extends Expr
 
diff --git a/src/test/scala/leon/test/LeonTestSuite.scala b/src/test/scala/leon/test/LeonTestSuite.scala
index 1954187b8..415832a00 100644
--- a/src/test/scala/leon/test/LeonTestSuite.scala
+++ b/src/test/scala/leon/test/LeonTestSuite.scala
@@ -96,8 +96,10 @@ trait LeonTestSuite extends FunSuite with Timeouts {
   }
 
   override def test(name: String, tags: Tag*)(body: => Unit) {
+
     super.test(name, tags: _*) {
       val id = testIdentifier(name)
+
       val ts = now()
 
       testContext = generateContext
@@ -111,7 +113,7 @@ trait LeonTestSuite extends FunSuite with Timeouts {
       val stats = getStats(id)
 
       if (!stats.accountsFor(total)) {
-        fail("Test took too long to run: "+total+"ms (avg: "+stats.avg+", stddev: "+stats.stddev+")")
+        info(Console.YELLOW+"[warning] Test took too long to run: "+total+"ms (avg: "+stats.avg+", stddev: "+stats.stddev+")")
       }
 
       storeStats(id, stats.withValue(total))
-- 
GitLab