blob: 9bae575a9cdf490337c766e48ef42c5c1bd115fb [file] [log] [blame]
! { 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