Testing and Debugging
Table Driven Test
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
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);
}
}
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;for (int i = 0; i < inputs.length; i++)
pass 1 of 315for (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 pass iinputs[i]value1 0 -2 -2 2 1 0 — 3 2 5 — static int clampLow(int value)
pass 1 of 31public class TableDrivenTest {2 static int clampLow(int value-2) {3 if (value < 0) {All 3 passes — pass 1 is the card above pass value1 -2 2 0 3 5 if (value < 0)
2static int clampLow(int value) {3 if (value-2 < 0) {4 return 0;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 step0iactual ← 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 step1iactual ← 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 step2iSystem.out.println("failures=" + failures);
22 System.out.println("failures=" + failures0);23}outputfailures=0
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;for (int i = 0; i < inputs.length; i++)
pass 1 of 315for (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 pass iinputs[i]value1 0 -2 -3 2 1 0 -1 3 2 5 — static int clampLow(int value)
pass 1 of 31public class TableDrivenTest {2 static int clampLow(int value-3) {3 if (value < 0) {All 3 passes — pass 1 is the card above pass value1 -3 2 -1 3 4 if (value < 0)
pass 1 of 22static int clampLow(int value) {3 if (value-3 < 0) {4 return 0;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 step0iif (value < 0)
pass 2 of 22static int clampLow(int value) {3 if (value-1 < 0) {4 return 0;5 }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 step1iactual ← 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 step2ifailures ← 1
16int actual = clampLow(inputs[i] + offset);17if (actual4 != expected[i]5) {18 failures→ 1++;19}values this step2iSystem.out.println("failures=" + failures);
22 System.out.println("failures=" + failures1);23}outputfailures=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;for (int i = 0; i < inputs.length; i++)
pass 1 of 315for (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 pass iinputs[i]1 0 -2 2 1 0 3 2 5 static int clampLow(int value)
pass 1 of 31public 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 pass value1 0 2 2 3 7 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 step0iactual ← 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 step1ifailures ← 1
pass 1 of 216int actual = clampLow(inputs[i] + offset);17if (actual2 != expected[i]0) {18 failures→ 1++;19}values this step1iactual ← 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 step2ifailures ← 2
pass 2 of 216int actual = clampLow(inputs[i] + offset);17if (actual7 != expected[i]5) {18 failures→ 2++;19}values this step2iSystem.out.println("failures=" + failures);
22 System.out.println("failures=" + failures2);23}outputfailures=2