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

minInput
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)
  }
}
  1. 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) {
  2. for ((input, expected) <- cases)

    pass 1 of 3
    9var 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
    passinputexpected
    113
    226
    339
  3. def triple(n: Int): Int =

    pass 1 of 3
    1object Main {2  def triple(n1: Int): Int = {3    n1 * 34  }
    All 3 passes — pass 1 is the card above
    passn
    11
    22
    33
  4. passes ← 1

    pass 1 of 3
    10for ((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
    passinputexpectedpasses
    1130 1
    2261 2
    3392 3
  5. println("cases=" + cases.length)

    16    println("cases=" + cases.length3)17    println("passes=" + passes3)18  }19}
    outputcases=3
    passes=3
  1. 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) {
  2. for ((input, expected) <- cases)

    pass 1 of 3
    9var 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
    passinputexpectednminInputpasses
    113
    226220 1
    339321 2
  3. def triple(n: Int): Int =

    pass 1 of 2
    1object Main {2  def triple(n2: Int): Int = {3    n2 * 34  }
  4. passes ← 1

    pass 1 of 2
    10for ((input, expected) <- cases) {11  if (input2 >= minInput2 && triple(input) == expected6) {12    passes→ 1 = passes + 113  }14}
  5. def triple(n: Int): Int =

    pass 2 of 2
    1object Main {2  def triple(n3: Int): Int = {3    n3 * 34  }
  6. passes ← 2

    pass 2 of 2
    10for ((input, expected) <- cases) {11  if (input3 >= minInput2 && triple(input) == expected9) {12    passes→ 2 = passes + 113  }14}
  7. println("cases=" + cases.length)

    16    println("cases=" + cases.length3)17    println("passes=" + passes2)18  }19}
    outputcases=3
    passes=2
  1. 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) {
  2. for ((input, expected) <- cases)

    pass 1 of 3
    9var 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
    passinputexpectednminInputpasses
    113
    226
    339330 1
  3. def triple(n: Int): Int =

    1object Main {2  def triple(n3: Int): Int = {3    n3 * 34  }
  4. passes ← 1

    10for ((input, expected) <- cases) {11  if (input3 >= minInput3 && triple(input) == expected9) {12    passes→ 1 = passes + 113  }14}
  5. println("cases=" + cases.length)

    16    println("cases=" + cases.length3)17    println("passes=" + passes1)18  }19}
    outputcases=3
    passes=1