diff --git a/testcases/SortedTree.scala b/testcases/SortedTree.scala index 3b69626ec8c5e4df2ac2707d3c68ae1b1cab263c..fcf05dfac17a5a549db68572a88700a6d1f2345f 100644 --- a/testcases/SortedTree.scala +++ b/testcases/SortedTree.scala @@ -54,7 +54,7 @@ object SortedTree { v < max && v > min case _ => true - }) + }) ensuring ( res => !res || (allGreaterThan(t, min) && allSmallerThan(t, max))) def isSortedMin(t: Tree, min: Int): Boolean = (t match { case Node(v, l, r) => @@ -62,7 +62,7 @@ object SortedTree { isSortedMin(r, v) && v > min case _ => true - }) + }) ensuring ( res => !res || allGreaterThan(t, min)) def isSortedMax(t: Tree, max: Int): Boolean = (t match { case Node(v, l, r) => @@ -70,7 +70,7 @@ object SortedTree { isSortedMinMax(r, v, max) && v < max case _ => true - }) + }) ensuring ( res => !res || allSmallerThan(t, max)) def isSorted(t: Tree): Boolean = (t match { case Node(v, l, r) => @@ -79,8 +79,8 @@ object SortedTree { case _ => true }) ensuring ( res => !res || (t match { case Node(v, l, r) => - allSmallerThan(l, v) && - allGreaterThan(r, v) + isSorted(l) && + isSorted(r) case Leaf() => true })) @@ -161,7 +161,7 @@ object SortedTree { (v == searchV) || contains1(l, searchV) || contains1(r, searchV) - }) ensuring(res => !res || (content(t) contains searchV)) + }) ensuring(_ == (content(t) contains searchV)) def contains2(t: Tree, searchV: Int): Boolean = { require(isMostlySorted(t)) @@ -176,20 +176,20 @@ object SortedTree { } else { true } - })} ensuring(res => !res || (content(t) contains searchV)) + })} ensuring(_ == (content(t) contains searchV)) - def containsBuggy(t: Tree, searchV: Int): Boolean = { - require(isMostlySorted(t)) + def contains3(t: Tree, searchV: Int): Boolean = { + require(isSorted(t)) (t match { case Leaf() => false case Node(v, l, r) => if (searchV > v) { - contains2(l, searchV) + contains3(r, searchV) } else if (searchV < v) { - contains2(r, searchV) + contains3(l, searchV) } else { true } - })} ensuring(res => !res || (content(t) contains searchV)) + })} ensuring(_ == (content(t) contains searchV)) }