This repository provides procedures for me to improve the convenience of test-drive, a testing framework for Fortran.
occurred function returns .true. if the argument error is allocated.
This function is introduced with a purpose of writing if(occurred(error)) instead of if(allocated(error)) to improve readability of codes.
call check(error, 1 + 2 == 3)
if (occurred(error)) returnWhen I started using test-drive, I confused because I couldn't catch the intention of if (allocated (error)). I found that error is allocated only when a test fails. I think occurrd (there may be other more appropriate names) is better than allocated for expressing the behavior.
run_test subroutine executes the typical expression when executing testsuites shown below:
type(testsuite_type) :: testsuites(:)
integer :: stat, is
do is = 1, size(testsuites)
write (error_unit, fmt) "Testing:", testsuites(is)%name
call run_testsuite(testsuites(is)%collect, error_unit, stat)
end do
if (stat > 0) then
write (error_unit, '(i0, 1x, a)') stat, "test(s) failed!"
error stop
end ifto_string returns "T"/"F" when the argument is .true./.false.
print *, "expected "//to_string(.true.)//", but got "//to_string(.false.)
! expected T, but got Fget_actual_value and get_all_actual_value are helper subroutines to somewhat simplify testing of procedures with output to a unit.
get_actual_value rewinds the opened unit and reads contents at the first line as a string. get_all_actual_value reads contents from the beginning to EOF.
The following code is a get_actual_value usage example for testing a log message output of the logger provided by stdlib.
use, intrinsic :: iso_fortran_env
use :: testdrive, only:error_type, check
use :: testdrive_util, only:get_actual_value, occurred
use :: stdlib_logger
implicit none
type(error_type), allocatable :: error
integer(int32) :: scratch_unit
character(:), allocatable :: actual
open (newunit=scratch_unit, status="scratch")
call global_logger%add_log_unit(scratch_unit)
call global_logger%configure(time_stamp=.false.)
call global_logger%log_information("calling global_logger%log_inoformation")
call global_logger%remove_log_unit(scratch_unit, close_unit=.false.)
! read string from scratch file for testing string output.
call get_actual_value(error, scratch_unit, actual)
! stdlib logger_type%log_information should output log message with prefix "INFO: "
call check(error, actual == "INFO: "//"calling global_logger%log_inoformation")
if (occurred(error)) then
error stop
else
print *, "no error occurred"
end if- test-drive - a community-made, lightweight, procedural unit testing framework for Fortran
I would like to express my gratitude to fortran-lang community for their activities and creating some great softwares.