From 1c8958e421f7c86f43f93dd91d522879cd08feaa Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Wed, 20 May 2015 18:17:05 +0200 Subject: [PATCH] reorganize verification testcases --- testcases/verification/Errors.scala | 6 - .../verification/MutuallyRecursive.scala | 28 ---- .../{ => algorithms}/FiniteSort.scala | 0 .../{ => algorithms}/SecondsToTime.scala | 0 .../Sorting.scala | 0 .../{ => list-algorithms}/SumAndMax.scala | 0 .../TwoSizeFunctions.scala | 0 .../verification/{ => math}/Fibonacci.scala | 19 +++ .../verification/{ => math}/Naturals.scala | 0 testcases/verification/{ => math}/Prime.scala | 0 .../{ => math}/PropositionalLogic.scala | 0 testcases/verification/xlang/Arithmetic.scala | 18 +-- .../master-thesis-regis/Arithmetic.scala | 84 ---------- .../master-thesis-regis/ListOperations.scala | 146 ------------------ 14 files changed, 28 insertions(+), 273 deletions(-) delete mode 100644 testcases/verification/Errors.scala delete mode 100644 testcases/verification/MutuallyRecursive.scala rename testcases/verification/{ => algorithms}/FiniteSort.scala (100%) rename testcases/verification/{ => algorithms}/SecondsToTime.scala (100%) rename testcases/verification/{algorithms => list-algorithms}/Sorting.scala (100%) rename testcases/verification/{ => list-algorithms}/SumAndMax.scala (100%) rename testcases/verification/{ => list-algorithms}/TwoSizeFunctions.scala (100%) rename testcases/verification/{ => math}/Fibonacci.scala (53%) rename testcases/verification/{ => math}/Naturals.scala (100%) rename testcases/verification/{ => math}/Prime.scala (100%) rename testcases/verification/{ => math}/PropositionalLogic.scala (100%) delete mode 100644 testcases/verification/xlang/master-thesis-regis/Arithmetic.scala delete mode 100644 testcases/verification/xlang/master-thesis-regis/ListOperations.scala diff --git a/testcases/verification/Errors.scala b/testcases/verification/Errors.scala deleted file mode 100644 index 0a975695d..000000000 --- a/testcases/verification/Errors.scala +++ /dev/null @@ -1,6 +0,0 @@ -import leon.lang._ - -object Errors { - def a(a: Int): Int = error[Int]("This is an error") -} - diff --git a/testcases/verification/MutuallyRecursive.scala b/testcases/verification/MutuallyRecursive.scala deleted file mode 100644 index b39482773..000000000 --- a/testcases/verification/MutuallyRecursive.scala +++ /dev/null @@ -1,28 +0,0 @@ -import scala.collection.immutable.Set -import leon.lang._ -import leon.annotation._ - -object MutuallyRecursive { - def f(n : Int) : Int = { - if(n <= 0){ - 1 - } - else{ - f(n-1) + g(n-1) - } - } - - def g(n : Int) : Int = { - if(n <= 0) - 1 - else - f(n-1) - }ensuring(_ == fib(n + 1)) - - def fib(n : Int ) : Int = { - if(n <= 2) - 1 - else - fib(n-1) + fib (n-2) - } -} diff --git a/testcases/verification/FiniteSort.scala b/testcases/verification/algorithms/FiniteSort.scala similarity index 100% rename from testcases/verification/FiniteSort.scala rename to testcases/verification/algorithms/FiniteSort.scala diff --git a/testcases/verification/SecondsToTime.scala b/testcases/verification/algorithms/SecondsToTime.scala similarity index 100% rename from testcases/verification/SecondsToTime.scala rename to testcases/verification/algorithms/SecondsToTime.scala diff --git a/testcases/verification/algorithms/Sorting.scala b/testcases/verification/list-algorithms/Sorting.scala similarity index 100% rename from testcases/verification/algorithms/Sorting.scala rename to testcases/verification/list-algorithms/Sorting.scala diff --git a/testcases/verification/SumAndMax.scala b/testcases/verification/list-algorithms/SumAndMax.scala similarity index 100% rename from testcases/verification/SumAndMax.scala rename to testcases/verification/list-algorithms/SumAndMax.scala diff --git a/testcases/verification/TwoSizeFunctions.scala b/testcases/verification/list-algorithms/TwoSizeFunctions.scala similarity index 100% rename from testcases/verification/TwoSizeFunctions.scala rename to testcases/verification/list-algorithms/TwoSizeFunctions.scala diff --git a/testcases/verification/Fibonacci.scala b/testcases/verification/math/Fibonacci.scala similarity index 53% rename from testcases/verification/Fibonacci.scala rename to testcases/verification/math/Fibonacci.scala index 7c37e7ff2..df2b731c5 100644 --- a/testcases/verification/Fibonacci.scala +++ b/testcases/verification/math/Fibonacci.scala @@ -1,4 +1,5 @@ object Fibonacci { + def fib(x: BigInt) : BigInt = { require(x >= 0) if(x < 2) { @@ -12,4 +13,22 @@ object Fibonacci { def check() : Boolean = { fib(5) == 5 } ensuring(_ == true) + + + def f(n : BigInt) : BigInt = { + require(n >= 0) + if(n <= 0) + 1 + else + f(n-1) + g(n-1) + } + + def g(n : BigInt) : BigInt = { + require(n >= 0) + if(n <= 0) + 1 + else + f(n-1) + } ensuring(_ == fib(n + 1)) + } diff --git a/testcases/verification/Naturals.scala b/testcases/verification/math/Naturals.scala similarity index 100% rename from testcases/verification/Naturals.scala rename to testcases/verification/math/Naturals.scala diff --git a/testcases/verification/Prime.scala b/testcases/verification/math/Prime.scala similarity index 100% rename from testcases/verification/Prime.scala rename to testcases/verification/math/Prime.scala diff --git a/testcases/verification/PropositionalLogic.scala b/testcases/verification/math/PropositionalLogic.scala similarity index 100% rename from testcases/verification/PropositionalLogic.scala rename to testcases/verification/math/PropositionalLogic.scala diff --git a/testcases/verification/xlang/Arithmetic.scala b/testcases/verification/xlang/Arithmetic.scala index f3f10b892..99efb8222 100644 --- a/testcases/verification/xlang/Arithmetic.scala +++ b/testcases/verification/xlang/Arithmetic.scala @@ -3,8 +3,8 @@ import leon.lang._ object Arithmetic { /* VSTTE 2008 - Dafny paper */ - def mult(x : Int, y : Int): Int = ({ - var r = 0 + def mult(x : BigInt, y : BigInt): BigInt = ({ + var r: BigInt = 0 if(y < 0) { var n = y (while(n != 0) { @@ -22,7 +22,7 @@ object Arithmetic { }) ensuring(_ == x*y) /* VSTTE 2008 - Dafny paper */ - def add(x : Int, y : Int): Int = ({ + def add(x : BigInt, y : BigInt): BigInt = ({ var r = x if(y < 0) { var n = y @@ -41,7 +41,7 @@ object Arithmetic { }) ensuring(_ == x+y) /* VSTTE 2008 - Dafny paper */ - def addBuggy(x : Int, y : Int): Int = ({ + def addBuggy(x : BigInt, y : BigInt): BigInt = ({ var r = x if(y < 0) { var n = y @@ -59,10 +59,10 @@ object Arithmetic { r }) ensuring(_ == x+y) - def sum(n: Int): Int = { + def sum(n: BigInt): BigInt = { require(n >= 0) - var r = 0 - var i = 0 + var r: BigInt = 0 + var i: BigInt = 0 (while(i < n) { i = i + 1 r = r + i @@ -70,10 +70,10 @@ object Arithmetic { r } ensuring(_ >= n) - def divide(x: Int, y: Int): (Int, Int) = { + def divide(x: BigInt, y: BigInt): (BigInt, BigInt) = { require(x >= 0 && y > 0) var r = x - var q = 0 + var q = BigInt(0) (while(r >= y) { r = r - y q = q + 1 diff --git a/testcases/verification/xlang/master-thesis-regis/Arithmetic.scala b/testcases/verification/xlang/master-thesis-regis/Arithmetic.scala deleted file mode 100644 index f3f10b892..000000000 --- a/testcases/verification/xlang/master-thesis-regis/Arithmetic.scala +++ /dev/null @@ -1,84 +0,0 @@ -import leon.lang._ - -object Arithmetic { - - /* VSTTE 2008 - Dafny paper */ - def mult(x : Int, y : Int): Int = ({ - var r = 0 - if(y < 0) { - var n = y - (while(n != 0) { - r = r - x - n = n + 1 - }) invariant(r == x * (y - n) && 0 <= -n) - } else { - var n = y - (while(n != 0) { - r = r + x - n = n - 1 - }) invariant(r == x * (y - n) && 0 <= n) - } - r - }) ensuring(_ == x*y) - - /* VSTTE 2008 - Dafny paper */ - def add(x : Int, y : Int): Int = ({ - var r = x - if(y < 0) { - var n = y - (while(n != 0) { - r = r - 1 - n = n + 1 - }) invariant(r == x + y - n && 0 <= -n) - } else { - var n = y - (while(n != 0) { - r = r + 1 - n = n - 1 - }) invariant(r == x + y - n && 0 <= n) - } - r - }) ensuring(_ == x+y) - - /* VSTTE 2008 - Dafny paper */ - def addBuggy(x : Int, y : Int): Int = ({ - var r = x - if(y < 0) { - var n = y - (while(n != 0) { - r = r + 1 - n = n + 1 - }) invariant(r == x + y - n && 0 <= -n) - } else { - var n = y - (while(n != 0) { - r = r + 1 - n = n - 1 - }) invariant(r == x + y - n && 0 <= n) - } - r - }) ensuring(_ == x+y) - - def sum(n: Int): Int = { - require(n >= 0) - var r = 0 - var i = 0 - (while(i < n) { - i = i + 1 - r = r + i - }) invariant(r >= i && i >= 0 && r >= 0) - r - } ensuring(_ >= n) - - def divide(x: Int, y: Int): (Int, Int) = { - require(x >= 0 && y > 0) - var r = x - var q = 0 - (while(r >= y) { - r = r - y - q = q + 1 - }) invariant(x == y*q + r && r >= 0) - (q, r) - } ensuring(res => x == y*res._1 + res._2 && res._2 >= 0 && res._2 < y) - -} diff --git a/testcases/verification/xlang/master-thesis-regis/ListOperations.scala b/testcases/verification/xlang/master-thesis-regis/ListOperations.scala deleted file mode 100644 index 5f2844fa0..000000000 --- a/testcases/verification/xlang/master-thesis-regis/ListOperations.scala +++ /dev/null @@ -1,146 +0,0 @@ -import leon.lang._ -import leon.annotation._ - -object ListOperations { - - sealed abstract class List - case class Cons(head: Int, tail: List) extends List - case class Nil() extends List - - sealed abstract class IPList - case class IPCons(head: (Int, Int), tail: IPList) extends IPList - case class IPNil() extends IPList - - def content(l: List) : Set[Int] = l match { - case Nil() => Set.empty[Int] - case Cons(x, xs) => Set(x) ++ content(xs) - } - - def iplContent(l: IPList) : Set[(Int, Int)] = l match { - case IPNil() => Set.empty[(Int, Int)] - case IPCons(x, xs) => Set(x) ++ iplContent(xs) - } - - def size(l: List) : Int = { - var r = 0 - var l2 = l - (while(!l2.isInstanceOf[Nil]) { - val Cons(_, tail) = l2 - l2 = tail - r = r+1 - }) invariant(r >= 0) - r - } ensuring(res => res >= 0) - - def sizeBuggy(l: List) : Int = { - var r = -1 - var l2 = l - (while(!l2.isInstanceOf[Nil]) { - val Cons(_, tail) = l2 - l2 = tail - r = r+1 - }) invariant(r >= 0) - r - } ensuring(res => res >= 0) - - def sizeFun(l: List) : Int = l match { - case Nil() => 0 - case Cons(_, t) => 1 + sizeFun(t) - } - - def iplSizeFun(l: IPList) : Int = l match { - case IPNil() => 0 - case IPCons(_, t) => 1 + iplSizeFun(t) - } - - def iplSize(l: IPList) : Int = { - var r = 0 - var l2 = l - (while(!l2.isInstanceOf[IPNil]) { - val IPCons(_, tail) = l2 - l2 = tail - r = r+1 - }) invariant(r >= 0) - r - } ensuring(_ >= 0) - - def sizeImpEqFun(l: List): Boolean = (size(l) == sizeFun(l)) ensuring(_ == true) - - def zip(l1: List, l2: List) : IPList = ({ - require(sizeFun(l1) == sizeFun(l2)) - var r: IPList = IPNil() - var ll1: List = l1 - var ll2 = l2 - - (while(!ll1.isInstanceOf[Nil]) { - val Cons(l1head, l1tail) = ll1 - val Cons(l2head, l2tail) = if(!ll2.isInstanceOf[Nil]) ll2 else Cons(0, Nil()) - r = IPCons((l1head, l2head), r) - ll1 = l1tail - ll2 = l2tail - }) invariant(iplSizeFun(r) + sizeFun(ll1) == sizeFun(l1)) - - iplReverse(r) - }) ensuring(res => iplSizeFun(res) == sizeFun(l1)) - - def iplReverse(l: IPList): IPList = { - var r: IPList = IPNil() - var l2: IPList = l - - (while(!l2.isInstanceOf[IPNil]) { - val IPCons(head, tail) = l2 - l2 = tail - r = IPCons(head, r) - }) invariant(iplContent(r) ++ iplContent(l2) == iplContent(l) && iplSizeFun(r) + iplSizeFun(l2) == iplSizeFun(l)) - - r - } ensuring(res => iplContent(res) == iplContent(l) && iplSizeFun(res) == iplSizeFun(l)) - - def reverse(l: List): List = { - var r: List = Nil() - var l2: List = l - - (while(!l2.isInstanceOf[Nil]) { - val Cons(head, tail) = l2 - l2 = tail - r = Cons(head, r) - }) invariant(content(r) ++ content(l2) == content(l) && sizeFun(r) + sizeFun(l2) == sizeFun(l)) - - r - } ensuring(res => content(res) == content(l) && sizeFun(res) == sizeFun(l)) - - def listEqReverse(l: List): Boolean = { - l == reverse(l) - } ensuring(_ == true) - - def append(l1 : List, l2 : List) : List = { - var r: List = l2 - var tmp: List = reverse(l1) - - (while(!tmp.isInstanceOf[Nil]) { - val Cons(head, tail) = tmp - tmp = tail - r = Cons(head, r) - }) invariant(content(r) ++ content(tmp) == content(l1) ++ content(l2)) - - r - } ensuring(content(_) == content(l1) ++ content(l2)) - - def appendBuggy(l1 : List, l2 : List) : List = { - var r: List = l2 - var tmp: List = l1 - - while(!tmp.isInstanceOf[Nil]) { - val Cons(head, tail) = tmp - tmp = tail - r = Cons(head, r) - } - - r - } - - def appendEqAppendBuggy(l1: List, l2: List): Boolean = { - append(l1, l2) == appendBuggy(l1, l2) - } ensuring(_ == true) - -} -- GitLab