-
Notifications
You must be signed in to change notification settings - Fork 178
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #53 from scivision/returncode
error_stop to stderr and optional returncode
- Loading branch information
Showing
9 changed files
with
115 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
submodule (stdlib_experimental_error) estop | ||
|
||
contains | ||
|
||
module procedure error_stop | ||
! Aborts the program with nonzero exit code | ||
! this is a fallback for Fortran 2008 error stop (e.g. Intel 19.1/2020 compiler) | ||
! | ||
! The "stop <character>" statement generally has return code 0. | ||
! To allow non-zero return code termination with character message, | ||
! error_stop() uses the statement "error stop", which by default | ||
! has exit code 1 and prints the message to stderr. | ||
! An optional integer return code "code" may be specified. | ||
! | ||
! Example | ||
! ------- | ||
! | ||
! call error_stop("Invalid argument") | ||
|
||
write(stderr,*) msg | ||
|
||
if(present(code)) then | ||
select case (code) | ||
case (1) | ||
error stop 1 | ||
case (2) | ||
error stop 2 | ||
case (77) | ||
error stop 77 | ||
case default | ||
write(stderr,*) 'ERROR: code ',code,' was specified.' | ||
error stop | ||
end select | ||
else | ||
error stop | ||
endif | ||
end procedure | ||
|
||
end submodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
submodule (stdlib_experimental_error) estop | ||
|
||
contains | ||
|
||
module procedure error_stop | ||
! Aborts the program with nonzero exit code | ||
! | ||
! The "stop <character>" statement generally has return code 0. | ||
! To allow non-zero return code termination with character message, | ||
! error_stop() uses the statement "error stop", which by default | ||
! has exit code 1 and prints the message to stderr. | ||
! An optional integer return code "code" may be specified. | ||
! | ||
! Example | ||
! ------- | ||
! | ||
! call error_stop("Invalid argument") | ||
|
||
if(present(code)) then | ||
write(stderr,*) msg | ||
error stop code | ||
else | ||
error stop msg | ||
endif | ||
end procedure | ||
|
||
end submodule estop |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,41 +1,34 @@ | ||
module stdlib_experimental_error | ||
use, intrinsic :: iso_fortran_env, only: stderr=>error_unit | ||
implicit none | ||
private | ||
|
||
interface ! f{08,18}estop.f90 | ||
module subroutine error_stop(msg, code) | ||
character(*), intent(in) :: msg | ||
integer, intent(in), optional :: code | ||
end subroutine error_stop | ||
end interface | ||
|
||
public :: assert, error_stop | ||
|
||
contains | ||
|
||
subroutine assert(condition) | ||
subroutine assert(condition, code) | ||
! If condition == .false., it aborts the program. | ||
! | ||
! Arguments | ||
! --------- | ||
! | ||
logical, intent(in) :: condition | ||
integer, intent(in), optional :: code | ||
! | ||
! Example | ||
! ------- | ||
! | ||
! call assert(a == 5) | ||
|
||
if (.not. condition) call error_stop("Assert failed.") | ||
end subroutine | ||
|
||
subroutine error_stop(msg) | ||
! Aborts the program with nonzero exit code | ||
! | ||
! The statement "stop msg" will return 0 exit code when compiled using | ||
! gfortran. error_stop() uses the statement "stop 1" which returns an exit code | ||
! 1 and a print statement to print the message. | ||
! | ||
! Example | ||
! ------- | ||
! | ||
! call error_stop("Invalid argument") | ||
|
||
character(len=*) :: msg ! Message to print on stdout | ||
print *, msg | ||
stop 1 | ||
if (.not. condition) call error_stop("Assert failed.", code) | ||
end subroutine | ||
|
||
end module |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,12 @@ | ||
add_subdirectory(ascii) | ||
add_subdirectory(loadtxt) | ||
|
||
add_executable(test_skip test_skip.f90) | ||
target_link_libraries(test_skip fortran_stdlib) | ||
add_test(NAME AlwaysSkip COMMAND $<TARGET_FILE:test_skip>) | ||
set_tests_properties(AlwaysSkip PROPERTIES SKIP_RETURN_CODE 77) | ||
|
||
add_executable(test_fail test_fail.f90) | ||
target_link_libraries(test_fail fortran_stdlib) | ||
add_test(NAME AlwaysFail COMMAND $<TARGET_FILE:test_fail>) | ||
set_tests_properties(AlwaysFail PROPERTIES WILL_FAIL true) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
program AlwaysFail | ||
|
||
use stdlib_experimental_error, only : assert | ||
implicit none | ||
|
||
call assert(.false.) | ||
|
||
end program |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
program AlwaysSkip | ||
|
||
use stdlib_experimental_error, only : assert | ||
implicit none | ||
|
||
call assert(.false., 77) | ||
|
||
end program |