From fe63cdcbb56ab68e895bf3abb227585147fb452e Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Thu, 23 Jul 2015 14:25:55 +0200 Subject: [PATCH] test and use fixpoint --- src/main/scala/leon/purescala/ExprOps.scala | 7 +--- .../scala/leon/utils/UtilsPackageSuite.scala | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/unit-test/scala/leon/utils/UtilsPackageSuite.scala diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala index 369ac9e71..0766f017f 100644 --- a/src/main/scala/leon/purescala/ExprOps.scala +++ b/src/main/scala/leon/purescala/ExprOps.scala @@ -1245,12 +1245,7 @@ object ExprOps { case e => e }).copiedFrom(expr) - def fix[A](f: (A) => A)(a: A): A = { - val na = f(a) - if(a == na) a else fix(f)(na) - } - - fix(simplePostTransform(simplify0))(expr) + fixpoint(simplePostTransform(simplify0))(expr) } /** Checks whether a predicate is inductive on a certain identfier. diff --git a/src/unit-test/scala/leon/utils/UtilsPackageSuite.scala b/src/unit-test/scala/leon/utils/UtilsPackageSuite.scala new file mode 100644 index 000000000..77bf111af --- /dev/null +++ b/src/unit-test/scala/leon/utils/UtilsPackageSuite.scala @@ -0,0 +1,32 @@ +/* Copyright 2009-2015 EPFL, Lausanne */ + +package leon +package utils + +class ExprOpsSuite extends LeonTestSuite { + + test("fixpoint computes correct fixpoint of function that increments up to a max") { + def f(x: Int): Int = if(x < 10) x + 1 else 10 + assert(f(10) === 10) + assert(fixpoint(f)(1) === 10) + } + + test("fixpoint computes correct fixpoint with a large limit") { + def f(x: Int): Int = if(x < 100) x + 1 else 100 + assert(f(100) === 100) + assert(fixpoint(f)(-1) === 100) + } + + test("fixpoint finds the fixpoint in small number of iteration") { + def f(x: Int): Int = if(x < 10) x + 1 else 10 + assert(f(10) === 10) + assert(fixpoint(f, 15)(1) === 10) + } + + test("fixpoint of id is the starting expression") { + def id(x: Int): Int = x + assert(fixpoint(id)(1) === 1) + assert(fixpoint(id)(42) === 42) + } + +} -- GitLab