Checks the value of a logical condition (Specification)
If condition == .false.
and:
1
;msg
is provided, it prints the value of msg
;code
is provided, it stops the program with the given exit code;warn
is provided and .true.
, it doesn't stop the program and prints
the message.a /= 5
, stops the program with exit code 1
and prints Check failed.
call check(a == 5)
a == 5 failed
. call check(a == 5, msg='a == 5 failed.')
call check(a == 5, msg='a == 5 failed.', warn=.true.)
77
call check(a == 5, msg='a == 5 failed.', code=77)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | intent(in) | :: | condition | |||
character(len=*), | intent(in), | optional | :: | msg | ||
integer, | intent(in), | optional | :: | code | ||
logical, | intent(in), | optional | :: | warn |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=*), | public, | parameter | :: | msg_default | = | 'Check failed.' |
subroutine check(condition, msg, code, warn)
!! version: experimental
!!
!! Checks the value of a logical condition
!! ([Specification](../page/specs/stdlib_error.html#description))
!!
!!##### Behavior
!!
!! If `condition == .false.` and:
!!
!! * No other arguments are provided, it stops the program with the default
!! message and exit code `1`;
!! * `msg` is provided, it prints the value of `msg`;
!! * `code` is provided, it stops the program with the given exit code;
!! * `warn` is provided and `.true.`, it doesn't stop the program and prints
!! the message.
!!
!!##### Examples
!!
!!* If `a /= 5`, stops the program with exit code `1`
!! and prints `Check failed.`
!!``` fortran
!! call check(a == 5)
!!```
!!
!!* As above, but prints `a == 5 failed`.
!!``` fortran
!! call check(a == 5, msg='a == 5 failed.')
!!```
!!
!!* As above, but doesn't stop the program.
!!``` fortran
!! call check(a == 5, msg='a == 5 failed.', warn=.true.)
!!```
!!
!!* As example #2, but stops the program with exit code `77`
!!``` fortran
!! call check(a == 5, msg='a == 5 failed.', code=77)
!!```
!
! Arguments
! ---------
logical, intent(in) :: condition
character(*), intent(in), optional :: msg
integer, intent(in), optional :: code
logical, intent(in), optional :: warn
character(*), parameter :: msg_default = 'Check failed.'
if (.not. condition) then
if (optval(warn, .false.)) then
write(stderr,*) optval(msg, msg_default)
else
call error_stop(optval(msg, msg_default), optval(code, 1))
end if
end if
end subroutine check