Table tests run the same check against a small list of inputs and expected outputs.

table test A table test stores example cases as data, then loops over them with one shared check.

Table Tests

case_count
table_tests.rb
Replay: real traced execution (multi-file project)
def square(number)
  number * number
end

case_count = 3
cases = [
  [1, 1],
  [2, 4],
  [3, 9],
  [4, 16]
]

selected_cases = cases.first(case_count)
passed_count = 0

selected_cases.each do |input, expected|
  actual = square(input)
  passed_count += 1 if actual == expected
end

puts "cases=#{selected_cases.length}"
puts "passed=#{passed_count}"
puts "all_passed=#{passed_count == selected_cases.length}"
def square(number)
  number * number
end

case_count = 2
cases = [
  [1, 1],
  [2, 4],
  [3, 9],
  [4, 16]
]

selected_cases = cases.first(case_count)
passed_count = 0

selected_cases.each do |input, expected|
  actual = square(input)
  passed_count += 1 if actual == expected
end

puts "cases=#{selected_cases.length}"
puts "passed=#{passed_count}"
puts "all_passed=#{passed_count == selected_cases.length}"
def square(number)
  number * number
end

case_count = 4
cases = [
  [1, 1],
  [2, 4],
  [3, 9],
  [4, 16]
]

selected_cases = cases.first(case_count)
passed_count = 0

selected_cases.each do |input, expected|
  actual = square(input)
  passed_count += 1 if actual == expected
end

puts "cases=#{selected_cases.length}"
puts "passed=#{passed_count}"
puts "all_passed=#{passed_count == selected_cases.length}"
  1. case_count ← 3, cases ← [[1, 1], [2, 4], [3, 9], [4, 16]], selected_cases ← [[1, 1], [2, 4], [3, 9]]

    5case_count→ 3 = 3  #@case_count=2, 46cases→ [[1, 1], [2, 4], [3, 9], [4, 16]] = [7  [1, 1],8  [2, 4],9  [3, 9],10  [4, 16]11]1213selected_cases→ [[1, 1], [2, 4], [3, 9]] = cases.first(case_count)[[1, 1], [2, 4], [3, 9]]14passed_count→ 0 = 01516selected_cases[[1, 1], [2, 4], [3, 9]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  2. do |input, expected|

    pass 1 of 3
    16selected_cases.each do |input1, expected1|17  actual = square(input1)18  passed_count += 1 if actual == expected
    All 3 passes — pass 1 is the card above
    passinputexpected
    111
    224
    339
  3. def square(number)

    pass 1 of 3
    1def square(number1)2  number1 * number3end
    All 3 passes — pass 1 is the card above
    passnumber
    11
    22
    33
  4. selected_cases.each do |input, expected|

    16selected_cases[[1, 1], [2, 4], [3, 9]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  5. puts "cases=#{selected_cases.length}"

    21puts "cases=#{selected_cases.length3}"22puts "passed=#{passed_count3}"23puts "all_passed=#{passed_count3 == selected_cases.length3}"
    outputcases=3
    passed=3
    all_passed=true
  1. case_count ← 2, cases ← [[1, 1], [2, 4], [3, 9], [4, 16]], selected_cases ← [[1, 1], [2, 4]]

    5case_count→ 2 = 26cases→ [[1, 1], [2, 4], [3, 9], [4, 16]] = [7  [1, 1],8  [2, 4],9  [3, 9],10  [4, 16]11]1213selected_cases→ [[1, 1], [2, 4]] = cases.first(case_count)[[1, 1], [2, 4]]14passed_count→ 0 = 01516selected_cases[[1, 1], [2, 4]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  2. do |input, expected|

    pass 1 of 2
    16selected_cases.each do |input1, expected1|17  actual = square(input1)18  passed_count += 1 if actual == expected
  3. def square(number)

    pass 1 of 2
    1def square(number1)2  number1 * number3end
  4. do |input, expected|

    pass 2 of 2
    16selected_cases.each do |input2, expected4|17  actual = square(input2)18  passed_count += 1 if actual == expected
  5. def square(number)

    pass 2 of 2
    1def square(number2)2  number2 * number3end
  6. selected_cases.each do |input, expected|

    16selected_cases[[1, 1], [2, 4]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  7. puts "cases=#{selected_cases.length}"

    21puts "cases=#{selected_cases.length2}"22puts "passed=#{passed_count2}"23puts "all_passed=#{passed_count2 == selected_cases.length2}"
    outputcases=2
    passed=2
    all_passed=true
  1. case_count ← 4, cases ← [[1, 1], [2, 4], [3, 9], [4, 16]], selected_cases ← [[1, 1], [2, 4], [3, 9], [4, 16]]

    5case_count→ 4 = 46cases→ [[1, 1], [2, 4], [3, 9], [4, 16]] = [7  [1, 1],8  [2, 4],9  [3, 9],10  [4, 16]11]1213selected_cases→ [[1, 1], [2, 4], [3, 9], [4, 16]] = cases.first(case_count)[[1, 1], [2, 4], [3, 9], [4, 16]]14passed_count→ 0 = 01516selected_cases[[1, 1], [2, 4], [3, 9], [4, 16]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  2. do |input, expected|

    pass 1 of 4
    16selected_cases.each do |input1, expected1|17  actual = square(input1)18  passed_count += 1 if actual == expected
    All 4 passes — pass 1 is the card above
    passinputexpected
    111
    224
    339
    4416
  3. def square(number)

    pass 1 of 4
    1def square(number1)2  number1 * number3end
    All 4 passes — pass 1 is the card above
    passnumber
    11
    22
    33
    44
  4. selected_cases.each do |input, expected|

    16selected_cases[[1, 1], [2, 4], [3, 9], [4, 16]].each do |input, expected|17  actual = square(input)18  passed_count += 1 if actual == expected19end
  5. puts "cases=#{selected_cases.length}"

    21puts "cases=#{selected_cases.length4}"22puts "passed=#{passed_count4}"23puts "all_passed=#{passed_count4 == selected_cases.length4}"
    outputcases=4
    passed=4
    all_passed=true