1! Program to test the upper and lower bound intrinsics
2program testbounds
3   implicit none
4   real, dimension(:, :), allocatable :: a
5   integer, dimension(5) :: j
6   integer i
7
8   ! Check compile time simplification
9   if (lbound(j,1).ne.1 .or. ubound(j,1).ne.5) STOP 1
10
11   allocate (a(3:8, 6:7))
12
13   ! With one parameter
14   j = 0;
15   j(3:4) = ubound(a)
16   if (j(3) .ne. 8) STOP 1
17   if (j(4) .ne. 7) STOP 2
18
19   ! With two parameters, assigning to an array
20   j = lbound(a, 1)
21   if ((j(1) .ne. 3) .or. (j(5) .ne. 3)) STOP 3
22
23   ! With a variable second parameter
24   i = 2
25   i = lbound(a, i)
26   if (i .ne. 6) STOP 4
27
28   call test(a)
29contains
30subroutine test (a)
31   real, dimension (1:, 1:) :: a
32   integer i
33
34   i = 2
35   if ((ubound(a, 1) .ne. 6) .or. (ubound(a, i) .ne. 2)) STOP 5
36end subroutine
37end program
38
39