Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add fortran tests from mpich-tests, enforce completion of mpich-tests suite with...
[simgrid.git] / teshsuite / smpi / mpich-test / pt2pt / fourth.c
1 #include <stdio.h>
2 #include "mpi.h"
3 #include "test.h"
4
5 int main( int argc, char **argv )
6 {
7     int rank, np, data = 777;
8     MPI_Request handle;
9     MPI_Status status;
10
11     MPI_Init( &argc, &argv );
12     MPI_Comm_rank( MPI_COMM_WORLD, &rank );
13     MPI_Comm_size( MPI_COMM_WORLD, &np );
14
15     if (np < 4) {
16       MPI_Finalize();
17       printf( "4 processors or more required, %d done\n", rank );
18       return(1);
19     }
20
21     if (rank == 0) {
22       MPI_Isend( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle );
23       MPI_Wait( &handle, &status );
24       MPI_Irecv( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle );
25       MPI_Wait( &handle, &status );
26       MPI_Isend( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle );
27       MPI_Wait( &handle, &status );
28       MPI_Irecv( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle );
29       MPI_Wait( &handle, &status );
30     }
31     else if (rank == 1) {
32       MPI_Irecv( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle );
33       MPI_Wait( &handle, &status );
34       MPI_Isend( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle );
35       MPI_Wait( &handle, &status );
36       MPI_Isend( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle );
37       MPI_Wait( &handle, &status );
38       MPI_Irecv( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle );
39       MPI_Wait( &handle, &status );
40     }
41     else if (rank == 2) {
42       MPI_Isend( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle );
43       MPI_Wait( &handle, &status );
44       MPI_Irecv( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle );
45       MPI_Wait( &handle, &status );
46       MPI_Irecv( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle );
47       MPI_Wait( &handle, &status );
48       MPI_Isend( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle );
49       MPI_Wait( &handle, &status );
50     }
51     else if (rank == 3) {
52       MPI_Irecv( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle );
53       MPI_Wait( &handle, &status );
54       MPI_Isend( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle );
55       MPI_Wait( &handle, &status );
56       MPI_Irecv( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle );
57       MPI_Wait( &handle, &status );
58       MPI_Isend( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle );
59       MPI_Wait( &handle, &status );
60     }
61     Test_Waitforall( );
62     MPI_Finalize();
63     return(0);
64 }