Pipeline Composition
Report Status Pipeline
Count Failures
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.
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
checks ← [0, 1, 0, 1]
9checks = [0, 1, 0, 1]10max_failures = 1values this step[0, 1, 0, 1]checksmax_failures ← 1
9checks = [0, 1, 0, 1]10max_failures = 111failed = 0values this step1max_failuresfailed ← 0
10max_failures = 111failed = 012do i = 1, 4values this step0failedi ← 1
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step1iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(1) /= 0i ← 2
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step2ifailed ← 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step1failed.true.checks(2) /= 0i ← 3
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step3iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(3) /= 0i ← 4
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step4ifailed ← 2
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step2failed.true.checks(4) /= 0if (failed <= max_failures) then
14end do15if (failed <= max_failures) then16 status = 'pass'values this step.false.failed <= max_failuresstatus ← review
17else18 status = 'review'19end ifvalues this stepreviewstatusprint '(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_demooutput2 1 reviewvalues this step2failed1max_failuresreviewstatus
checks ← [0, 1, 0, 1]
9checks = [0, 1, 0, 1]10max_failures = 0values this step[0, 1, 0, 1]checksmax_failures ← 0
9checks = [0, 1, 0, 1]10max_failures = 011failed = 0values this step0max_failuresfailed ← 0
10max_failures = 011failed = 012do i = 1, 4values this step0failedi ← 1
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step1iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(1) /= 0i ← 2
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step2ifailed ← 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step1failed.true.checks(2) /= 0i ← 3
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step3iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(3) /= 0i ← 4
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step4ifailed ← 2
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step2failed.true.checks(4) /= 0if (failed <= max_failures) then
14end do15if (failed <= max_failures) then16 status = 'pass'values this step.false.failed <= max_failuresstatus ← review
17else18 status = 'review'19end ifvalues this stepreviewstatusprint '(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_demooutput2 0 reviewvalues this step2failed0max_failuresreviewstatus
checks ← [0, 1, 0, 1]
9checks = [0, 1, 0, 1]10max_failures = 2values this step[0, 1, 0, 1]checksmax_failures ← 2
9checks = [0, 1, 0, 1]10max_failures = 211failed = 0values this step2max_failuresfailed ← 0
10max_failures = 211failed = 012do i = 1, 4values this step0failedi ← 1
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step1iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(1) /= 0i ← 2
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step2ifailed ← 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step1failed.true.checks(2) /= 0i ← 3
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step3iif (checks(i) /= 0) failed = failed + 1
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step.false.checks(3) /= 0i ← 4
11failed = 012do i = 1, 413 if (checks(i) /= 0) failed = failed + 1values this step4ifailed ← 2
12do i = 1, 413 if (checks(i) /= 0) failed = failed + 114end dovalues this step2failed.true.checks(4) /= 0if (failed <= max_failures) then
14end do15if (failed <= max_failures) then16 status = 'pass'values this step.true.failed <= max_failuresstatus ← pass
15if (failed <= max_failures) then16 status = 'pass'17elsevalues this steppassstatusprint '(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_demooutput2 2 passvalues 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.