test_type_conversion_m.pf Source File


Contents


Source Code

module test_type_conversion_m
    !! Tests of type conversion module
    use pfunit
    use MPI
    implicit none
contains

    @test(npes = [1])
    subroutine convert_logical_integer(this)
        !! Tests logical <-> integer conversion
        use precision_grillix_m, only : GP
        use type_conversion_m, only : logical_to_integer, integer_to_logical
        implicit none
        
        class (MpiTestMethod), intent(inout) :: this
        integer :: comm_world, rank, ierr

        logical :: test_logical, lret
        integer :: test_integer, iret

        comm_world = this%getMpiCommunicator()
        call MPI_COMM_RANK(comm_world, rank, ierr)

        if (rank == 0) then
            write(*,*)''
            write(*,*)''
            write(*,'(A80)')'test_type_conversion ------------------------------------------------'
        endif

        ! Integer to logical
        test_integer = 0
        lret = integer_to_logical(test_integer)
        @assertFalse(lret)

        test_integer = 1
        lret = integer_to_logical(test_integer)
        @assertTrue(lret)
       
        ! Test invalid inputs (should always return false)
        test_integer = 2
        lret = integer_to_logical(test_integer)
        @assertFalse(lret)

        test_integer = -1
        lret = integer_to_logical(test_integer)
        @assertFalse(lret)

        ! Logical to integer
        test_logical = .false.
        iret = logical_to_integer(test_logical)
        @assertEqual(iret, 0)

        test_logical = .true.
        iret = logical_to_integer(test_logical)
        @assertEqual(iret, 1)
        
        if (rank == 0) then
            write(*,'(A80)')'test_type_conversion complete ---------------------------------------'     
            write(*,*)''
            write(*,*)''
        endif

    end subroutine
    
end module