Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to avoid rare bug on one ci node.
[simgrid.git] / teshsuite / smpi / mpich3-test / topo / dims1.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 #include "mpitest.h"
9
10 int prodof(int ndims, const int dims[]);
11 int increasing(int ndims, const int dims[]);
12
13 int prodof(int ndims, const int dims[])
14 {
15     int i, prod = 1;
16     for (i = 0; i < ndims; i++)
17         prod *= dims[i];
18     return prod;
19 }
20
21 int increasing(int ndims, const int dims[])
22 {
23     int i, err = 0;
24     for (i = 1; i < ndims; i++) {
25         if (dims[i] > dims[i - 1]) {
26             printf("%d = dims[%d] > dims[%d] = %d\n", dims[i], i, i - 1, dims[i - 1]);
27             err = 1;
28         }
29     }
30     return err;
31 }
32
33 int main(int argc, char *argv[])
34 {
35     int errs = 0;
36     int dims[4], nnodes, ndims;
37
38     MTest_Init(&argc, &argv);
39
40     /* Test multiple dims create values.  For each, make sure that the
41      * product of dims is the number of input nodes */
42     nnodes = 2 * 3 * 5 * 7 * 11;
43     ndims = 2;
44     dims[0] = dims[1] = 0;
45     MPI_Dims_create(nnodes, ndims, dims);
46     if (prodof(ndims, dims) != nnodes) {
47         errs++;
48         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
49     }
50     if (increasing(ndims, dims)) {
51         errs++;
52         printf
53             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
54         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
55     }
56
57     /* Test multiple dims create values.  For each, make sure that the
58      * product of dims is the number of input nodes */
59     nnodes = 2 * 7;
60     ndims = 2;
61     dims[0] = dims[1] = 0;
62     MPI_Dims_create(nnodes, ndims, dims);
63     if (prodof(ndims, dims) != nnodes) {
64         errs++;
65         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
66     }
67     if (increasing(ndims, dims)) {
68         errs++;
69         printf
70             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
71         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
72     }
73
74     nnodes = 2 * 2 * 3 * 3 * 5 * 7 * 11;
75     ndims = 2;
76     dims[0] = dims[1] = 0;
77     MPI_Dims_create(nnodes, ndims, dims);
78     if (prodof(ndims, dims) != nnodes) {
79         errs++;
80         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
81     }
82     if (increasing(ndims, dims)) {
83         errs++;
84         printf
85             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
86         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
87     }
88
89     nnodes = 11;
90     ndims = 2;
91     dims[0] = dims[1] = 0;
92     MPI_Dims_create(nnodes, ndims, dims);
93     if (prodof(ndims, dims) != nnodes) {
94         errs++;
95         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
96     }
97     if (increasing(ndims, dims)) {
98         errs++;
99         printf
100             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
101         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
102     }
103
104     nnodes = 5 * 7 * 11;
105     ndims = 4;
106     dims[0] = dims[1] = dims[2] = dims[3] = 0;
107     MPI_Dims_create(nnodes, ndims, dims);
108     if (prodof(ndims, dims) != nnodes) {
109         errs++;
110         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
111     }
112     if (increasing(ndims, dims)) {
113         errs++;
114         printf
115             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
116         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
117     }
118
119     nnodes = 64;
120     ndims = 4;
121     dims[0] = dims[1] = dims[2] = dims[3] = 0;
122     MPI_Dims_create(nnodes, ndims, dims);
123     if (prodof(ndims, dims) != nnodes) {
124         errs++;
125         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
126     }
127     if (increasing(ndims, dims)) {
128         errs++;
129         printf
130             ("dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n");
131         printf("dims create returned the wrong decomposition for %d in %d dims\n", nnodes, ndims);
132     }
133
134     MTest_Finalize(errs);
135     MPI_Finalize();
136     return 0;
137
138 }