From b5a73c6a0c1aa4aa0e16a88a4c05724c9eb3e57c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Thu, 14 Apr 2016 21:54:44 +0200
Subject: [PATCH] start some unit testing of function closure

---
 .../leon/purescala/FunctionClosure.scala      |  2 +-
 .../unit/purescala/FunctionClosureSuite.scala | 28 +++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)
 create mode 100644 src/test/scala/leon/unit/purescala/FunctionClosureSuite.scala

diff --git a/src/main/scala/leon/purescala/FunctionClosure.scala b/src/main/scala/leon/purescala/FunctionClosure.scala
index ba3353e32..c67e222d8 100644
--- a/src/main/scala/leon/purescala/FunctionClosure.scala
+++ b/src/main/scala/leon/purescala/FunctionClosure.scala
@@ -23,7 +23,7 @@ object FunctionClosure extends TransformationPhase {
     * The strategy is as follows: Remove one layer of nested FunDef's, then call
     * close recursively on the new functions.
     */
-  private def close(fd: FunDef): Seq[FunDef] = { 
+  def close(fd: FunDef): Seq[FunDef] = {
 
     // Directly nested functions with their p.c.
     val nestedWithPathsFull = {
diff --git a/src/test/scala/leon/unit/purescala/FunctionClosureSuite.scala b/src/test/scala/leon/unit/purescala/FunctionClosureSuite.scala
new file mode 100644
index 000000000..c7274e560
--- /dev/null
+++ b/src/test/scala/leon/unit/purescala/FunctionClosureSuite.scala
@@ -0,0 +1,28 @@
+/* Copyright 2009-2016 EPFL, Lausanne */
+
+package leon.unit.utils
+
+import leon.test._
+import leon.purescala.Common._
+import leon.purescala.Expressions._
+import leon.purescala.Types._
+import leon.purescala.TypeOps.isSubtypeOf
+import leon.purescala.Definitions._
+import leon.purescala.ExprOps._
+import leon.purescala.FunctionClosure
+
+import org.scalatest._
+
+class FunctionClosureSuite extends FunSuite with helpers.ExpressionsDSL {
+
+  val fd1 = new FunDef(FreshIdentifier("f"), Seq(), Seq(ValDef(x.id)), IntegerType)
+  fd1.body = Some(x)
+
+  test("close does not modify a function without nested functions") {
+    val cfd1 = FunctionClosure.close(fd1)
+    assert(cfd1.size === 1)
+    assert(fd1 === cfd1.head)
+    assert(fd1.body === cfd1.head.body)
+  }
+
+}
-- 
GitLab