12. (KTUVGZCORNG
val propMax = Prop.forAll { (x: Int, y: Int) =
val z = math.max(x, y)
(z == x || z == y) (z = x z = y)
}
propMax.check
+ OK, passed 100 tests.
13. (KTUVGZCORNG
7PKXGTUCN3WCPVKHKECVKQP∀
val propMax = Prop.forAll { (x: Int, y: Int) =
val z = math.max(x, y)
(z == x || z == y) (z = x z = y)
}
propMax.check
+ OK, passed 100 tests.
15. (KTUVGZCORNG
#DUVTCEVFGHKPKVKQPQH+PRWVU
val propMax = Prop.forAll { (x: Int, y: Int) =
val z = math.max(x, y)
(z == x || z == y) (z = x z = y)
}
propMax.check
+ OK, passed 100 tests.
%QORNGVGFGHKPKVKQPQHOCZ
7PKXGTUCN3WCPVKHKECVKQP∀
16. (KTUVGZCORNG
#DUVTCEVFGHKPKVKQPQH+PRWVU
val propMax = Prop.forAll { (x: Int, y: Int) =
val z = math.max(x, y)
(z == x || z == y) (z = x z = y)
}
propMax.check
+ OK, passed 100 tests.
%QORNGVGFGHKPKVKQPQHOCZ
7PKXGTUCN3WCPVKHKECVKQP∀
VGUVUJCXGDGGPTWP
23. 9GKIJVGFIGPGTCVQTYKVJ
HTGSWGPE[
val even = Gen.posNum[Int].suchThat(_ % 2 == 0)
val odd = Gen.posNum[Int].suchThat(_ % 2 == 1)
val number = Gen.frequency((2, even), (4, odd), (1, 0))
Prop.forAll(number) { i =
val label =
if (i == 0) zero
else if (i % 2 == 0) even
else odd
Prop.collect(label)(true)
}.check(1000)
+ OK, passed 1000 tests.
Collected test data:
57% odd
29% even
14% zero
24. 9GKIJVGFIGPGTCVQTYKVJ
HTGSWGPE[
GHKPGYGKIJVHQTGCEJ)GPGTCVQT
val even = Gen.posNum[Int].suchThat(_ % 2 == 0)
val odd = Gen.posNum[Int].suchThat(_ % 2 == 1)
val number = Gen.frequency((2, even), (4, odd), (1, 0))
Prop.forAll(number) { i =
val label =
if (i == 0) zero
else if (i % 2 == 0) even
else odd
Prop.collect(label)(true)
}.check(1000)
+ OK, passed 1000 tests.
Collected test data:
57% odd
29% even
14% zero
25. 9GKIJVGFIGPGTCVQTYKVJ
HTGSWGPE[
GHKPGYGKIJVHQTGCEJ)GPGTCVQT
val even = Gen.posNum[Int].suchThat(_ % 2 == 0)
val odd = Gen.posNum[Int].suchThat(_ % 2 == 1)
val number = Gen.frequency((2, even), (4, odd), (1, 0))
Prop.forAll(number) { i =
val label =
if (i == 0) zero
else if (i % 2 == 0) even
else odd
Prop.collect(label)(true)
}.check(1000)
+ OK, passed 1000 tests.
Collected test data:
57% odd
29% even
14% zero
GHKPGCNCDGNHQTGCEJ
MKPFQHXCNWG
26. )GPGTCVGCNKUV
sealed trait Coin
case object Head extends Coin
case object Tail extends Coin
#TDKVTCT[UKGFNKUVQHCoin
val coin = Gen.oneOf(Head, Tail)
(KZGFUKGFNKUVQHCoin
val coins = Gen.listOf(coin)
val threeCoins = Gen.listOfN(3, coin)
scala coins.sample
res1: Option[List[Coin]] = Some(List(Head, Tail, Head, Tail, …))
scala threeCoins.sample
res2: Option[List[Coin]] = Some(List(Head, Head, Tail))
35. 6GUVECUGTGUVTKEVKQPUECWVKQP
$GECTGHWNVQPQVDGVQQTGUVTKEVKXGKH[QWYCPV
5ECNC%JGEMDGCDNGVQRTQFWEGXCNWGU
val p = Prop.forAll { n: Int =
(n = 0 n % 2 == 0 n % 3 == 0) ==
n = 0
}
scala p.check
! Gave up after only 52 passed tests. 262 tests were discarded.
7UGKPUVGCFCEWUVQOIGPGTCVQT
val genNum = Gen.choose(0, Int.MaxValue)
.retryUntil(_ % 2 == 0)
.retryUntil(_ % 3 == 0)
val p = Prop.forAll(genNum) { x: Int = x = 0 }
scala p.check
+ OK, passed 100 tests.
36. 6GUVECUGUKORNKHKECVKQP
val p = Prop.forAll(
Gen.choose(0, Int.MaxValue) :| x,
Gen.choose(0, Int.MaxValue) :| y
) { case (x, y) =
add(x, y) = x add(x, y) = y
}
scala p.check
! Falsified after 0 passed tests.
x: 195667048
x_ORIGINAL: 1350546201
y: 1951816600
y_ORIGINAL: 2004457204
37. 6GUVECUGUKORNKHKECVKQP
val p = Prop.forAll(
Gen.choose(0, Int.MaxValue) :| x,
Gen.choose(0, Int.MaxValue) :| y
) { case (x, y) =
add(x, y) = x add(x, y) = y
}
scala p.check
! Falsified after 0 passed tests.
x: 195667048
x_ORIGINAL: 1350546201
y: 1951816600
y_ORIGINAL: 2004457204
195667048 + 1951816600 == Int.MaxValue + 1
38. 6GUVECUGUKORNKHKECVKQP
val p = Prop.forAll(
Gen.choose(0, Int.MaxValue) :| x,
Gen.choose(0, Int.MaxValue) :| y
) { case (x, y) =
add(x, y) = x add(x, y) = y
}
scala p.check
! Falsified after 0 passed tests.
x: 195667048
x_ORIGINAL: 1350546201
y: 1951816600
y_ORIGINAL: 2004457204
195667048 + 1951816600 == Int.MaxValue + 1
VGUVECUGUKORNKHKECVKQPOGEJCPKUOJCUHQWPFVJG
UKORNGUVVGUVECUGVJCVOCMGVJGVGUVHCKN
39. 6GUVECUGUKORNKHKECVKQP
val genListPosNum = Gen.listOf(Gen.choose(1, Int.MaxValue))
val p = Prop.forAll(genListPosNum :| positive numbers) { xs: List[Int] =
xs.sorted.foldLeft(Option(0)) {
case (mp, x) = mp.flatMap(p = if (p x) Some(x) else None)
}.isDefined
}
scala p.check
! Falsified after 6 passed tests.
positive numbers: List(1, 1)
positive numbers_ORIGINAL: List(1901315974, 963110019, 991102462)
40. 6GUVECUGUKORNKHKECVKQP
val genListPosNum = Gen.listOf(Gen.choose(1, Int.MaxValue))
val p = Prop.forAll(genListPosNum :| positive numbers) { xs: List[Int] =
xs.sorted.foldLeft(Option(0)) {
case (mp, x) = mp.flatMap(p = if (p x) Some(x) else None)
}.isDefined
}
scala p.check
! Falsified after 6 passed tests.
positive numbers: List(1, 1)
positive numbers_ORIGINAL: List(1901315974, 963110019, 991102462)
41. 6GUVECUGUKORNKHKECVKQP
val genListPosNum = Gen.listOf(Gen.choose(1, Int.MaxValue))
val p = Prop.forAll(genListPosNum :| positive numbers) { xs: List[Int] =
xs.sorted.foldLeft(Option(0)) {
case (mp, x) = mp.flatMap(p = if (p x) Some(x) else None)
}.isDefined
}
scala p.check
! Falsified after 6 passed tests.
positive numbers: List(1, 1)
positive numbers_ORIGINAL: List(1901315974, 963110019, 991102462)
42. +PVGITCVKQPYKVJ5RGEU
class SampleTest extends Specification with ScalaCheck {
Integer should {
have a max method in {
Prop.forAll { (x: Int, y: Int) =
val z = math.max(x, y)
(z == x || z == y) (z = x z = y)
}
}
}
52. 6GUVKPI/QPQKF.CYU
String Monoid should {
be associative in {
val genTriple = arbitrary[(String, String, String)]
Monoids.stringMonoid.Laws.monoidIsAssociative(genTriple)
}
have a zero in {
Monoids.stringMonoid.Laws.monoidHaveZero(arbitrary[String])
}
}