subroutine ESMF_Test(condition, name, failMsg, result, file, line, unit)
! !ARGUMENTS:
logical, intent(in) :: condition ! pass/fail condition
character(*), intent(in) :: name ! test name
character(*), intent(in) :: failMsg ! fail message
integer, intent(inout) :: result ! accumulated result
character(*), intent(in) :: file ! test file name
integer, intent(in) :: line ! test file line number
integer, intent(in), optional :: unit ! additional output unit number
! !DESCRIPTION:
! Prints a {\tt PASS} message to stdout if {\tt condition} is true,
! and a {\tt FAIL} message if {\tt condition} is false. If {\tt unit}
! is specified, will in addition write the same message to that
! Fortran unit number.
!
!EOP
!-------------------------------------------------------------------------------
character(2*ESMF_MAXSTR) :: msg
character(16) :: linestr
write (linestr,*) line
linestr = adjustl (linestr)
if(condition) then
write(msg, *) "PASS ", trim(name), ", ", trim(file), ", line ", trim (linestr)
print *, trim(msg)
call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_INFO)
if (present(unit)) write(unit, *) trim(msg)
else
write(msg, *) "FAIL ", trim(name), ", ", trim(file), ", line ", &
trim (linestr), ": ", trim(failMsg)
print *, trim(msg)
call ESMF_LogWrite(trim(msg), ESMF_LOGMSG_INFO)
if (present(unit)) write(unit, *) trim(msg)
result = result + 1 ! count total failures; 0 = all pass
end if
end subroutine ESMF_Test