! Program to test functions returning arrays
|
! Program to test functions returning arrays
|
|
|
program testfnarray
|
program testfnarray
|
implicit none
|
implicit none
|
integer, dimension (6, 5) :: a
|
integer, dimension (6, 5) :: a
|
integer n
|
integer n
|
|
|
! These first two shouldn't require a temporary.
|
! These first two shouldn't require a temporary.
|
a = 0
|
a = 0
|
a = test(6, 5)
|
a = test(6, 5)
|
if (a(1,1) .ne. 42) call abort
|
if (a(1,1) .ne. 42) call abort
|
if (a(6,5) .ne. 43) call abort
|
if (a(6,5) .ne. 43) call abort
|
|
|
a = 0
|
a = 0
|
a(1:6:2, 2:5) = test2()
|
a(1:6:2, 2:5) = test2()
|
if (a(1,2) .ne. 42) call abort
|
if (a(1,2) .ne. 42) call abort
|
if (a(5,5) .ne. 43) call abort
|
if (a(5,5) .ne. 43) call abort
|
|
|
a = 1
|
a = 1
|
! This requires a temporary
|
! This requires a temporary
|
a = test(6, 5) - a
|
a = test(6, 5) - a
|
if (a(1,1) .ne. 41) call abort
|
if (a(1,1) .ne. 41) call abort
|
if (a(6,5) .ne. 42) call abort
|
if (a(6,5) .ne. 42) call abort
|
|
|
contains
|
contains
|
|
|
function test (x, y)
|
function test (x, y)
|
implicit none
|
implicit none
|
integer x, y
|
integer x, y
|
integer, dimension (1:x, 1:y) :: test
|
integer, dimension (1:x, 1:y) :: test
|
|
|
test(1, 1) = 42
|
test(1, 1) = 42
|
test(x, y) = 43
|
test(x, y) = 43
|
end function
|
end function
|
|
|
function test2 () result (foo)
|
function test2 () result (foo)
|
implicit none
|
implicit none
|
integer, dimension (3, 4) :: foo
|
integer, dimension (3, 4) :: foo
|
|
|
foo(1, 1) = 42
|
foo(1, 1) = 42
|
foo(3, 4) = 43
|
foo(3, 4) = 43
|
end function
|
end function
|
|
|
end program
|
end program
|
|
|
|
|