From 80c3df7377a8537d8d92257584a6663e8f6cc42c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Fri, 18 May 2012 09:50:49 +0200
Subject: [PATCH] remove invariants of BubbleSort to identify a clearer bug

---
 demo/BubbleSortBug.scala | 39 ++-------------------------------------
 1 file changed, 2 insertions(+), 37 deletions(-)

diff --git a/demo/BubbleSortBug.scala b/demo/BubbleSortBug.scala
index d8d1c4eb9..a25554f03 100644
--- a/demo/BubbleSortBug.scala
+++ b/demo/BubbleSortBug.scala
@@ -18,23 +18,9 @@ object BubbleSortBug {
           sa(j+1) = tmp
         }
         j = j + 1
-      }) invariant(
-            j >= 0 &&
-            j <= i &&
-            i < sa.length &&
-            sa.length >= 0 &&
-            partitioned(sa, 0, i, i+1, sa.length-1) &&
-            sorted(sa, i, sa.length-1) &&
-            partitioned(sa, 0, j, j+1, j+1)
-          )
+      }) invariant(j >= 0 && j <= i && i < sa.length)
       i = i - 1
-    }) invariant(
-          i >= 0 &&
-          i < sa.length &&
-          sa.length >= 0 &&
-          partitioned(sa, 0, i, i+1, sa.length-1) &&
-          sorted(sa, i, sa.length-1)
-       )
+    }) invariant(i >= 0 && i < sa.length)
     sa
   }) ensuring(res => sorted(res, 0, a.length-1))
 
@@ -50,25 +36,4 @@ object BubbleSortBug {
     isSorted
   }
 
-  def partitioned(a: Array[Int], l1: Int, u1: Int, l2: Int, u2: Int): Boolean = {
-    require(a.length >= 0 && l1 >= 0 && u1 < l2 && u2 < a.length)
-    if(l2 > u2 || l1 > u1)
-      true
-    else {
-      var i = l1
-      var j = l2
-      var isPartitionned = true
-      (while(i <= u1) {
-        j = l2
-        (while(j <= u2) {
-          if(a(i) > a(j))
-            isPartitionned = false
-          j = j + 1
-        }) invariant(j >= l2 && i <= u1)
-        i = i + 1
-      }) invariant(i >= l1)
-      isPartitionned
-    }
-  }
-
 }
-- 
GitLab