ESMF_TestUTest Program

Variables

Type Attributes Name Initial
character(len=16), parameter :: filenames(3) = (/'testfile_base', 'testfile_same', 'testfile_diff'/)
character(len=2) :: mypet_str
character(len=ESMF_MAXSTR) :: failMsg
character(len=ESMF_MAXSTR) :: name
character(len=ESMF_MAXSTR) :: string
integer :: i
integer :: i_block1
integer :: ioerr
integer :: iounit
integer :: mypet
integer :: rc
integer :: result = 0
logical :: same
type(ESMF_VM) :: vm

Source Code

program ESMF_TestUTest

!------------------------------------------------------------------------------

#include "ESMF_Macros.inc"

!==============================================================================
!BOP
! !PROGRAM: ESMF_TestUTest - Check ESMF_TestMod functionality
!
! !DESCRIPTION:
!
!EOP
!-----------------------------------------------------------------------------
! !USES:
  use ESMF_TestMod     ! test methods
  use ESMF

  implicit none

  character(ESMF_MAXSTR) :: name
  character(ESMF_MAXSTR) :: failMsg

  character(ESMF_MAXSTR) :: string

  type(ESMF_VM) :: vm
  integer :: mypet
  character(2) :: mypet_str

  integer :: i, i_block1
  integer :: iounit, ioerr
  character(16), parameter :: filenames(3) =  &
      (/ 'testfile_base', 'testfile_same', 'testfile_diff' /)
  logical :: same

  integer :: result = 0
  integer :: rc

  !-----------------------------------------------------------------------------
  call ESMF_TestStart(ESMF_SRCLINE, rc=rc)
  if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT)
  !-----------------------------------------------------------------------------

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Use of ESMF_Test(), true"
  write(failMsg, *) "Dummy fail message"
  call ESMF_Test(.true., name, failMsg, result, ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

! Test file comparison

  ! file_base and file_same are identical, file_diff differs

  call ESMF_VMGetCurrent(vm=vm)
  call ESMF_VMGet (vm, localpet=mypet)
  write (mypet_str, '(a,i1)') '.', mypet

block1:  &
  do, i_block1=1, 1
    do, i=1, size (filenames)
      call ESMF_UtilIOUnitGet (iounit, rc=rc)
      if (rc /= ESMF_SUCCESS) exit block1
      open (iounit, file=trim (filenames(i)) // mypet_str,  &
          form='formatted', action='write', iostat=ioerr)
      if (ioerr /= 0) then
        rc = ESMF_FAILURE
        exit block1
      end if

      string = 'line 1'
      write (iounit, '(a)') string

      if (i /= 3) then
        string = 'line 2'
      else
        string = 'different line 2 Version'
      end if
      write (iounit, '(a)') string

      string = 'line 3'
      write (iounit, '(a)') string

      close (iounit, status='keep')
    end do
  end do block1
  if (rc /= ESMF_SUCCESS) then
    print *, '*** Could not create data files ***'
  end if

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Compare identical files"
  write(failMsg, *) "Files did not compare"
  same = ESMF_TestFileCompare ('testfile_base' // mypet_str, 'testfile_same' // mypet_str)
  call ESMF_Test(same, name, failMsg, result, ESMF_SRCLINE)

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Compare non-identical files"
  write(failMsg, *) "Files compared erroneously"
  same = ESMF_TestFileCompare ('testfile_base' // mypet_str, 'testfile_diff' // mypet_str)
  call ESMF_Test(.not. same, name, failMsg, result, ESMF_SRCLINE)

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Compare non-identical files with exception list (non-match)"
  write(failMsg, *) "Files compared erroneously"
  same = ESMF_TestFileCompare ('testfile_base' // mypet_str, 'testfile_diff' // mypet_str,  &
      (/ 'exception1', 'exception2' /) )
  call ESMF_Test(.not. same, name, failMsg, result, ESMF_SRCLINE)

  !-----------------------------------------------------------------------------
  !NEX_UTest
  write(name, *) "Compare non-identical files with exception list (matching)"
  write(failMsg, *) "Files did not compare with exception"
  same = ESMF_TestFileCompare ('testfile_base' // mypet_str, 'testfile_diff' // mypet_str,  &
      (/ 'exception1', 'exception2', 'Version   ' /) )
  call ESMF_Test(.not. same, name, failMsg, result, ESMF_SRCLINE)

  call ESMF_UtilIOUnitGet (iounit, rc=rc)
  do, i=1, size (filenames)
    open (iounit, file=trim (filenames(i)) // mypet_str,  &
        form='formatted', status='old')
    close (iounit, status='delete')
  end do

  !-----------------------------------------------------------------------------
  call ESMF_TestEnd(ESMF_SRCLINE)
  !-----------------------------------------------------------------------------

end program ESMF_TestUTest