Testing Basics
Table Cases
A table-driven test runs the same check over several input values.
Count passing cases
table_cases.swift
Replay: real traced execution (multi-file project)
let multiplier = 2
let inputs = [1, 2, 3]
let expected = [2, 4, 6]
var passed = 0
for index in 0..<inputs.count {
let actual = inputs[index] * multiplier
if actual == expected[index] {
passed += 1
}
}
let message = "passed=\(passed)/\(inputs.count)"
print(message)
let multiplier = 3
let inputs = [1, 2, 3]
let expected = [2, 4, 6]
var passed = 0
for index in 0..<inputs.count {
let actual = inputs[index] * multiplier
if actual == expected[index] {
passed += 1
}
}
let message = "passed=\(passed)/\(inputs.count)"
print(message)
let multiplier = 4
let inputs = [1, 2, 3]
let expected = [2, 4, 6]
var passed = 0
for index in 0..<inputs.count {
let actual = inputs[index] * multiplier
if actual == expected[index] {
passed += 1
}
}
let message = "passed=\(passed)/\(inputs.count)"
print(message)
multiplier ← 2, inputs ← [1, 2, 3], expected ← [2, 4, 6], passed ← 0
1let multiplier→ 2 = 2 //@multiplier=3, 42let inputs→ [1, 2, 3] = [1, 2, 3]3let expected→ [2, 4, 6] = [2, 4, 6]4var passed→ 0 = 0actual ← 2
pass 1 of 36for index0 in 0..<inputs.count3 {7 let actual→ 2 = inputs[index]1 * multiplier28 if actual == expected[index] {All 3 passes — pass 1 is the card above pass indexinputs[index]actual1 0 1 2 2 1 2 4 3 2 3 6 if actual == expected[index]
pass 1 of 37let actual = inputs[index] * multiplier8if actual2 == expected[index]2 {9 passed0 += 110}All 3 passes — pass 1 is the card above pass actualexpected[index]passed1 2 2 0 2 4 4 1 3 6 6 2 message ← passed=3/3
13let message→ passed=3/3 = "passed=\(passed3)/\(inputs.count3)"1415print(messagepassed=3/3)outputpassed=3/3
multiplier ← 3, inputs ← [1, 2, 3], expected ← [2, 4, 6], passed ← 0
1let multiplier→ 3 = 32let inputs→ [1, 2, 3] = [1, 2, 3]3let expected→ [2, 4, 6] = [2, 4, 6]4var passed→ 0 = 0actual ← 3
pass 1 of 36for index0 in 0..<inputs.count3 {7 let actual→ 3 = inputs[index]1 * multiplier38 if actual == expected[index] {All 3 passes — pass 1 is the card above pass indexinputs[index]actual1 0 1 3 2 1 2 6 3 2 3 9 message ← passed=0/3
13let message→ passed=0/3 = "passed=\(passed0)/\(inputs.count3)"1415print(messagepassed=0/3)outputpassed=0/3
multiplier ← 4, inputs ← [1, 2, 3], expected ← [2, 4, 6], passed ← 0
1let multiplier→ 4 = 42let inputs→ [1, 2, 3] = [1, 2, 3]3let expected→ [2, 4, 6] = [2, 4, 6]4var passed→ 0 = 0actual ← 4
pass 1 of 36for index0 in 0..<inputs.count3 {7 let actual→ 4 = inputs[index]1 * multiplier48 if actual == expected[index] {All 3 passes — pass 1 is the card above pass indexinputs[index]actual1 0 1 4 2 1 2 8 3 2 3 12 message ← passed=0/3
13let message→ passed=0/3 = "passed=\(passed0)/\(inputs.count3)"1415print(messagepassed=0/3)outputpassed=0/3
table-driven test
A loop can apply one testing rule to each input and count how many cases pass.