3 /* Test error handling. This is MPICH specific */
4 void Test_Send( void );
5 void Test_Recv( void );
6 void Test_Datatype( void );
7 void Test_Errors_warn( MPI_Comm *comm, int *code, ... );
8 void Test_Failed( const char * msg );
9 void Test_Passed(const char * msg );
11 void Test_Errors_warn( MPI_Comm *comm, int *code, ... )
13 char buf[MPI_MAX_ERROR_STRING+1];
15 static int in_handler = 0;
17 if (in_handler) return;
19 /* Convert code to message and print */
20 MPI_Error_string( *code, buf, &result_len );
21 printf( "%s\n", buf );
25 static int errcount = 0;
26 void Test_Failed( const char * msg )
28 printf( "FAILED: %s\n", msg );
31 void Test_Passed(const char * msg )
33 printf( "Passed: %s\n", msg );
36 int main( int argc, char *argv[] )
38 MPI_Errhandler TEST_ERRORS_WARN;
40 MPI_Init( &argc, &argv );
42 MPI_Errhandler_create( Test_Errors_warn, &TEST_ERRORS_WARN );
43 MPI_Errhandler_set(MPI_COMM_WORLD, TEST_ERRORS_WARN);
56 void Test_Send( void )
60 MPI_Datatype bogus_type = MPI_DATATYPE_NULL;
62 int large_tag, flag, small_tag;
65 MPI_Comm_rank( MPI_COMM_WORLD, &myrank );
66 MPI_Comm_size( MPI_COMM_WORLD, &size );
69 if (MPI_Send(buffer, 20, MPI_INT, dest,
70 1, MPI_COMM_NULL) == MPI_SUCCESS){
71 Test_Failed("NULL Communicator Test");
74 Test_Passed("NULL Communicator Test");
76 if (MPI_Send(buffer, -1, MPI_INT, dest,
77 1, MPI_COMM_WORLD) == MPI_SUCCESS){
78 Test_Failed("Invalid Count Test");
81 Test_Passed("Invalid Count Test");
83 if (MPI_Send(buffer, 20, bogus_type, dest,
84 1, MPI_COMM_WORLD) == MPI_SUCCESS){
85 Test_Failed("Invalid Type Test");
88 Test_Passed("Invalid Type Test");
91 if (small_tag == MPI_ANY_TAG) small_tag = -2;
92 if (MPI_Send(buffer, 20, MPI_INT, dest,
93 small_tag, MPI_COMM_WORLD) == MPI_SUCCESS) {
94 Test_Failed("Invalid Tag Test");
97 Test_Passed("Invalid Tag Test");
99 /* Form a tag that is too large */
100 MPI_Attr_get( MPI_COMM_WORLD, MPI_TAG_UB, (void **)&tag_ubp, &flag );
101 if (!flag) Test_Failed("Could not get tag ub!" );
102 large_tag = *tag_ubp + 1;
103 if (large_tag > *tag_ubp) {
104 if (MPI_Send(buffer, 20, MPI_INT, dest,
105 -1, MPI_COMM_WORLD) == MPI_SUCCESS) {
106 Test_Failed("Invalid Tag Test");
109 Test_Passed("Invalid Tag Test");
112 if (MPI_Send(buffer, 20, MPI_INT, 300,
113 1, MPI_COMM_WORLD) == MPI_SUCCESS) {
114 Test_Failed("Invalid Destination Test");
117 Test_Passed("Invalid Destination Test");
119 if (MPI_Send((void *)0, 10, MPI_INT, dest,
120 1, MPI_COMM_WORLD) == MPI_SUCCESS){
121 Test_Failed("Invalid Buffer Test (send)");
124 Test_Passed("Invalid Buffer Test (send)");
127 void Test_Recv( void )
131 void Test_Datatype( void )
140 MPI_Datatype bogus_type = MPI_DATATYPE_NULL;
144 int large_tag, flag, small_tag;
146 MPI_Comm_rank( MPI_COMM_WORLD, &myrank );
150 "There should be eight error messages about invalid communicator\n\
151 count argument, datatype argument, tag, rank, buffer send and buffer recv\n" );
154 /* A receive test might not fail until it is triggered... */
155 if (MPI_Recv((void *)0, 10, MPI_INT, src,
156 15, MPI_COMM_WORLD, &status) == MPI_SUCCESS){
157 Test_Failed("Invalid Buffer Test (recv)");
160 Test_Passed("Invalid Buffer Test (recv)");
162 /* Just to keep things happy, see if there is a message to receive */
163 { int flag, ibuf[10];
165 MPI_Iprobe( src, 15, MPI_COMM_WORLD, &flag, &status );
167 MPI_Recv( ibuf, 10, MPI_INT, src, 15, MPI_COMM_WORLD, &status );