! { dg-do run } ! ! TS 29113 ! 7.2 RANK (A) ! Description. Rank of a data object. ! Class. Inquiry function. ! Argument. ! A shall be a scalar or array of any type. ! Result Characteristics. Default integer scalar. ! Result Value. The result is the rank of A. program test ! Define some arrays for testing. integer, target :: x1(5) integer :: y1(0:9) integer, pointer :: p1(:) integer, allocatable :: a1(:) integer, target :: x3(2,3,4) integer :: y3(0:1,-3:-1,4) integer, pointer :: p3(:,:,:) integer, allocatable :: a3(:,:,:) integer :: x ! Test the 1-dimensional arrays. if (rank (x1) .ne. 1) stop 201 call testit (x1, 1) call test1 (x1) if (rank (y1) .ne. 1) stop 202 call testit (y1, 1) call test1 (y1) if (rank (p1) .ne. 1) stop 203 p1 => x1 call testit (p1, 1) if (rank (p1) .ne. 1) stop 204 call test1 (p1) if (rank (a1) .ne. 1) stop 205 allocate (a1(5)) if (rank (a1) .ne. 1) stop 206 call testit (a1, 1) call test1 (a1) ! Test the multi-dimensional arrays. if (rank (x3) .ne. 3) stop 207 call testit (x3, 3) call test1 (x3) call test3 (x3, 1, 2, 1, 3) if (rank (y3) .ne. 3) stop 208 call test3 (y3, 0, 1, -3, -1) if (rank (p3) .ne. 3) stop 209 p3 => x3 call testit (p3, 3) call test1 (p3) if (rank (p3) .ne. 3) stop 210 call test3 (p3, 1, 2, 1, 3) if (rank (a3) .ne. 3) stop 211 allocate (a3(2,3,4)) call testit (a3, 3) call test1 (a3) if (rank (a3) .ne. 3) stop 212 call test3 (a3, 1, 2, 1, 3) ! Test scalars. if (rank (x) .ne. 0) stop 213 call testit (x, 0) call test0 (x) if (rank (-1) .ne. 0) stop 214 call test0 (-1) if (rank (x1(1)) .ne. 0) stop 215 call test0 (x1(1)) contains subroutine testit (a, r) integer :: a(..) integer :: r if (r .ne. rank(a)) stop 101 end subroutine subroutine test0 (a) integer :: a(..) if (rank (a) .ne. 0) stop 103 call testit (a, 0) end subroutine subroutine test1 (a) integer :: a(*) call testit (a, 1) end subroutine subroutine test3 (a, l1, u1, l2, u2) implicit none integer :: l1, u1, l2, u2 integer :: a(l1:u1, l2:u2, *) call testit (a, 3) end subroutine end program