From 2a590b8d62e87a64113e5f9f93e8b95f7832fa95 Mon Sep 17 00:00:00 2001 From: Samuel Gruetter <samuel.gruetter@epfl.ch> Date: Wed, 3 Jun 2015 19:44:52 +0200 Subject: [PATCH] prefix the looping functions with "looping" so that the TerminationRegression test checks if counterexamples are found --- .../termination/looping/LambdaCalculus.scala | 12 ++++++------ .../regression/termination/looping/OddEven.scala | 8 ++++---- .../termination/looping/UniversalEquality.scala | 6 +++--- .../termination/looping/WrongFibonacci.scala | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/test/resources/regression/termination/looping/LambdaCalculus.scala b/src/test/resources/regression/termination/looping/LambdaCalculus.scala index 16e10bb62..884e5dee5 100644 --- a/src/test/resources/regression/termination/looping/LambdaCalculus.scala +++ b/src/test/resources/regression/termination/looping/LambdaCalculus.scala @@ -22,16 +22,16 @@ object LambdaCalculus { } /* Termination checker (LoopProcessor) says: - ✗ Non-terminating for call: eval(App(Abs(0, App(Var(0), Var(0))), Abs(0, App(Var(0), Var(0))))) + ✗ Non-terminating for call: looping_eval(App(Abs(0, App(Var(0), Var(0))), Abs(0, App(Var(0), Var(0))))) i.e. (λx. x x)(λx. x x) This is the well-known "omega". */ - // big step call-by-value evaluation - def eval(t: Term): Option[Term] = (t match { - case App(t1, t2) => eval(t1) match { - case Some(Abs(x, body)) => eval(t2) match { - case Some(v2) => eval(subst(x, v2, body)) + // big step call-by-value looping_evaluation + def looping_eval(t: Term): Option[Term] = (t match { + case App(t1, t2) => looping_eval(t1) match { + case Some(Abs(x, body)) => looping_eval(t2) match { + case Some(v2) => looping_eval(subst(x, v2, body)) case None() => None() } case _ => None() // stuck diff --git a/src/test/resources/regression/termination/looping/OddEven.scala b/src/test/resources/regression/termination/looping/OddEven.scala index e26e45555..078b4c258 100644 --- a/src/test/resources/regression/termination/looping/OddEven.scala +++ b/src/test/resources/regression/termination/looping/OddEven.scala @@ -1,12 +1,12 @@ object Test { - def isOdd(n: BigInt): Boolean = { - isEven(n-1) + def looping_isOdd(n: BigInt): Boolean = { + looping_isEven(n-1) } ensuring { res => (n % 2 == 1) == res } - def isEven(n: BigInt): Boolean = { - isOdd(n-1) + def looping_isEven(n: BigInt): Boolean = { + looping_isOdd(n-1) } ensuring { res => (n % 2 == 0) == res } diff --git a/src/test/resources/regression/termination/looping/UniversalEquality.scala b/src/test/resources/regression/termination/looping/UniversalEquality.scala index fbfd76d27..7b7181a6f 100644 --- a/src/test/resources/regression/termination/looping/UniversalEquality.scala +++ b/src/test/resources/regression/termination/looping/UniversalEquality.scala @@ -5,12 +5,12 @@ import leon._ object test { def universalEquality(e1: BigInt, e2: BigInt): Boolean = { - val b = proveEquality(e1, e2) + val b = looping_proveEquality(e1, e2) e1 == e2 }.holds - def proveEquality(a: BigInt, b: BigInt): Boolean = { - proveEquality(a, b) + def looping_proveEquality(a: BigInt, b: BigInt): Boolean = { + looping_proveEquality(a, b) } ensuring { res => res == (a == b) && res } } diff --git a/src/test/resources/regression/termination/looping/WrongFibonacci.scala b/src/test/resources/regression/termination/looping/WrongFibonacci.scala index 2b53eaaef..9911ee76d 100644 --- a/src/test/resources/regression/termination/looping/WrongFibonacci.scala +++ b/src/test/resources/regression/termination/looping/WrongFibonacci.scala @@ -1,8 +1,8 @@ object Test { - def fib(n: BigInt): BigInt = { - fib(n-1) + fib(n-2) + def looping_fib(n: BigInt): BigInt = { + looping_fib(n-1) + looping_fib(n-2) } ensuring {res => res == (5*n + 1)*(5*n - 1)} } -- GitLab