46 PROGRAM test_xmap_all2all_fail
48 USE ftest_common
, ONLY: init_mpi, finish_mpi, test_abort
49 USE test_idxlist_utils
, ONLY: test_err_count
56 INTEGER,
PARAMETER :: xi = xt_int_kind
57 INTEGER :: my_rank, ierror, list_size
60 CALL mpi_comm_rank(mpi_comm_world, my_rank, ierror)
62 CALL test_xmap1(list_size)
64 IF (test_err_count() /= 0) &
65 CALL test_abort(
"non-zero error count!", &
71 SUBROUTINE shift_idx(idx, offset)
72 INTEGER(xt_int_kind),
INTENT(inout) :: idx(:)
73 INTEGER(xt_int_kind),
INTENT(in) :: offset
76 idx(i) = idx(i) + int(my_rank, xi) * offset
78 END SUBROUTINE shift_idx
80 SUBROUTINE test_xmap(src_index_list, dst_index_list)
81 INTEGER(xt_int_kind),
INTENT(in) :: src_index_list(:), dst_index_list(:)
82 TYPE(xt_idxlist) :: src_idxlist, dst_idxlist
93 CALL test_abort(
"error in xmap construction", &
98 CALL test_abort(
"error in xt_xmap_get_num_sources", &
102 IF (rank(1) /= my_rank) &
103 CALL test_abort(
"error in xt_xmap_get_destination_ranks", &
108 IF (rank(1) /= my_rank) &
109 CALL test_abort(
"error in xt_xmap_get_source_ranks", &
113 END SUBROUTINE test_xmap
115 SUBROUTINE test_xmap1(num_idx)
116 INTEGER,
INTENT(in) :: num_idx
118 INTEGER(xt_int_kind) :: src_index_list(num_idx), &
119 dst_index_list(num_idx)
121 src_index_list(i) = int(i, xi)
123 CALL shift_idx(src_index_list, int(num_idx, xi))
125 dst_index_list(i) = int(num_idx - i + 2, xi)
127 CALL shift_idx(dst_index_list, int(num_idx, xi))
129 CALL test_xmap(src_index_list, dst_index_list)
130 END SUBROUTINE test_xmap1
132 SUBROUTINE parse_options
133 INTEGER :: i, num_cmd_args, arg_len
134 INTEGER,
PARAMETER :: max_opt_arg_len = 80
135 CHARACTER(max_opt_arg_len) :: optarg
136 num_cmd_args = command_argument_count()
138 DO WHILE (i < num_cmd_args)
139 CALL get_command_argument(i, optarg, arg_len)
140 IF (optarg(1:2) ==
'-s' .AND. i < num_cmd_args .AND. arg_len == 2)
THEN 141 CALL get_command_argument(i + 1, optarg, arg_len)
142 IF (arg_len > max_opt_arg_len) &
143 CALL test_abort(
'incorrect argument to command-line option -m', &
146 IF (optarg(1:arg_len) ==
"big")
THEN 148 ELSE IF (optarg(1:arg_len) ==
"small")
THEN 151 WRITE (0, *)
'arg to -s: ', optarg(1:arg_len)
152 CALL test_abort(
'incorrect argument to command-line option -m', &
158 WRITE (0, *)
'unexpected command-line argument parsing error: ', &
161 CALL test_abort(
'unexpected command-line argument', &
166 END SUBROUTINE parse_options
168 END PROGRAM test_xmap_all2all_fail