Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
SCALACHECK
Slide 2
Slide 2 text
SCALACHECK Pedro Matiello
[email protected]
@pmatiello
Slide 3
Slide 3 text
SCALACHECK • Property-based testing • Scala
Slide 4
Slide 4 text
PROPERTIES
Slide 5
Slide 5 text
PROPERTIES def sum(x:Int, y:Int) = x + y
Slide 6
Slide 6 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x)
Slide 7
Slide 7 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x) val commutativity = forAll { (x:Int, y:Int) => sum(x,y) == sum(y,x) }
Slide 8
Slide 8 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x) val commutativity = forAll { (x:Int, y:Int) => sum(x,y) == sum(y,x) }
Slide 9
Slide 9 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x) val commutativity = forAll { (x:Int, y:Int) => sum(x,y) == sum(y,x) } org.scalacheck.Prop.forAll
Slide 10
Slide 10 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x) val commutativity = forAll { (x:Int, y:Int) => sum(x,y) == sum(y,x) } commutativity.check
Slide 11
Slide 11 text
PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y : sum(x,y) = sum(y,x) val commutativity = forAll { (x:Int, y:Int) => sum(x,y) == sum(y,x) } commutativity.check + OK, passed 100 tests
Slide 12
Slide 12 text
CONDITIONAL PROPERTIES
Slide 13
Slide 13 text
CONDITIONAL PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y>0 : sum(x,y) > x
Slide 14
Slide 14 text
CONDITIONAL PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y>0 : sum(x,y) > x val greater = forAll { (x:Int, y:Int) => y > 0 ==> sum(x,y) > x }
Slide 15
Slide 15 text
CONDITIONAL PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y>0 : sum(x,y) > x val greater = forAll { (x:Int, y:Int) => y > 0 ==> sum(x,y) > x }
Slide 16
Slide 16 text
CONDITIONAL PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y>0 : sum(x,y) > x val greater = forAll { (x:Int, y:Int) => y > 0 ==> sum(x,y) > x } greater.check
Slide 17
Slide 17 text
CONDITIONAL PROPERTIES def sum(x:Int, y:Int) = x + y # Property: ∀x,y>0 : sum(x,y) > x val greater = forAll { (x:Int, y:Int) => y > 0 ==> sum(x,y) > x } greater.check ! Falsified after 2 passed tests. > ARG_0: 51047075 > ARG_1: 2096436573
Slide 18
Slide 18 text
CONDITIONAL PROPERTIES scala> 51047075 + 2096436573 res0: Int = -2147483648
Slide 19
Slide 19 text
CONDITIONAL PROPERTIES scala> 51047075 + 2096436573 res0: Int = -2147483648 scala> 51047075l + 2096436573l res1: Long = 2147483648
Slide 20
Slide 20 text
GENERATORS
Slide 21
Slide 21 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0
Slide 22
Slide 22 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0 val evenInt = arbitrary[Int] suchThat (_ % 2 == 0)
Slide 23
Slide 23 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0 val evenInt = arbitrary[Int] suchThat (_ % 2 == 0) org.scalacheck.Arbitrary.arbitrary
Slide 24
Slide 24 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0 val evenInt = arbitrary[Int] suchThat (_ % 2 == 0) forAll(evenInt, evenInt) { (x:Int, y:Int) => sum(x,y) % 2 == 0 }.check
Slide 25
Slide 25 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0 val evenInt = arbitrary[Int] suchThat (_ % 2 == 0) forAll(evenInt, evenInt) { (x:Int, y:Int) => sum(x,y) % 2 == 0 }.check
Slide 26
Slide 26 text
GENERATORS def sum(x:Int, y:Int) = x + y # ∀x,y, x%2=0,y%2=0 : sum(x,y)%2 = 0 val evenInt = arbitrary[Int] suchThat (_ % 2 == 0) forAll(evenInt, evenInt) { (x:Int, y:Int) => sum(x,y) % 2 == 0 }.check + OK, passed 100 tests
Slide 27
Slide 27 text
SCALACHECK Pedro Matiello
[email protected]
@pmatiello