| ! { dg-do run } |
| ! Check compile-time simplification of FINDLOC |
| program main |
| integer, dimension(4), parameter :: a1 = [1, 2, 3, 1] |
| integer, parameter :: i1 = findloc(a1, 1, dim=1) |
| integer, parameter :: i2 = findloc(a1, 2, dim=1) |
| integer, parameter :: i3 = findloc(a1, 3, dim=1) |
| integer, parameter :: i4 = findloc(a1, 1, dim=1, back=.true.) |
| integer, parameter :: i0 = findloc(a1, -1, dim=1) |
| logical, dimension(4), parameter :: msk = [.false., .true., .true., .true.] |
| integer, parameter :: i4a = findloc(a1, 1, dim=1, mask=msk) |
| integer, parameter :: i4b = findloc(a1, 1, dim=1, mask=msk, back=.true.) |
| real, dimension(2,2), parameter :: a = reshape([1.,2.,3.,4.], [2,2]), & |
| b = reshape([1.,2.,1.,2.], [2,2]) |
| integer, parameter, dimension(2) :: t8 = findloc(a, 5.), t9 = findloc(a, 5., back=.true.) |
| integer, parameter, dimension(2) :: t10= findloc(a, 2.), t11= findloc(a, 2., back=.true.) |
| logical, dimension(2,2), parameter :: lo = reshape([.true., .false., .true., .true. ], [2,2]) |
| integer, parameter, dimension(2) :: t12 = findloc(b,2., mask=lo) |
| |
| integer, dimension(2,3), parameter :: c = reshape([1,2,2,2,-9,6], [2,3]) |
| integer, parameter, dimension(3) :: t13 = findloc(c, value=2, dim=1) |
| integer, parameter, dimension(2) :: t14 = findloc(c, value=2, dim=2) |
| |
| character(len=2), dimension(3,3), parameter :: ac = reshape ( & |
| ["11", "21", "31", "12", "22", "32", "13", "23", "33"], [3,3]); |
| character(len=3), dimension(3,3), parameter :: bc = reshape (& |
| ["11 ", "21 ", "31 ", "12 ", "22 ", "32 ", "13 ", "23 ", "33 "], [3,3]); |
| integer, parameter, dimension(2) :: t15 = findloc(ac, "11") |
| integer, parameter, dimension(2) :: t16 = findloc(bc, "31") |
| |
| if (i1 /= 1) stop 1 |
| if (i2 /= 2) stop 2 |
| if (i3 /= 3) stop 3 |
| if (i4 /= 4) stop 4 |
| if (i0 /= 0) stop 5 |
| if (i4a /= 4) stop 6 |
| if (i4b /= 4) stop 7 |
| if (any(t8 /= [0,0])) stop 8 |
| if (any(t9 /= [0,0])) stop 9 |
| if (any(t10 /= [2,1])) stop 10 |
| if (any(t11 /= [2,1])) stop 11 |
| if (any(t12 /= [2,2])) stop 12 |
| if (any(t13 /= [2,1,0])) stop 13 |
| if (any(t14 /= [2,1])) stop 14 |
| if (any(t15 /= [1,1])) stop 15 |
| if (any(t16 /= [3,1])) stop 16 |
| end program main |