| ! { dg-do run } |
| ! |
| ! CO_SUM/CO_MIN/CO_MAX |
| ! |
| program test |
| implicit none |
| intrinsic co_max |
| intrinsic co_min |
| intrinsic co_sum |
| integer :: val(3), tmp_val(3) |
| integer :: vec(3) |
| vec = [2,3,1] |
| if (this_image() == 1) then |
| val(1) = 42 |
| else |
| val(1) = -99 |
| endif |
| val(2) = this_image() |
| if (this_image() == num_images()) then |
| val(3) = -55 |
| else |
| val(3) = 101 |
| endif |
| tmp_val = val |
| call test_min |
| val = tmp_val |
| call test_max |
| val = tmp_val |
| call test_sum |
| contains |
| subroutine test_max |
| integer :: tmp |
| call co_max (val(::2)) |
| if (num_images() > 1) then |
| if (any (val /= [42, this_image(), 101])) STOP 1 |
| else |
| if (any (val /= [42, this_image(), -55])) STOP 2 |
| endif |
| |
| val = tmp_val |
| call co_max (val(:)) |
| if (num_images() > 1) then |
| if (any (val /= [42, num_images(), 101])) STOP 3 |
| else |
| if (any (val /= [42, num_images(), -55])) STOP 4 |
| endif |
| end subroutine test_max |
| |
| subroutine test_min |
| call co_min (val, result_image=num_images()) |
| if (this_image() == num_images()) then |
| !write(*,*) "Minimal value", val |
| if (num_images() > 1) then |
| if (any (val /= [-99, 1, -55])) STOP 5 |
| else |
| if (any (val /= [42, 1, -55])) STOP 6 |
| endif |
| else |
| if (any (val /= tmp_val)) STOP 7 |
| endif |
| end subroutine test_min |
| |
| subroutine test_sum |
| integer :: n |
| n = 88 |
| call co_sum (val, result_image=1, stat=n) |
| if (n /= 0) STOP 8 |
| if (this_image() == 1) then |
| n = num_images() |
| !write(*,*) "The sum is ", val |
| if (any (val /= [42 + (n-1)*(-99), (n**2 + n)/2, -55+(n-1)*101])) STOP 9 |
| else |
| if (any (val /= tmp_val)) STOP 10 |
| end if |
| end subroutine test_sum |
| end program test |