1 /*
2 * Copyright (C) by Argonne National Laboratory
3 * See COPYRIGHT in top-level directory
4 */
5
6 #include <stdio.h>
7 #include "mpi.h"
8 #include "mpitest.h"
9
main(int argc,char * argv[])10 int main(int argc, char *argv[])
11 {
12 int a[10], b[10], i;
13 MPI_Status status;
14 MPI_Request request;
15 int rank, count;
16 int errs = 0;
17
18
19 MTest_Init(0, 0);
20
21 MPI_Comm_rank(MPI_COMM_WORLD, &rank);
22
23 for (i = 0; i < 10; i++)
24 a[i] = i + 1;
25
26 status.MPI_ERROR = 0;
27 MPI_Isend(a, 0, MPI_INT, rank, 0, MPI_COMM_WORLD, &request);
28 MPI_Recv(b, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
29 MPI_Get_count(&status, MPI_INT, &count);
30 if (status.MPI_SOURCE != rank || status.MPI_TAG != 0 || status.MPI_ERROR != 0 || count != 0) {
31 errs++;
32 printf("1 status = %d %d %d %d\n", status.MPI_SOURCE, status.MPI_TAG,
33 status.MPI_ERROR, count);
34 }
35 /* printf("b[0] = %d\n", b[0]); */
36 MPI_Wait(&request, &status);
37
38 MPI_Isend(NULL, 0, MPI_INT, rank, 0, MPI_COMM_WORLD, &request);
39 MPI_Recv(NULL, 0, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
40 MPI_Get_count(&status, MPI_INT, &count);
41 if (status.MPI_SOURCE != rank || status.MPI_TAG != 0 || status.MPI_ERROR != 0 || count != 0) {
42 errs++;
43 printf("2 status = %d %d %d %d\n", status.MPI_SOURCE, status.MPI_TAG,
44 status.MPI_ERROR, count);
45 }
46 MPI_Wait(&request, &status);
47
48 MTest_Finalize(errs);
49 return MTestReturnValue(errs);
50 }
51