@@ -6,9 +6,10 @@ module caf_image_index_test
66 prif_this_image_no_coarray, &
77 prif_form_team, prif_change_team, prif_end_team, &
88 prif_image_index_with_team, prif_image_index_with_team_number, &
9+ prif_initial_team_index, prif_initial_team_index_with_team, prif_initial_team_index_with_team_number, &
910 prif_this_image_with_coarray, prif_this_image_with_dim, &
1011 prif_lcobound_no_dim, prif_ucobound_no_dim, &
11- prif_num_images_with_team
12+ prif_num_images_with_team, PRIF_INITIAL_TEAM
1213 use veggies, only: result_t, test_item_t, assert_equals, assert_that, describe, it, succeed
1314
1415 implicit none
@@ -19,7 +20,7 @@ function test_prif_image_index() result(tests)
1920 type (test_item_t) :: tests
2021
2122 tests = describe( &
22- " prif_image_index" , &
23+ " prif_image_index and prif_initial_team_index " , &
2324 [ it(" returns 1 for the simplest case" , check_simple_case) &
2425 , it(" returns 1 when given the lower bounds" , check_lower_bounds) &
2526 , it(" returns 0 with invalid subscripts" , check_invalid_subscripts) &
@@ -36,13 +37,17 @@ function check_this_image_coarray(coarray_handle, corank, team) result(result_)
3637 type (result_t) :: result_
3738
3839 integer (c_int64_t) :: co, cosubscripts(corank), colbound(corank), coubound(corank)
39- integer (c_int) :: i, me
40+ integer (c_int) :: i, me, me_initial
41+ type (prif_team_type) :: initial_team
42+
43+ call prif_get_team(PRIF_INITIAL_TEAM, team= initial_team)
4044
4145 result_ = succeed(" " )
4246
4347 call prif_lcobound_no_dim(coarray_handle, colbound)
4448 call prif_ucobound_no_dim(coarray_handle, coubound)
4549 call prif_this_image_no_coarray(team, me)
50+ call prif_this_image_no_coarray(initial_team, me_initial)
4651
4752 call prif_this_image_with_coarray(coarray_handle, team= team, cosubscripts= cosubscripts)
4853 do i= 1 ,corank
@@ -60,6 +65,15 @@ function check_this_image_coarray(coarray_handle, corank, team) result(result_)
6065 call prif_image_index(coarray_handle, cosubscripts, i)
6166 end if
6267 result_ = result_ .and. assert_equals(i, me)
68+
69+ ! and prif_initial_team_index
70+ if (present (team)) then
71+ call prif_initial_team_index_with_team(coarray_handle, cosubscripts, team, i)
72+ else
73+ call prif_initial_team_index(coarray_handle, cosubscripts, i)
74+ end if
75+ result_ = result_ .and. assert_equals(i, me_initial)
76+
6377 end function
6478
6579 function check_simple_case () result(result_)
@@ -80,6 +94,9 @@ function check_simple_case() result(result_)
8094 call prif_image_index(coarray_handle, [1_c_int64_t ], image_index= answer)
8195 result_ = assert_equals(1_c_int , answer)
8296
97+ call prif_initial_team_index(coarray_handle, [1_c_int64_t ], initial_team_index= answer)
98+ result_ = result_ .and. assert_equals(1_c_int , answer)
99+
83100 result_ = result_ .and. &
84101 check_this_image_coarray(coarray_handle, 1 )
85102
@@ -104,6 +121,9 @@ function check_lower_bounds() result(result_)
104121 call prif_image_index(coarray_handle, [2_c_int64_t , 3_c_int64_t ], image_index= answer)
105122 result_ = assert_equals(1_c_int , answer)
106123
124+ call prif_initial_team_index(coarray_handle, [2_c_int64_t , 3_c_int64_t ], initial_team_index= answer)
125+ result_ = result_ .and. assert_equals(1_c_int , answer)
126+
107127 result_ = result_ .and. &
108128 check_this_image_coarray(coarray_handle, 2 )
109129
@@ -139,7 +159,7 @@ function check_complicated_2d() result(result_)
139159
140160 type (prif_coarray_handle) :: coarray_handle
141161 type (c_ptr) :: allocated_memory
142- integer (c_int) :: answer, ni
162+ integer (c_int) :: answer, ni, expected
143163 call prif_num_images(num_images= ni)
144164
145165 call prif_allocate_coarray( &
@@ -150,7 +170,13 @@ function check_complicated_2d() result(result_)
150170 coarray_handle = coarray_handle, &
151171 allocated_memory = allocated_memory)
152172 call prif_image_index(coarray_handle, [1_c_int64_t , 3_c_int64_t ], image_index= answer)
153- result_ = assert_equals(merge (3_c_int ,0_c_int ,ni >= 3 ), answer)
173+ expected = merge (3_c_int ,0_c_int ,ni >= 3 )
174+ result_ = assert_equals(expected, answer)
175+
176+ if (expected > 0 ) then
177+ call prif_initial_team_index(coarray_handle, [1_c_int64_t , 3_c_int64_t ], initial_team_index= answer)
178+ result_ = result_ .and. assert_equals(expected, answer)
179+ end if
154180
155181 result_ = result_ .and. &
156182 check_this_image_coarray(coarray_handle, 2 )
@@ -163,7 +189,7 @@ function check_complicated_3d() result(result_)
163189
164190 type (prif_coarray_handle) :: coarray_handle
165191 type (c_ptr) :: allocated_memory
166- integer (c_int) :: answer, ni
192+ integer (c_int) :: answer, ni, expected
167193 type (prif_team_type) :: initial_team
168194 call prif_get_team(team= initial_team)
169195 call prif_num_images_with_team(team= initial_team, num_images= ni)
@@ -178,7 +204,15 @@ function check_complicated_3d() result(result_)
178204 call prif_image_index_with_team(coarray_handle, &
179205 [2_c_int64_t , 1_c_int64_t , 1_c_int64_t ], &
180206 team= initial_team, image_index= answer)
181- result_ = assert_equals(merge (8_c_int ,0_c_int ,ni >= 8 ), answer)
207+ expected = merge (8_c_int ,0_c_int ,ni >= 8 )
208+ result_ = assert_equals(expected, answer)
209+
210+ if (expected > 0 ) then
211+ call prif_initial_team_index_with_team(coarray_handle, &
212+ [2_c_int64_t , 1_c_int64_t , 1_c_int64_t ], &
213+ team= initial_team, initial_team_index= answer)
214+ result_ = result_ .and. assert_equals(expected, answer)
215+ endif
182216
183217 result_ = result_ .and. &
184218 check_this_image_coarray(coarray_handle, 3 )
@@ -209,12 +243,14 @@ function check_complicated_2d_team() result(result_)
209243 coarray_handle = coarray_handle, &
210244 allocated_memory = allocated_memory)
211245
212- which_team = merge (1_c_int64_t , 2_c_int64_t , mod (me, 2 ) == 0 )
246+ which_team = merge (2_c_int64_t , 1_c_int64_t , mod (me, 2 ) == 0 )
213247 call prif_form_team(team_number = which_team, team = child_team)
214248 call prif_change_team(child_team)
215249
216250 call prif_num_images_with_team(team= child_team, num_images= cni)
217251
252+ ! image_index lcobound
253+
218254 call prif_image_index_with_team(coarray_handle, &
219255 [0_c_int64_t , 2_c_int64_t ], &
220256 team= initial_team, image_index= answer)
@@ -245,6 +281,40 @@ function check_complicated_2d_team() result(result_)
245281 result_ = result_ .and. &
246282 assert_equals(1_c_int , answer)
247283
284+ ! initial_team_index lcobound
285+
286+ call prif_initial_team_index_with_team(coarray_handle, &
287+ [0_c_int64_t , 2_c_int64_t ], &
288+ initial_team, answer)
289+ result_ = result_ .and. &
290+ assert_equals(1_c_int , answer)
291+
292+ call prif_initial_team_index_with_team_number(coarray_handle, &
293+ [0_c_int64_t , 2_c_int64_t ], &
294+ - 1_c_int64_t , answer)
295+ result_ = result_ .and. &
296+ assert_equals(1_c_int , answer)
297+
298+ call prif_initial_team_index_with_team(coarray_handle, &
299+ [0_c_int64_t , 2_c_int64_t ], &
300+ child_team, answer)
301+ result_ = result_ .and. &
302+ assert_equals(merge (1_c_int ,2_c_int ,which_team== 1 ), answer)
303+
304+ call prif_initial_team_index_with_team_number(coarray_handle, &
305+ [0_c_int64_t , 2_c_int64_t ], &
306+ which_team, answer)
307+ result_ = result_ .and. &
308+ assert_equals(merge (1_c_int ,2_c_int ,which_team== 1 ), answer)
309+
310+ call prif_initial_team_index(coarray_handle, &
311+ [0_c_int64_t , 2_c_int64_t ], &
312+ answer)
313+ result_ = result_ .and. &
314+ assert_equals(merge (1_c_int ,2_c_int ,which_team== 1 ), answer)
315+
316+ ! image_index 3
317+
248318 call prif_image_index_with_team(coarray_handle, &
249319 [0_c_int64_t , 3_c_int64_t ], &
250320 team= initial_team, image_index= answer)
@@ -275,6 +345,40 @@ function check_complicated_2d_team() result(result_)
275345 result_ = result_ .and. &
276346 assert_equals(merge (3_c_int ,0_c_int ,cni >= 3 ), answer)
277347
348+ ! initial_team_index 3
349+ if (ni >= 3 ) then
350+ call prif_initial_team_index_with_team(coarray_handle, &
351+ [0_c_int64_t , 3_c_int64_t ], &
352+ team= initial_team, initial_team_index= answer)
353+ result_ = result_ .and. &
354+ assert_equals(3_c_int , answer)
355+
356+ call prif_initial_team_index_with_team_number(coarray_handle, &
357+ [0_c_int64_t , 3_c_int64_t ], &
358+ team_number=- 1_c_int64_t , initial_team_index= answer)
359+ result_ = result_ .and. &
360+ assert_equals(3_c_int , answer)
361+ end if
362+ if (cni >= 3 ) then
363+ call prif_initial_team_index_with_team(coarray_handle, &
364+ [0_c_int64_t , 3_c_int64_t ], &
365+ team= child_team, initial_team_index= answer)
366+ result_ = result_ .and. &
367+ assert_equals(merge (5_c_int ,6_c_int ,which_team== 1 ), answer)
368+
369+ call prif_initial_team_index_with_team_number(coarray_handle, &
370+ [0_c_int64_t , 3_c_int64_t ], &
371+ team_number= which_team, initial_team_index= answer)
372+ result_ = result_ .and. &
373+ assert_equals(merge (5_c_int ,6_c_int ,which_team== 1 ), answer)
374+
375+ call prif_initial_team_index(coarray_handle, &
376+ [0_c_int64_t , 3_c_int64_t ], &
377+ initial_team_index= answer)
378+ result_ = result_ .and. &
379+ assert_equals(merge (5_c_int ,6_c_int ,which_team== 1 ), answer)
380+ end if
381+
278382 result_ = result_ .and. &
279383 check_this_image_coarray(coarray_handle, 2 , initial_team)
280384 result_ = result_ .and. &
0 commit comments