A final report stage can count failed checks and compare the result with an allowed budget.

Program

Play the program to choose the failure budget and watch the report status update.

max_failures
report_status_pipeline.f90
Replay: real traced execution (multi-file project)
program report_status_pipeline_demo
    implicit none
    integer :: checks(4)
    integer :: max_failures
    integer :: failed
    integer :: i
    character(len=8) :: status

    checks = [0, 1, 0, 1]
    max_failures = 1
    failed = 0
    do i = 1, 4
        if (checks(i) /= 0) failed = failed + 1
    end do
    if (failed <= max_failures) then
        status = 'pass'
    else
        status = 'review'
    end if
    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)
end program report_status_pipeline_demo
program report_status_pipeline_demo
    implicit none
    integer :: checks(4)
    integer :: max_failures
    integer :: failed
    integer :: i
    character(len=8) :: status

    checks = [0, 1, 0, 1]
    max_failures = 0
    failed = 0
    do i = 1, 4
        if (checks(i) /= 0) failed = failed + 1
    end do
    if (failed <= max_failures) then
        status = 'pass'
    else
        status = 'review'
    end if
    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)
end program report_status_pipeline_demo
program report_status_pipeline_demo
    implicit none
    integer :: checks(4)
    integer :: max_failures
    integer :: failed
    integer :: i
    character(len=8) :: status

    checks = [0, 1, 0, 1]
    max_failures = 2
    failed = 0
    do i = 1, 4
        if (checks(i) /= 0) failed = failed + 1
    end do
    if (failed <= max_failures) then
        status = 'pass'
    else
        status = 'review'
    end if
    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)
end program report_status_pipeline_demo
  1. checks ← [0, 1, 0, 1]

    9checks = [0, 1, 0, 1]10max_failures = 1
    values this step[0, 1, 0, 1]checks
  2. max_failures ← 1

    9checks = [0, 1, 0, 1]10max_failures = 111failed = 0
    values this step1max_failures
  3. failed ← 0

    10max_failures = 111failed = 012do i = 1, 4
    values this step0failed
  4. i ← 1

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step1i
  5. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(1) /= 0
  6. i ← 2

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step2i
  7. failed ← 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step1failed.true.checks(2) /= 0
  8. i ← 3

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step3i
  9. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(3) /= 0
  10. i ← 4

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step4i
  11. failed ← 2

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step2failed.true.checks(4) /= 0
  12. if (failed <= max_failures) then

    14end do15if (failed <= max_failures) then16    status = 'pass'
    values this step.false.failed <= max_failures
  13. status ← review

    17else18    status = 'review'19end if
    values this stepreviewstatus
  14. print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)

    19    end if20    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)21end program report_status_pipeline_demo
    output2 1 review
    values this step2failed1max_failuresreviewstatus
  1. checks ← [0, 1, 0, 1]

    9checks = [0, 1, 0, 1]10max_failures = 0
    values this step[0, 1, 0, 1]checks
  2. max_failures ← 0

    9checks = [0, 1, 0, 1]10max_failures = 011failed = 0
    values this step0max_failures
  3. failed ← 0

    10max_failures = 011failed = 012do i = 1, 4
    values this step0failed
  4. i ← 1

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step1i
  5. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(1) /= 0
  6. i ← 2

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step2i
  7. failed ← 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step1failed.true.checks(2) /= 0
  8. i ← 3

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step3i
  9. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(3) /= 0
  10. i ← 4

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step4i
  11. failed ← 2

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step2failed.true.checks(4) /= 0
  12. if (failed <= max_failures) then

    14end do15if (failed <= max_failures) then16    status = 'pass'
    values this step.false.failed <= max_failures
  13. status ← review

    17else18    status = 'review'19end if
    values this stepreviewstatus
  14. print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)

    19    end if20    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)21end program report_status_pipeline_demo
    output2 0 review
    values this step2failed0max_failuresreviewstatus
  1. checks ← [0, 1, 0, 1]

    9checks = [0, 1, 0, 1]10max_failures = 2
    values this step[0, 1, 0, 1]checks
  2. max_failures ← 2

    9checks = [0, 1, 0, 1]10max_failures = 211failed = 0
    values this step2max_failures
  3. failed ← 0

    10max_failures = 211failed = 012do i = 1, 4
    values this step0failed
  4. i ← 1

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step1i
  5. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(1) /= 0
  6. i ← 2

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step2i
  7. failed ← 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step1failed.true.checks(2) /= 0
  8. i ← 3

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step3i
  9. if (checks(i) /= 0) failed = failed + 1

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step.false.checks(3) /= 0
  10. i ← 4

    11failed = 012do i = 1, 413    if (checks(i) /= 0) failed = failed + 1
    values this step4i
  11. failed ← 2

    12do i = 1, 413    if (checks(i) /= 0) failed = failed + 114end do
    values this step2failed.true.checks(4) /= 0
  12. if (failed <= max_failures) then

    14end do15if (failed <= max_failures) then16    status = 'pass'
    values this step.true.failed <= max_failures
  13. status ← pass

    15if (failed <= max_failures) then16    status = 'pass'17else
    values this steppassstatus
  14. print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)

    19    end if20    print '(I0, 1X, I0, 1X, A)', failed, max_failures, trim(status)21end program report_status_pipeline_demo
    output2 2 pass
    values this step2failed2max_failurespassstatus
failure budget `max_failures` is the allowed number of nonzero checks.
status The report status depends on the final count and budget.
final stage The pipeline turns raw checks into a compact report line.