From d2a5eb79a6f580f09a7f4707647855ba111ae360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com> Date: Fri, 4 May 2012 13:53:54 +0200 Subject: [PATCH] convert testcases from Map to Array --- testcases/LinearSearch.scala | 40 ++++++++++-------------------- testcases/MaxSum.scala | 48 ++++++------------------------------ 2 files changed, 21 insertions(+), 67 deletions(-) diff --git a/testcases/LinearSearch.scala b/testcases/LinearSearch.scala index e91a3f267..e18c4039c 100644 --- a/testcases/LinearSearch.scala +++ b/testcases/LinearSearch.scala @@ -4,29 +4,29 @@ import leon.Utils._ object LinearSearch { - def linearSearch(a: Map[Int, Int], size: Int, c: Int): Boolean = ({ - require(size <= 5 && isArray(a, size)) + def linearSearch(a: Array[Int], c: Int): Boolean = ({ + require(a.length >= 0) var i = 0 var found = false - (while(i < size) { + (while(i < a.length) { if(a(i) == c) found = true i = i + 1 - }) invariant(i <= size && - i >= 0 && - (if(found) contains(a, i, c) else !contains(a, i, c)) - ) + }) invariant( + i <= a.length && + i >= 0 && + (if(found) contains(a, i, c) else !contains(a, i, c)) + ) found - }) ensuring(res => if(res) contains(a, size, c) else !contains(a, size, c)) + }) ensuring(res => if(res) contains(a, a.length, c) else !contains(a, a.length, c)) - def contains(a: Map[Int, Int], size: Int, c: Int): Boolean = { - require(isArray(a, size) && size <= 5) + def contains(a: Array[Int], size: Int, c: Int): Boolean = { + require(a.length >= 0 && size >= 0 && size <= a.length) content(a, size).contains(c) } - - def content(a: Map[Int, Int], size: Int): Set[Int] = { - require(isArray(a, size) && size <= 5) + def content(a: Array[Int], size: Int): Set[Int] = { + require(a.length >= 0 && size >= 0 && size <= a.length) var set = Set.empty[Int] var i = 0 (while(i < size) { @@ -36,18 +36,4 @@ object LinearSearch { set } - def isArray(a: Map[Int, Int], size: Int): Boolean = { - - def rec(i: Int): Boolean = { - require(i >= 0) - if(i >= size) true else { - if(a.isDefinedAt(i)) rec(i+1) else false - } - } - - if(size < 0) - false - else - rec(0) - } } diff --git a/testcases/MaxSum.scala b/testcases/MaxSum.scala index 07c5d12ab..ba724d255 100644 --- a/testcases/MaxSum.scala +++ b/testcases/MaxSum.scala @@ -4,44 +4,26 @@ import leon.Utils._ object MaxSum { - - def maxSum(a: Map[Int, Int], size: Int): (Int, Int) = ({ - require(isArray(a, size) && size < 5 && isPositive(a, size)) + def maxSum(a: Array[Int]): (Int, Int) = ({ + require(a.length >= 0 && isPositive(a)) var sum = 0 var max = 0 var i = 0 - (while(i < size) { + (while(i < a.length) { if(max < a(i)) max = a(i) sum = sum + a(i) i = i + 1 - }) invariant (sum <= i * max && /*isGreaterEq(a, i, max) &&*/ /*(if(i == 0) max == 0 else true) &&*/ i >= 0 && i <= size) + }) invariant (sum <= i * max && i >= 0 && i <= a.length) (sum, max) - }) ensuring(res => res._1 <= size * res._2) + }) ensuring(res => res._1 <= a.length * res._2) -/* - def isGreaterEq(a: Map[Int, Int], size: Int, n: Int): Boolean = { - require(size <= 5 && isArray(a, size)) - def rec(i: Int): Boolean = { - require(i >= 0) - if(i >= size) - true - else { - if(a(i) > n) - false - else - rec(i+1) - } - } - rec(0) - } - */ - def isPositive(a: Map[Int, Int], size: Int): Boolean = { - require(size <= 5 && isArray(a, size)) + def isPositive(a: Array[Int]): Boolean = { + require(a.length >= 0) def rec(i: Int): Boolean = { require(i >= 0) - if(i >= size) + if(i >= a.length) true else { if(a(i) < 0) @@ -53,18 +35,4 @@ object MaxSum { rec(0) } - def isArray(a: Map[Int, Int], size: Int): Boolean = { - - def rec(i: Int): Boolean = { - require(i >= 0) - if(i >= size) true else { - if(a.isDefinedAt(i)) rec(i+1) else false - } - } - - if(size < 0) - false - else - rec(0) - } } -- GitLab