4 #if defined(NEEDS_STDLIB_PROTOTYPES)
9 Check pack/unpack of mixed datatypes.
12 int main( int argc, char **argv )
15 char buffer[BUF_SIZE];
16 int n, size, src, dest, errcnt, errs;
21 MPI_Init(&argc, &argv);
23 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
38 MPI_Pack(&n, 1, MPI_INT, buffer, BUF_SIZE, &pos, MPI_COMM_WORLD);
39 MPI_Pack(&a, 1, MPI_DOUBLE, buffer, BUF_SIZE, &pos,
41 MPI_Pack(&b, 1, MPI_DOUBLE, buffer, BUF_SIZE, &pos,
43 /* printf( "%d\n", pos ); */
44 MPI_Send(&pos, 1, MPI_INT, dest, 999, MPI_COMM_WORLD);
45 MPI_Send(buffer, pos, MPI_PACKED, dest, 99, MPI_COMM_WORLD);
49 MPI_Recv(&size, 1, MPI_INT, src, 999, MPI_COMM_WORLD, &status);
50 MPI_Recv(buffer, size, MPI_PACKED, src, 99,
51 MPI_COMM_WORLD, &status);
53 MPI_Unpack(buffer, size, &pos, &n, 1, MPI_INT, MPI_COMM_WORLD);
54 MPI_Unpack(buffer, size, &pos, &a, 1, MPI_DOUBLE, MPI_COMM_WORLD);
55 MPI_Unpack(buffer, size, &pos, &b, 1, MPI_DOUBLE, MPI_COMM_WORLD);
59 printf( "Wrong value for n; got %d expected %d\n", n, 10 );
63 printf( "Wrong value for a; got %f expected %f\n", a, 1.1 );
67 printf( "Wrong value for b; got %f expected %f\n", b, 2.2 );
70 MPI_Allreduce( &errcnt, &errs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD );
72 if (errs == 0) printf( "No errors\n" );
73 else printf( "%d errors\n", errs );