Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
We don't support MPI_Init( 0, 0 ), actually, and crash when this happens.
[simgrid.git] / teshsuite / smpi / mpich3-test / init / finalized.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2003 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6 #include "mpi.h"
7 #include <stdio.h>
8
9 /* FIXME: This test program assumes that MPI_Error_string will work even
10    if MPI is not initialized.  That is not guaranteed.  */
11
12 /* Normally, when checking for error returns from MPI calls, you must ensure 
13    that the error handler on the relevant object (communicator, file, or
14    window) has been set to MPI_ERRORS_RETURN.  The tests in this 
15    program are a special case, as either a failure or an abort will
16    indicate a problem */
17
18 int main( int argc, char *argv[] )
19 {
20     int error;
21     int flag;
22     char err_string[1024];
23     int length = 1024;
24     int rank;
25
26     flag = 0;
27     error = MPI_Finalized(&flag);
28     if (error != MPI_SUCCESS)
29     {
30         MPI_Error_string(error, err_string, &length);
31         printf("MPI_Finalized failed: %s\n", err_string);
32         fflush(stdout);
33         return error;
34     }
35     if (flag)
36     {
37         printf("MPI_Finalized returned true before MPI_Init.\n");
38         return -1;
39     }
40
41     error = MPI_Init(&argc, &argv);
42     if (error != MPI_SUCCESS)
43     {
44         MPI_Error_string(error, err_string, &length);
45         printf("MPI_Init failed: %s\n", err_string);
46         fflush(stdout);
47         return error;
48     }
49
50     error = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
51     if (error != MPI_SUCCESS)
52     {
53         MPI_Error_string(error, err_string, &length);
54         printf("MPI_Comm_rank failed: %s\n", err_string);
55         fflush(stdout);
56         MPI_Abort(MPI_COMM_WORLD, error);
57         return error;
58     }
59
60     flag = 0;
61     error = MPI_Finalized(&flag);
62     if (error != MPI_SUCCESS)
63     {
64         MPI_Error_string(error, err_string, &length);
65         printf("MPI_Finalized failed: %s\n", err_string);
66         fflush(stdout);
67         MPI_Abort(MPI_COMM_WORLD, error);
68         return error;
69     }
70     if (flag)
71     {
72         printf("MPI_Finalized returned true before MPI_Finalize.\n");
73         fflush(stdout);
74         MPI_Abort(MPI_COMM_WORLD, error);
75         return -1;
76     }
77
78     error = MPI_Barrier(MPI_COMM_WORLD);
79     if (error != MPI_SUCCESS)
80     {
81         MPI_Error_string(error, err_string, &length);
82         printf("MPI_Barrier failed: %s\n", err_string);
83         fflush(stdout);
84         MPI_Abort(MPI_COMM_WORLD, error);
85         return error;
86     }
87
88     error = MPI_Finalize();
89     if (error != MPI_SUCCESS)
90     {
91         MPI_Error_string(error, err_string, &length);
92         printf("MPI_Finalize failed: %s\n", err_string);
93         fflush(stdout);
94         return error;
95     }
96
97     flag = 0;
98     error = MPI_Finalized(&flag);
99     if (error != MPI_SUCCESS)
100     {
101         MPI_Error_string(error, err_string, &length);
102         printf("MPI_Finalized failed: %s\n", err_string);
103         fflush(stdout);
104         return error;
105     }
106     if (!flag)
107     {
108         printf("MPI_Finalized returned false after MPI_Finalize.\n");
109         return -1;
110     }
111     if (rank == 0)
112     {
113         printf(" No Errors\n");
114     }
115     return 0;  
116 }