1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
program array_op_3
implicit none
integer :: a(2, 2, 1), b(2, 2, 1)
logical :: c(2, 2, 1)
integer :: i, j, k
do i = 1, 2
do j = 1, 2
do k = 1, 1
a(i, j, k) = i/j
b(i, j, k) = j/i
end do
end do
end do
c = a == b
call check(c, a, b, 0)
c = a /= b
call check(c, a, b, 1)
c = a < b
call check(c, a, b, 2)
c = b <= a
call check(c, a, b, 3)
c = b > a
call check(c, a, b, 4)
c = b >= a
call check(c, a, b, 5)
contains
subroutine check(c, a, b, op_code)
implicit none
integer, intent(in) :: a(:, :, :), b(:, :, :)
logical, intent(in) :: c(:, :, :)
integer, intent(in) :: op_code
integer :: i, j, k
do i = lbound(a, 1), ubound(a, 1)
do j = lbound(a, 2), ubound(a, 2)
do k = lbound(a, 3), ubound(a, 3)
select case(op_code)
case (0)
if(c(i, j, k) .neqv. (a(i, j, k) == b(i, j, k))) error stop
case (1)
if(c(i, j, k) .neqv. (a(i, j, k) /= b(i, j, k))) error stop
case (2)
if(c(i, j, k) .neqv. (a(i, j, k) < b(i, j, k))) error stop
case (3)
if(c(i, j, k) .neqv. (b(i, j, k) <= a(i, j, k))) error stop
case (4)
if(c(i, j, k) .neqv. (b(i, j, k) > a(i, j, k))) error stop
case (5)
if(c(i, j, k) .neqv. (b(i, j, k) >= a(i, j, k))) error stop
end select
end do
end do
end do
end subroutine check
end program
|