diff --git a/src/main/scala/leon/purescala/FunctionClosure.scala b/src/main/scala/leon/purescala/FunctionClosure.scala index ba3353e322919bcc8e4a8d3cf5ce95417bd6853c..c67e222d85339cfc27a59ad4a9b10d57b080f3ea 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 0000000000000000000000000000000000000000..c7274e56041a7ae4e65594187a063c9c196a5bf3 --- /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) + } + +}