An inline if paired with error stop aborts the program when a result is wrong, otherwise execution falls through.

Program

Play the program to verify a double_value function and confirm all checks pass.

assertion.f90
Replay: real traced execution (multi-file project)
program assertion_demo
    implicit none
    integer :: result_

    result_ = double_value(2)
    if (result_ /= 4) error stop "double(2) failed"

    result_ = double_value(0)
    if (result_ /= 0) error stop "double(0) failed"

    print '(A)', "all checks passed"
contains
    function double_value(n) result(out)
        integer, intent(in) :: n
        integer :: out
        out = n * 2
    end function double_value
end program assertion_demo
  1. result_ ← 4

    5result_ = double_value(2)6if (result_ /= 4) error stop "double(2) failed"
    values this step4result_
  2. result_ /= 4 ← .false.

    5result_ = double_value(2)6if (result_ /= 4) error stop "double(2) failed"
    values this step.false.result_ /= 44result_
  3. result_ ← 0

    8result_ = double_value(0)9if (result_ /= 0) error stop "double(0) failed"
    values this step0result_
  4. result_ /= 0 ← .false.

    8result_ = double_value(0)9if (result_ /= 0) error stop "double(0) failed"
    values this step.false.result_ /= 00result_
  5. print '(A)', "all checks passed"

    11    print '(A)', "all checks passed"12contains
    outputall checks passed

Follow the Checks

  1. double_value(2) returns 4.
  2. The check result_ /= 4 is .false., so the program keeps going.
  3. double_value(0) returns 0.
  4. The check result_ /= 0 is also .false..
  5. No check stops the program, so it prints all checks passed. | call | result_ | failure check | continues? | | --- | --- | --- | --- | | double_value(2) | 4 | .false. | yes | | double_value(0) | 0 | .false. | yes | | final print | all checks passed | - | yes |
inline if `if (cond) stmt` is the single-statement if form.
error stop `error stop "msg"` aborts the program with a non-zero status.
function check A small function plus checks demonstrates the test pattern without a test harness.

Exercise: assertion.f90

Reproduce all checks passed, then trace why both failure checks are .false. for results 4 and 0.