|
| 1 | +module collective_subroutines_test |
| 2 | + use Vegetables, only: Result_t, Test_Item_t, describe, it, succeed, assert_equals |
| 3 | + |
| 4 | + implicit none |
| 5 | + private |
| 6 | + |
| 7 | + public :: test_collective_subroutines |
| 8 | +contains |
| 9 | + function test_collective_subroutines() result(tests) |
| 10 | + type(Test_Item_t) :: tests |
| 11 | + |
| 12 | + tests = describe(& |
| 13 | + "co_sum", & |
| 14 | + [it( & |
| 15 | + "gives the correct answer with result_image present", & |
| 16 | + check_co_sum_with_result_image), & |
| 17 | + it( & |
| 18 | + "gives the correct answer without result_image present", & |
| 19 | + check_co_sum_without_result_image)]) |
| 20 | + end function |
| 21 | + |
| 22 | + function check_co_sum_with_result_image() result(result_) |
| 23 | + use emulated_intrinsics_interface, only : co_sum |
| 24 | + type(Result_t) :: result_ |
| 25 | + |
| 26 | + integer i, j |
| 27 | + integer, parameter :: result_image=2 |
| 28 | + |
| 29 | + associate(me => this_image()) |
| 30 | + i = me |
| 31 | + call co_sum(i, result_image) |
| 32 | + if (me==result_image) then |
| 33 | + result_ = assert_equals(sum([(j, j=1, num_images())]), i, "collective sum on result_image") |
| 34 | + else |
| 35 | + result_ = assert_equals(me, i, "co_sum argument unchanged on non-result_image") |
| 36 | + end if |
| 37 | + end associate |
| 38 | + end function |
| 39 | + |
| 40 | + function check_co_sum_without_result_image() result(result_) |
| 41 | + use emulated_intrinsics_interface, only : co_sum |
| 42 | + type(Result_t) :: result_ |
| 43 | + |
| 44 | + integer i, j |
| 45 | + integer, parameter :: result_image=2 |
| 46 | + |
| 47 | + associate(me => this_image()) |
| 48 | + i = me |
| 49 | + call co_sum(i) |
| 50 | + result_ = assert_equals(sum([(j, j=1, num_images())]), i, "co_sum without result_image present") |
| 51 | + end associate |
| 52 | + end function |
| 53 | + |
| 54 | +end module |
0 commit comments