diff --git a/pldi2011-testcases/RedBlackTree.scala b/pldi2011-testcases/RedBlackTree.scala index 7153bba2f453c01323a8fc60c86f646af27e8951..87d5788af0b78d8cf588a9b72ab5e9a5c291694a 100644 --- a/pldi2011-testcases/RedBlackTree.scala +++ b/pldi2011-testcases/RedBlackTree.scala @@ -66,14 +66,14 @@ object RedBlackTree { makeBlack(ins(x, t)) } ensuring (res => content(res) == content(t) ++ Set(x) && redNodesHaveBlackChildren(res)) -// def buggyAdd(x: Int, t: Tree): Tree = { -// require(redNodesHaveBlackChildren(t)) -// // makeBlack(ins(x, t)) -// ins(x, t) -// } ensuring (res => content(res) == content(t) ++ Set(x) && redNodesHaveBlackChildren(res)) + def buggyAdd(x: Int, t: Tree): Tree = { + require(redNodesHaveBlackChildren(t)) + // makeBlack(ins(x, t)) + ins(x, t) + } ensuring (res => content(res) == content(t) ++ Set(x) && redNodesHaveBlackChildren(res)) def balance(c: Color, a: Tree, x: Int, b: Tree): Tree = { - require( + /*require( Node(c,a,x,b) match { case Node(Black(),Node(Red(),Node(Red(),a,_,b),_,c),_,d) => redNodesHaveBlackChildren(a) && @@ -97,7 +97,7 @@ object RedBlackTree { redNodesHaveBlackChildren(d) case t => redDescHaveBlackChildren(t) } - ) + )*/ Node(c,a,x,b) match { case Node(Black(),Node(Red(),Node(Red(),a,xV,b),yV,c),zV,d) => Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) @@ -109,5 +109,19 @@ object RedBlackTree { Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) case Node(c,a,xV,b) => Node(c,a,xV,b) } - } ensuring (res => content(res) == content(Node(c,a,x,b)) && redDescHaveBlackChildren(res)) + } ensuring (res => content(res) == content(Node(c,a,x,b)) ) // && redDescHaveBlackChildren(res)) + + def buggyBalance(c: Color, a: Tree, x: Int, b: Tree): Tree = { + Node(c,a,x,b) match { + case Node(Black(),Node(Red(),Node(Red(),a,xV,b),yV,c),zV,d) => + Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) + case Node(Black(),Node(Red(),a,xV,Node(Red(),b,yV,c)),zV,d) => + Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) + case Node(Black(),a,xV,Node(Red(),Node(Red(),b,yV,c),zV,d)) => + Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) + case Node(Black(),a,xV,Node(Red(),b,yV,Node(Red(),c,zV,d))) => + Node(Red(),Node(Black(),a,xV,b),yV,Node(Black(),c,zV,d)) + } + } ensuring (res => content(res) == content(Node(c,a,x,b)) ) // && redDescHaveBlackChildren(res)) + } diff --git a/run-evaluation b/run-evaluation index 030e8b4311c17578a90db5bda5fc9c154a93ccec..0100f4cc26758bbf5e3077e1beac172560fccb24 100755 --- a/run-evaluation +++ b/run-evaluation @@ -3,12 +3,15 @@ ts=`date +%F-%R` pldi="pldi2011-testcases" files=( ${pldi}"/AssociativeList.scala" ${pldi}/"InsertionSort.scala" ${pldi}"/RedBlackTree.scala" ${pldi}"/PropositionalLogic.scala" "testcases/ListWithSize.scala") +#files=( ${pldi}"/RedBlackTree.scala" ) if [ "$#" -lt "1" ] then echo "Please provide an unrolling value" exit 1 fi +rm -rf summary + for f in ${files[@]} do ./funcheck CAV $f @@ -16,6 +19,13 @@ done mv summary summary-CAV-${ts} +for f in ${files[@]} +do + ./funcheck CAV prune $f +done + +mv summary summary-CAV-prune-${ts} + for f in ${files[@]} do ./funcheck PLDI unrolling=${1} $f diff --git a/testcases/ListWithSize.scala b/testcases/ListWithSize.scala index 33a4f7a3249771de172fc1bdb9ddf56c9c80927c..c74a21761a49811340510b7eb37d4ca168cfe0c9 100644 --- a/testcases/ListWithSize.scala +++ b/testcases/ListWithSize.scala @@ -97,12 +97,12 @@ object ListWithSize { def revAuxBroken(l1 : List, e : Int, l2 : List) : Boolean = { (append(reverse(l1), Cons(e,l2)) == reverse0(l1, l2)) - } holds + } // holds @induct def reverse0exposed(l1 : List, l2 : List) : Boolean = { (reverse0(l1, l2) == append(reverse(l1), l2)) - } holds + } // holds @induct def sizeAppend(l1 : List, l2 : List) : Boolean =