From 7a316cb10097bfa5b9234243a3ee7ab7ed7cfb55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Thu, 12 Apr 2012 18:41:33 +0200
Subject: [PATCH] more examples

---
 mytest/Add.scala          | 25 +++++++++++++++++++++++++
 mytest/Bubble.scala       |  2 ++
 mytest/LinearSearch.scala |  2 ++
 mytest/MaxSum.scala       | 28 ++++++++++++++++++++++++----
 mytest/Mult.scala         | 26 ++++++++++++++++++++++++++
 5 files changed, 79 insertions(+), 4 deletions(-)
 create mode 100644 mytest/Add.scala
 create mode 100644 mytest/Mult.scala

diff --git a/mytest/Add.scala b/mytest/Add.scala
new file mode 100644
index 000000000..5d125e3c7
--- /dev/null
+++ b/mytest/Add.scala
@@ -0,0 +1,25 @@
+import leon.Utils._
+
+/* VSTTE 2008 - Dafny paper */
+
+object Add {
+
+  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)
+
+}
diff --git a/mytest/Bubble.scala b/mytest/Bubble.scala
index 4312fed85..33ad5c103 100644
--- a/mytest/Bubble.scala
+++ b/mytest/Bubble.scala
@@ -1,5 +1,7 @@
 import leon.Utils._
 
+/* The calculus of Computation textbook */
+
 object Bubble {
 
   def sort(a: Map[Int, Int], size: Int): Map[Int, Int] = ({
diff --git a/mytest/LinearSearch.scala b/mytest/LinearSearch.scala
index 35e7cb300..e91a3f267 100644
--- a/mytest/LinearSearch.scala
+++ b/mytest/LinearSearch.scala
@@ -1,5 +1,7 @@
 import leon.Utils._
 
+/* The calculus of Computation textbook */
+
 object LinearSearch {
 
   def linearSearch(a: Map[Int, Int], size: Int, c: Int): Boolean = ({
diff --git a/mytest/MaxSum.scala b/mytest/MaxSum.scala
index 6dc8d3b99..07c5d12ab 100644
--- a/mytest/MaxSum.scala
+++ b/mytest/MaxSum.scala
@@ -1,5 +1,7 @@
 import leon.Utils._
 
+/* VSTTE 2010 challenge 1 */
+
 object MaxSum {
 
 
@@ -9,16 +11,34 @@ object MaxSum {
     var max = 0
     var i = 0
     (while(i < size) {
-
       if(max < a(i)) 
         max = a(i)
-      sum + sum + a(i)
-    }) invariant (sum <= i * max)
+      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)
     (sum, max)
   }) ensuring(res => res._1 <= size * 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 <= 10 && isArray(a, size))
+    require(size <= 5 && isArray(a, size))
     def rec(i: Int): Boolean = {
       require(i >= 0)
       if(i >= size) 
diff --git a/mytest/Mult.scala b/mytest/Mult.scala
new file mode 100644
index 000000000..417e9e9cd
--- /dev/null
+++ b/mytest/Mult.scala
@@ -0,0 +1,26 @@
+import leon.Utils._
+
+/* VSTTE 2008 - Dafny paper */
+
+object Mult {
+
+  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)
+
+}
+
-- 
GitLab