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.

active_cases
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
  1. inputs ← [1, 2, 3, 4]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]
    values this step[1, 2, 3, 4]inputs
  2. expected ← [2, 4, 6, 9]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 3
    values this step[2, 4, 6, 9]expected
  3. active_cases ← 3

    11expected = [2, 4, 6, 9]12active_cases = 313pass_count = 0
    values this step3active_cases
  4. pass_count ← 0

    12active_cases = 313pass_count = 014do i = 1, active_cases
    values this step0pass_count
  5. actual ← 2

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step2actual1i1inputs(i)
  6. pass_count ← 1

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step1pass_count2actual2expected(i)
  7. actual ← 4

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step4actual2i2inputs(i)
  8. pass_count ← 2

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step2pass_count4actual4expected(i)
  9. actual ← 6

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step6actual3i3inputs(i)
  10. pass_count ← 3

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step3pass_count6actual6expected(i)
  11. print '(I0, 1X, I0)', pass_count, active_cases

    17    end do18    print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demo
    output3 3
    values this step3pass_count3active_cases
  1. inputs ← [1, 2, 3, 4]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]
    values this step[1, 2, 3, 4]inputs
  2. expected ← [2, 4, 6, 9]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 2
    values this step[2, 4, 6, 9]expected
  3. active_cases ← 2

    11expected = [2, 4, 6, 9]12active_cases = 213pass_count = 0
    values this step2active_cases
  4. pass_count ← 0

    12active_cases = 213pass_count = 014do i = 1, active_cases
    values this step0pass_count
  5. actual ← 2

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step2actual1i1inputs(i)
  6. pass_count ← 1

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step1pass_count2actual2expected(i)
  7. actual ← 4

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step4actual2i2inputs(i)
  8. pass_count ← 2

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step2pass_count4actual4expected(i)
  9. print '(I0, 1X, I0)', pass_count, active_cases

    17    end do18    print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demo
    output2 2
    values this step2pass_count2active_cases
  1. inputs ← [1, 2, 3, 4]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]
    values this step[1, 2, 3, 4]inputs
  2. expected ← [2, 4, 6, 9]

    10inputs = [1, 2, 3, 4]11expected = [2, 4, 6, 9]12active_cases = 4
    values this step[2, 4, 6, 9]expected
  3. active_cases ← 4

    11expected = [2, 4, 6, 9]12active_cases = 413pass_count = 0
    values this step4active_cases
  4. pass_count ← 0

    12active_cases = 413pass_count = 014do i = 1, active_cases
    values this step0pass_count
  5. actual ← 2

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step2actual1i1inputs(i)
  6. pass_count ← 1

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step1pass_count2actual2expected(i)
  7. actual ← 4

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step4actual2i2inputs(i)
  8. pass_count ← 2

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step2pass_count4actual4expected(i)
  9. actual ← 6

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step6actual3i3inputs(i)
  10. pass_count ← 3

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step3pass_count6actual6expected(i)
  11. actual ← 8

    14do i = 1, active_cases15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 1
    values this step8actual4i4inputs(i)
  12. pass_count ← 3

    15    actual = inputs(i) * 216    if (actual == expected(i)) pass_count = pass_count + 117end do
    values this step3pass_count8actual9expected(i)
  13. print '(I0, 1X, I0)', pass_count, active_cases

    17    end do18    print '(I0, 1X, I0)', pass_count, active_cases19end program fixture_table_demo
    output3 4
    values 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.