This lightly commented program performs a unit test on the Integer Class.
module Unit_Test_Module use Caesar_Integer_Class implicit none contains subroutine testint (I) type(integer) :: I type(logical) :: vs write (6,100) 'I = ', I vs = Valid_State(I) write (6,101) 'Valid_State(I) ==> ', vs 100 format (/, a, i14) 101 format (2x, a, l1) return end subroutine testint subroutine testint3 (I3) type(integer), pointer, dimension(:,:,:) :: I3 type(logical) :: vs write (6,100) 'I3(1,1,1) = ', I3(1,1,1) vs = Valid_State(I3) write (6,101) 'Valid_State(I3) ==> ', vs 100 format (/, a, i14) 101 format (2x, a, l1) return end subroutine testint3 end module Unit_Test_Module program Unit_Test use Unit_Test_Module use Caesar_Integer_Class implicit none type(integer) :: I type(integer,3) :: I3 ! Initializations. call Initialize (I) call Initialize (I3, 3, 4, 5) ! Integer tests. I = 0 call testint (I) I = HUGE(I) call testint (I) I = -HUGE(I) call testint (I) I3(1,1,1) = 0 call testint3 (I3) I3(1,1,1) = HUGE(I3) call testint3 (I3) I3(1,1,1) = -HUGE(I3) call testint3 (I3) ! Note that the compiler figures out the error unless it is given in ! two steps, as follows. Also, note that adding 1 to HUGE wraps to ! a low negative number, as does subtracting 2 from -HUGE. I = HUGE(I) I = I+1 call testint (I) I = -HUGE(I) I = I-2 call testint (I) I3(1,1,1) = HUGE(I3) I3(1,1,1) = I3(1,1,1)+1 call testint3 (I3) I3(1,1,1) = -HUGE(I3) I3(1,1,1) = I3(1,1,1)-2 call testint3 (I3) ! The bottom line is that there are really no invalid integers. The ! Valid_State_Integer routine is primarily added for completeness. ! Integer scalar function tests. I = 123456789 write (6,*) 'MaxVal(I) = ', MaxVal(I) write (6,*) 'MinVal(I) = ', MinVal(I) write (6,*) 'SUM(I) = ', SUM(I) ! Finalizations. call Finalize (I) call Finalize (I3) end