Finished assignement 6
This commit is contained in:
parent
eb61232e30
commit
ae818bc287
@ -7,12 +7,60 @@ import Prop.{BooleanOperators => _, _}
|
|||||||
|
|
||||||
abstract class QuickCheckHeap extends Properties("Heap") with IntHeap {
|
abstract class QuickCheckHeap extends Properties("Heap") with IntHeap {
|
||||||
|
|
||||||
lazy val genHeap: Gen[H] = ???
|
lazy val genHeap: Gen[H] = for {
|
||||||
|
a <- arbitrary[Int]
|
||||||
|
h <- oneOf(const(empty), genHeap)
|
||||||
|
} yield insert(a, h)
|
||||||
|
|
||||||
implicit lazy val arbHeap: Arbitrary[H] = Arbitrary(genHeap)
|
implicit lazy val arbHeap: Arbitrary[H] = Arbitrary(genHeap)
|
||||||
|
|
||||||
|
property("min1") = forAll { (a: Int) =>
|
||||||
|
val h = insert(a, empty)
|
||||||
|
findMin(h) == a
|
||||||
|
}
|
||||||
|
|
||||||
property("gen1") = forAll { (h: H) =>
|
property("gen1") = forAll { (h: H) =>
|
||||||
val m = if isEmpty(h) then 0 else findMin(h)
|
val m = if isEmpty(h) then 0 else findMin(h)
|
||||||
findMin(insert(m, h)) == m
|
findMin(insert(m, h)) == m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property("smallest") = forAll { (a: Int, b: Int) =>
|
||||||
|
val h = insert(b, insert(a, empty))
|
||||||
|
val min = if (a<b) then a else b
|
||||||
|
if (a==b) true else
|
||||||
|
findMin(h) == min
|
||||||
|
}
|
||||||
|
|
||||||
|
property("deleteSingle") = forAll { (a: Int) =>
|
||||||
|
val h = insert(a, empty)
|
||||||
|
val h1 = deleteMin(h)
|
||||||
|
isEmpty(h1)
|
||||||
|
}
|
||||||
|
|
||||||
|
def multiMins(h: H, l: List[Int]): List[Int] = {
|
||||||
|
if (isEmpty(h)) then l
|
||||||
|
else findMin(h) :: multiMins(deleteMin(h), l)
|
||||||
|
}
|
||||||
|
|
||||||
|
property("multiMins") = forAll { (h1: H) =>
|
||||||
|
val xs = multiMins(h1, Nil)
|
||||||
|
xs == xs.sorted
|
||||||
|
}
|
||||||
|
|
||||||
|
property("meldMin") = forAll { (h1: H, h2: H) =>
|
||||||
|
val min1 = findMin(h1)
|
||||||
|
val min2 = findMin(h2)
|
||||||
|
val m = meld(h1, h2)
|
||||||
|
val minMeld = findMin(m)
|
||||||
|
minMeld == min1 || minMeld == min2
|
||||||
|
}
|
||||||
|
|
||||||
|
property("meldMinMove") = forAll { (h1: H, h2: H) =>
|
||||||
|
val meld1 = meld(h1, h2)
|
||||||
|
val min1 = findMin(h1)
|
||||||
|
val meld2 = meld(deleteMin(h1), insert(min1, h2))
|
||||||
|
val xs1 = multiMins(meld1, Nil)
|
||||||
|
val xs2 = multiMins(meld2, Nil)
|
||||||
|
xs1 == xs2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user