Testing Scientific Code
Fixture Table
Check Several Cases
A compact fixture table keeps inputs and expected outputs side by side, then loops over the active cases.
Program
Play the program to choose how many cases from the table are included.
fixture_table.f90
Replay: real traced execution (multi-file project)
program fixture_table_demo
implicit none
integer :: inputs(4)
integer :: expected(4)
integer :: active_cases
integer :: i
integer :: actual
integer :: pass_count
inputs = [1, 2, 3, 4]
expected = [2, 4, 6, 9]
active_cases = 3
pass_count = 0
do i = 1, active_cases
actual = inputs(i) * 2
if (actual == expected(i)) pass_count = pass_count + 1
end do
print '(I0, 1X, I0)', pass_count, active_cases
end program fixture_table_demo
program fixture_table_demo
implicit none
integer :: inputs(4)
integer :: expected(4)
integer :: active_cases
integer :: i
integer :: actual
integer :: pass_count
inputs = [1, 2, 3, 4]
expected = [2, 4, 6, 9]
active_cases = 2
pass_count = 0
do i = 1, active_cases
actual = inputs(i) * 2
if (actual == expected(i)) pass_count = pass_count + 1
end do
print '(I0, 1X, I0)', pass_count, active_cases
end program fixture_table_demo
program fixture_table_demo
implicit none
integer :: inputs(4)
integer :: expected(4)
integer :: active_cases
integer :: i
integer :: actual
integer :: pass_count
inputs = [1, 2, 3, 4]
expected = [2, 4, 6, 9]
active_cases = 4
pass_count = 0
do i = 1, active_cases
actual = inputs(i) * 2
if (actual == expected(i)) pass_count = pass_count + 1
end do
print '(I0, 1X, I0)', pass_count, active_cases
end program fixture_table_demo
inputs ← [1, 2, 3, 4]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]values this step[1, 2, 3, 4]inputsexpected ← [2, 4, 6, 9]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 3values this step[2, 4, 6, 9]expectedactive_cases ← 3
11expected = [2, 4, 6, 9]12active_cases = 313pass_count = 0values this step3active_casespass_count ← 0
12active_cases = 313pass_count = 014do i = 1, active_casesvalues this step0pass_countactual ← 2
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step2actual1i1inputs(i)pass_count ← 1
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step1pass_count2actual2expected(i)actual ← 4
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step4actual2i2inputs(i)pass_count ← 2
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step2pass_count4actual4expected(i)actual ← 6
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step6actual3i3inputs(i)pass_count ← 3
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step3pass_count6actual6expected(i)print '(I0, 1X, I0)', pass_count, active_cases
17 end do18 print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demooutput3 3values this step3pass_count3active_cases
inputs ← [1, 2, 3, 4]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]values this step[1, 2, 3, 4]inputsexpected ← [2, 4, 6, 9]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 2values this step[2, 4, 6, 9]expectedactive_cases ← 2
11expected = [2, 4, 6, 9]12active_cases = 213pass_count = 0values this step2active_casespass_count ← 0
12active_cases = 213pass_count = 014do i = 1, active_casesvalues this step0pass_countactual ← 2
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step2actual1i1inputs(i)pass_count ← 1
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step1pass_count2actual2expected(i)actual ← 4
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step4actual2i2inputs(i)pass_count ← 2
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step2pass_count4actual4expected(i)print '(I0, 1X, I0)', pass_count, active_cases
17 end do18 print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demooutput2 2values this step2pass_count2active_cases
inputs ← [1, 2, 3, 4]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]values this step[1, 2, 3, 4]inputsexpected ← [2, 4, 6, 9]
10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 4values this step[2, 4, 6, 9]expectedactive_cases ← 4
11expected = [2, 4, 6, 9]12active_cases = 413pass_count = 0values this step4active_casespass_count ← 0
12active_cases = 413pass_count = 014do i = 1, active_casesvalues this step0pass_countactual ← 2
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step2actual1i1inputs(i)pass_count ← 1
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step1pass_count2actual2expected(i)actual ← 4
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step4actual2i2inputs(i)pass_count ← 2
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step2pass_count4actual4expected(i)actual ← 6
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step6actual3i3inputs(i)pass_count ← 3
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step3pass_count6actual6expected(i)actual ← 8
14do i = 1, active_cases15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 1values this step8actual4i4inputs(i)pass_count ← 3
15 actual = inputs(i) * 216 if (actual == expected(i)) pass_count = pass_count + 117end dovalues this step3pass_count8actual9expected(i)print '(I0, 1X, I0)', pass_count, active_cases
17 end do18 print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demooutput3 4values this step3pass_count4active_cases
fixture table
Inputs and expected results live in arrays with matching positions.
active cases
`active_cases` lets a test run only a prefix of the table.
pass count
Counting passes gives a small summary without invoking a test framework.