A loop over small input and expected-output tables can test a method repeatedly.

test table Each array index represents one test case.
failure count Counting mismatches gives a compact summary of the test run.

Table Driven Test

offset
TableDrivenTest.java
Replay: real traced execution (multi-file project)
public class TableDrivenTest {
    static int clampLow(int value) {
        if (value < 0) {
            return 0;
        }
        return value;
    }

    public static void main(String[] args) {
        int offset = 0;
        int[] inputs = {-2, 0, 5};
        int[] expected = {0, 0, 5};
        int failures = 0;

        for (int i = 0; i < inputs.length; i++) {
            int actual = clampLow(inputs[i] + offset);
            if (actual != expected[i]) {
                failures++;
            }
        }

        System.out.println("failures=" + failures);
    }
}
public class TableDrivenTest {
    static int clampLow(int value) {
        if (value < 0) {
            return 0;
        }
        return value;
    }

    public static void main(String[] args) {
        int offset = -1;
        int[] inputs = {-2, 0, 5};
        int[] expected = {0, 0, 5};
        int failures = 0;

        for (int i = 0; i < inputs.length; i++) {
            int actual = clampLow(inputs[i] + offset);
            if (actual != expected[i]) {
                failures++;
            }
        }

        System.out.println("failures=" + failures);
    }
}
public class TableDrivenTest {
    static int clampLow(int value) {
        if (value < 0) {
            return 0;
        }
        return value;
    }

    public static void main(String[] args) {
        int offset = 2;
        int[] inputs = {-2, 0, 5};
        int[] expected = {0, 0, 5};
        int failures = 0;

        for (int i = 0; i < inputs.length; i++) {
            int actual = clampLow(inputs[i] + offset);
            if (actual != expected[i]) {
                failures++;
            }
        }

        System.out.println("failures=" + failures);
    }
}
  1. offset ← 0, failures ← 0

    9public static void main(String[] args) {10    int offset→ 0 = 0;  //@offset=-1, 211    int[] inputs = {-2, 0, 5};12    int[] expected = {0, 0, 5};13    int failures→ 0 = 0;
  2. for (int i = 0; i < inputs.length; i++)

    pass 1 of 3
    15for (int i0 = 0; i < inputs.length3; i++) {16    int actual = clampLow(inputs[i]-2 + offset0);17    if (actual != expected[i]) {
    All 3 passes — pass 1 is the card above
    passiinputs[i]value
    10-2-2
    210
    325
  3. static int clampLow(int value)

    pass 1 of 3
    1public class TableDrivenTest {2    static int clampLow(int value-2) {3        if (value < 0) {
    All 3 passes — pass 1 is the card above
    passvalue
    1-2
    20
    35
  4. if (value < 0)

    2static int clampLow(int value) {3    if (value-2 < 0) {4        return 0;5    }
  5. actual ← 0

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 0 = clampLow(inputs[i]-2 + offset0);17    if (actual != expected[i]) {
    values this step0i
  6. actual ← 0

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 0 = clampLow(inputs[i]0 + offset0);17    if (actual != expected[i]) {
    values this step1i
  7. actual ← 5

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 5 = clampLow(inputs[i]5 + offset0);17    if (actual != expected[i]) {
    values this step2i
  8. System.out.println("failures=" + failures);

    22    System.out.println("failures=" + failures0);23}
    outputfailures=0
  1. offset ← -1, failures ← 0

    9public static void main(String[] args) {10    int offset→ -1 = -1;11    int[] inputs = {-2, 0, 5};12    int[] expected = {0, 0, 5};13    int failures→ 0 = 0;
  2. for (int i = 0; i < inputs.length; i++)

    pass 1 of 3
    15for (int i0 = 0; i < inputs.length3; i++) {16    int actual = clampLow(inputs[i]-2 + offset-1);17    if (actual != expected[i]) {
    All 3 passes — pass 1 is the card above
    passiinputs[i]value
    10-2-3
    210-1
    325
  3. static int clampLow(int value)

    pass 1 of 3
    1public class TableDrivenTest {2    static int clampLow(int value-3) {3        if (value < 0) {
    All 3 passes — pass 1 is the card above
    passvalue
    1-3
    2-1
    34
  4. if (value < 0)

    pass 1 of 2
    2static int clampLow(int value) {3    if (value-3 < 0) {4        return 0;5    }
  5. actual ← 0

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 0 = clampLow(inputs[i]-2 + offset-1);17    if (actual != expected[i]) {
    values this step0i
  6. if (value < 0)

    pass 2 of 2
    2static int clampLow(int value) {3    if (value-1 < 0) {4        return 0;5    }
  7. actual ← 0

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 0 = clampLow(inputs[i]0 + offset-1);17    if (actual != expected[i]) {
    values this step1i
  8. actual ← 4

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 4 = clampLow(inputs[i]5 + offset-1);17    if (actual != expected[i]) {
    values this step2i
  9. failures ← 1

    16int actual = clampLow(inputs[i] + offset);17if (actual4 != expected[i]5) {18    failures→ 1++;19}
    values this step2i
  10. System.out.println("failures=" + failures);

    22    System.out.println("failures=" + failures1);23}
    outputfailures=1
  1. offset ← 2, failures ← 0

    9public static void main(String[] args) {10    int offset→ 2 = 2;11    int[] inputs = {-2, 0, 5};12    int[] expected = {0, 0, 5};13    int failures→ 0 = 0;
  2. for (int i = 0; i < inputs.length; i++)

    pass 1 of 3
    15for (int i0 = 0; i < inputs.length3; i++) {16    int actual = clampLow(inputs[i]-2 + offset2);17    if (actual != expected[i]) {
    All 3 passes — pass 1 is the card above
    passiinputs[i]
    10-2
    210
    325
  3. static int clampLow(int value)

    pass 1 of 3
    1public class TableDrivenTest {2    static int clampLow(int value0) {3        if (value < 0) {4            return 0;5        }6        return value0;7    }
    All 3 passes — pass 1 is the card above
    passvalue
    10
    22
    37
  4. actual ← 0

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 0 = clampLow(inputs[i]-2 + offset2);17    if (actual != expected[i]) {
    values this step0i
  5. actual ← 2

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 2 = clampLow(inputs[i]0 + offset2);17    if (actual != expected[i]) {
    values this step1i
  6. failures ← 1

    pass 1 of 2
    16int actual = clampLow(inputs[i] + offset);17if (actual2 != expected[i]0) {18    failures→ 1++;19}
    values this step1i
  7. actual ← 7

    15for (int i = 0; i < inputs.length; i++) {16    int actual→ 7 = clampLow(inputs[i]5 + offset2);17    if (actual != expected[i]) {
    values this step2i
  8. failures ← 2

    pass 2 of 2
    16int actual = clampLow(inputs[i] + offset);17if (actual7 != expected[i]5) {18    failures→ 2++;19}
    values this step2i
  9. System.out.println("failures=" + failures);

    22    System.out.println("failures=" + failures2);23}
    outputfailures=2