blob: 288f29fd73ef3ee055849b7ec61ca3fa12053bf6 [file] [log] [blame]
program main_p
implicit none
integer, parameter :: n = 10
integer, parameter :: m = 5
integer, parameter :: b = 3
integer, parameter :: t = n+b-1
integer, parameter :: l = 4
integer, parameter :: u = 7
integer, parameter :: s = 3
integer, parameter :: e = (u-l)/s+1
call test_f()
call test_s()
call test_p()
call test_a()
stop
contains
subroutine test_f()
integer, target :: x(n,n)
integer, target :: y(b:t)
integer :: i
x = reshape([(i, i=1,n*n)], [n,n])
y = x(:,m)
call sub_s(x(:,m), y, 1, n, n)
call sub_s(y, x(:,m), b, t, n)
return
end subroutine test_f
subroutine test_s()
integer, target :: x(n,n)
integer, target :: v(e)
integer :: i
x = reshape([(i, i=1,n*n)], [n,n])
v = x(l:u:s,m)
call sub_s(v, v, 1, e, e)
call sub_s(x(l:u:s,m), v, 1, e, e)
call sub_s(v, x(l:u:s,m), 1, e, e)
return
end subroutine test_s
subroutine test_p()
integer, target :: x(n,n)
integer, pointer :: p(:)
integer :: v(e)
integer :: i
x = reshape([(i, i=1,n*n)], [n,n])
v = x(l:u:s,m)
p => x(:,m)
call sub_s(p(l:u:s), v, 1, e, e)
p => x(l:u:s,m)
call sub_s(p, v, 1, e, e)
p(l:) => x(l:u:s,m)
call sub_s(p, v, l, e+l-1, e)
p(l:l+e-1) => x(l:u:s,m)
call sub_s(p, v, l, e+l-1, e)
allocate(p(n))
p(:) = x(:,m)
call sub_s(p(l:u:s), v, 1, e, e)
deallocate(p)
allocate(p(e))
p(:) = x(l:u:s,m)
call sub_s(p, v, 1, e, e)
deallocate(p)
allocate(p(l:l+e-1))
p(:) = x(l:u:s,m)
call sub_s(p, v, l, e+l-1, e)
deallocate(p)
allocate(p(l:l+e-1))
p(l:) = x(l:u:s,m)
call sub_s(p, v, l, e+l-1, e)
deallocate(p)
allocate(p(l:l+e-1))
p(l:l+e-1) = x(l:u:s,m)
call sub_s(p, v, l, e+l-1, e)
deallocate(p)
return
end subroutine test_p
subroutine test_a()
integer :: x(n,n)
integer, allocatable, target :: a(:)
integer :: v(e)
integer :: i
x = reshape([(i, i=1,n*n)], [n,n])
v = x(l:u:s,m)
a = x(:,m)
call sub_s(a(l:u:s), v, 1, e, e)
deallocate(a)
allocate(a(n))
a(:) = x(:,m)
call sub_s(a(l:u:s), v, 1, e, e)
deallocate(a)
a = x(l:u:s,m)
call sub_s(a, v, 1, e, e)
deallocate(a)
allocate(a(e))
a(:) = x(l:u:s,m)
call sub_s(a, v, 1, e, e)
deallocate(a)
allocate(a(l:l+e-1))
a(:) = x(l:u:s,m)
call sub_s(a, v, l, e+l-1, e)
deallocate(a)
allocate(a(l:l+e-1))
a(l:) = x(l:u:s,m)
call sub_s(a, v, l, e+l-1, e)
deallocate(a)
allocate(a(l:l+e-1))
a(l:l+e-1) = x(l:u:s,m)
call sub_s(a, v, l, e+l-1, e)
deallocate(a)
return
end subroutine test_a
subroutine sub_s(a, b, l, u, e)
integer, pointer, intent(in) :: a(:)
integer, intent(in) :: b(:)
integer, intent(in) :: l
integer, intent(in) :: u
integer, intent(in) :: e
integer :: i
if(lbound(a,dim=1)/=l) stop 1001
if(ubound(a,dim=1)/=u) stop 1002
if(any(shape(a)/=[e])) stop 1003
if(size(a, dim=1)/=e) stop 1004
if(size(a)/=size(b)) stop 1005
do i = l, u
if(a(i)/=b(i-l+1)) stop 1006
end do
end subroutine sub_s
end program main_p