diff --git a/testcases/ListWithSize.scala b/testcases/ListWithSize.scala index fc1eac3a14e3ffde06c95472e8364c34e6cc1ab1..ee86f09792923f489ded2a30c7f06debd8f7f68e 100644 --- a/testcases/ListWithSize.scala +++ b/testcases/ListWithSize.scala @@ -44,6 +44,11 @@ object ListWithSize { append(l, Nil()) == l } ensuring(_ == true) + @induct + def allListsAreEmpty(l : List) : Boolean = { + allListsAreEmpty(l) && (l == Nil()) + } ensuring (_ == true) + def propAppend2(l : List) : Boolean = (l match { case Nil() => propAppend1(l) case Cons(x,xs) => (!propAppend1(xs) || propAppend1(l)) diff --git a/testcases/RedBlackTree.scala b/testcases/RedBlackTree.scala index 0edbb64f9d3a0fc5ae999f19453855f0db7f7f87..9cb55c57463e45be93a370f0b0afdd2913ece1ca 100644 --- a/testcases/RedBlackTree.scala +++ b/testcases/RedBlackTree.scala @@ -15,13 +15,20 @@ object RedBlackTree { case Node(_, l, v, r) => content(l) ++ Set(v) ++ content(r) } + def size(t : Tree) : Int = t match { + case Empty() => 0 + case Node(_, l, v, r) => size(l) + 1 + size(r) + } + def ins(x : Int, t: Tree): Tree = (t match { case Empty() => Node(Red(),Empty(),x,Empty()) case Node(c,a,y,b) => if (x < y) balance(c, ins(x, a), y, b) else if (x == y) Node(c,a,y,b) else balance(c,a,y,ins(x, b)) - }) ensuring (content(_) == content(t) ++ Set(x)) + }) ensuring (res => + content(res) == content(t) ++ Set(x) && + size(t) <= size(res) && size(res) < size(t) + 2) def add(x: Int, t: Tree): Tree = { makeBlack(ins(x, t))