Testing Basics
Table-Driven Cases
Drive checks from a list of input/expected pairs.
table-cases
A list of `(input, expected)` pairs is a small test table. Iterating the pairs runs the same check on each case and counts the passes.
Table-Driven Cases
TableCases.scala
Replay: real traced execution (multi-file project)
object Main {
def triple(n: Int): Int = {
n * 3
}
def main(args: Array[String]): Unit = {
val minInput = 1
val cases = List((1, 3), (2, 6), (3, 9))
var passes = 0
for ((input, expected) <- cases) {
if (input >= minInput && triple(input) == expected) {
passes = passes + 1
}
}
println("cases=" + cases.length)
println("passes=" + passes)
}
}
object Main {
def triple(n: Int): Int = {
n * 3
}
def main(args: Array[String]): Unit = {
val minInput = 2
val cases = List((1, 3), (2, 6), (3, 9))
var passes = 0
for ((input, expected) <- cases) {
if (input >= minInput && triple(input) == expected) {
passes = passes + 1
}
}
println("cases=" + cases.length)
println("passes=" + passes)
}
}
object Main {
def triple(n: Int): Int = {
n * 3
}
def main(args: Array[String]): Unit = {
val minInput = 3
val cases = List((1, 3), (2, 6), (3, 9))
var passes = 0
for ((input, expected) <- cases) {
if (input >= minInput && triple(input) == expected) {
passes = passes + 1
}
}
println("cases=" + cases.length)
println("passes=" + passes)
}
}
minInput ← 1, cases ← List((1,3), (2,6), (3,9)), passes ← 0
6def main(args: Array[String]): Unit = {7 val minInput→ 1 = 1 //@minInput=2, 38 val cases→ List((1,3), (2,6), (3,9)) = List((1, 3), (2, 6), (3, 9))9 var passes→ 0 = 010 for ((input, expected) <- cases) {11 if (input >= minInput && triple(input) == expected) {for ((input, expected) <- cases)
pass 1 of 39var passes = 010for ((input1, expected3) <- casesList((1,3), (2,6), (3,9))) {11 if (input >= minInput && triple(input) == expected) {All 3 passes — pass 1 is the card above pass inputexpected1 1 3 2 2 6 3 3 9 def triple(n: Int): Int =
pass 1 of 31object Main {2 def triple(n1: Int): Int = {3 n1 * 34 }All 3 passes — pass 1 is the card above pass n1 1 2 2 3 3 passes ← 1
pass 1 of 310for ((input, expected) <- cases) {11 if (input1 >= minInput1 && triple(input) == expected3) {12 passes→ 1 = passes + 113 }14}All 3 passes — pass 1 is the card above pass inputexpectedpasses1 1 3 0 → 1 2 2 6 1 → 2 3 3 9 2 → 3 println("cases=" + cases.length)
16 println("cases=" + cases.length3)17 println("passes=" + passes3)18 }19}outputcases=3 passes=3
minInput ← 2, cases ← List((1,3), (2,6), (3,9)), passes ← 0
6def main(args: Array[String]): Unit = {7 val minInput→ 2 = 28 val cases→ List((1,3), (2,6), (3,9)) = List((1, 3), (2, 6), (3, 9))9 var passes→ 0 = 010 for ((input, expected) <- cases) {11 if (input >= minInput && triple(input) == expected) {for ((input, expected) <- cases)
pass 1 of 39var passes = 010for ((input1, expected3) <- casesList((1,3), (2,6), (3,9))) {11 if (input >= minInput && triple(input) == expected) {All 3 passes — pass 1 is the card above pass inputexpectednminInputpasses1 1 3 — — — 2 2 6 2 2 0 → 1 3 3 9 3 2 1 → 2 def triple(n: Int): Int =
pass 1 of 21object Main {2 def triple(n2: Int): Int = {3 n2 * 34 }passes ← 1
pass 1 of 210for ((input, expected) <- cases) {11 if (input2 >= minInput2 && triple(input) == expected6) {12 passes→ 1 = passes + 113 }14}def triple(n: Int): Int =
pass 2 of 21object Main {2 def triple(n3: Int): Int = {3 n3 * 34 }passes ← 2
pass 2 of 210for ((input, expected) <- cases) {11 if (input3 >= minInput2 && triple(input) == expected9) {12 passes→ 2 = passes + 113 }14}println("cases=" + cases.length)
16 println("cases=" + cases.length3)17 println("passes=" + passes2)18 }19}outputcases=3 passes=2
minInput ← 3, cases ← List((1,3), (2,6), (3,9)), passes ← 0
6def main(args: Array[String]): Unit = {7 val minInput→ 3 = 38 val cases→ List((1,3), (2,6), (3,9)) = List((1, 3), (2, 6), (3, 9))9 var passes→ 0 = 010 for ((input, expected) <- cases) {11 if (input >= minInput && triple(input) == expected) {for ((input, expected) <- cases)
pass 1 of 39var passes = 010for ((input1, expected3) <- casesList((1,3), (2,6), (3,9))) {11 if (input >= minInput && triple(input) == expected) {All 3 passes — pass 1 is the card above pass inputexpectednminInputpasses1 1 3 — — — 2 2 6 — — — 3 3 9 3 3 0 → 1 def triple(n: Int): Int =
1object Main {2 def triple(n3: Int): Int = {3 n3 * 34 }passes ← 1
10for ((input, expected) <- cases) {11 if (input3 >= minInput3 && triple(input) == expected9) {12 passes→ 1 = passes + 113 }14}println("cases=" + cases.length)
16 println("cases=" + cases.length3)17 println("passes=" + passes1)18 }19}outputcases=3 passes=1