Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reduce the size of partial shared malloc tests.
[simgrid.git] / teshsuite / smpi / mpich3-test / datatype / struct-verydeep.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2009 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6 /* Regression test for MPICH trac ticket #972, originally written by
7  * Rob Latham <robl@mcs.anl.gov> as a simplification of a type
8  * encountered by the HDF5 library.
9  *
10  * Should be run with 1 process. */
11
12 #include <stdio.h>
13 #include "mpi.h"
14
15 /* uncomment to use debugging routine in MPICH
16 extern int MPIDU_Datatype_debug(MPI_Datatype type, int depth);
17 */
18
19 int makeHDF5type0(MPI_Datatype * type);
20 int makeHDF5type0(MPI_Datatype * type)
21 {
22     MPI_Datatype ctg, vect, structype, vec2, structype2, vec3, structype3, vec4, structype4, vec5;
23
24     int b[3];
25     MPI_Aint d[3];
26     MPI_Datatype t[3];
27
28     MPI_Type_contiguous(4, MPI_BYTE, &ctg);
29
30     MPI_Type_vector(1, 5, 1, ctg, &vect);
31
32     b[0] = b[1] = b[2] = 1;
33     d[0] = 0;
34     d[1] = 0;
35     d[2] = 40;
36     t[0] = MPI_LB;
37     t[1] = vect;
38     t[2] = MPI_UB;
39     MPI_Type_create_struct(3, b, d, t, &structype);
40
41     MPI_Type_vector(1, 5, 1, structype, &vec2);
42
43     b[0] = b[1] = b[2] = 1;
44     d[0] = 0;
45     d[1] = 2000;
46     d[2] = 400;
47     t[0] = MPI_LB;
48     t[1] = vec2;
49     t[2] = MPI_UB;
50     MPI_Type_create_struct(3, b, d, t, &structype2);
51
52     MPI_Type_vector(1, 5, 1, structype2, &vec3);
53
54     b[0] = b[1] = b[2] = 1;
55     d[0] = 0;
56     d[1] = 0;
57     d[2] = 4000;
58     t[0] = MPI_LB;
59     t[1] = vec3;
60     t[2] = MPI_UB;
61     MPI_Type_create_struct(3, b, d, t, &structype3);
62
63     MPI_Type_vector(1, 5, 1, structype3, &vec4);
64
65     b[0] = b[1] = b[2] = 1;
66     d[0] = 0;
67     d[1] = 0;
68     d[2] = 40000;
69     t[0] = MPI_LB;
70     t[1] = vec4;
71     t[2] = MPI_UB;
72     MPI_Type_create_struct(3, b, d, t, &structype4);
73
74     MPI_Type_vector(1, 1, 1, structype4, &vec5);
75
76     b[0] = b[1] = b[2] = 1;
77     d[0] = 0;
78     d[1] = 160000;
79     d[2] = 200000;
80     t[0] = MPI_LB;
81     t[1] = vec5;
82     t[2] = MPI_UB;
83     MPI_Type_create_struct(3, b, d, t, type);
84
85     MPI_Type_free(&ctg);
86     MPI_Type_free(&vect);
87     MPI_Type_free(&structype);
88     MPI_Type_free(&vec2);
89     MPI_Type_free(&structype2);
90     MPI_Type_free(&vec3);
91     MPI_Type_free(&structype3);
92     MPI_Type_free(&vec4);
93     MPI_Type_free(&structype4);
94     MPI_Type_free(&vec5);
95     MPI_Type_commit(type);
96
97     return 0;
98 }
99
100 int makeHDF5type1(MPI_Datatype * type);
101 int makeHDF5type1(MPI_Datatype * type)
102 {
103     MPI_Datatype ctg, vect, structype, vec2, structype2, vec3, structype3, vec4, structype4, vec5;
104
105     int b[3];
106     MPI_Aint d[3];
107     MPI_Datatype t[3];
108
109     MPI_Type_contiguous(4, MPI_BYTE, &ctg);
110
111     MPI_Type_vector(1, 5, 1, ctg, &vect);
112
113     b[0] = b[1] = b[2] = 1;
114     d[0] = 0;
115     d[1] = 20;
116     d[2] = 40;
117     t[0] = MPI_LB;
118     t[1] = vect;
119     t[2] = MPI_UB;
120     MPI_Type_create_struct(3, b, d, t, &structype);
121
122     MPI_Type_vector(1, 5, 1, structype, &vec2);
123
124     b[0] = b[1] = b[2] = 1;
125     d[0] = 0;
126     d[1] = 0;
127     d[2] = 400;
128     t[0] = MPI_LB;
129     t[1] = vec2;
130     t[2] = MPI_UB;
131     MPI_Type_create_struct(3, b, d, t, &structype2);
132
133     MPI_Type_vector(1, 5, 1, structype2, &vec3);
134
135     b[0] = b[1] = b[2] = 1;
136     d[0] = 0;
137     d[1] = 0;
138     d[2] = 4000;
139     t[0] = MPI_LB;
140     t[1] = vec3;
141     t[2] = MPI_UB;
142     MPI_Type_create_struct(3, b, d, t, &structype3);
143
144     MPI_Type_vector(1, 5, 1, structype3, &vec4);
145
146     b[0] = b[1] = b[2] = 1;
147     d[0] = 0;
148     d[1] = 0;
149     d[2] = 40000;
150     t[0] = MPI_LB;
151     t[1] = vec4;
152     t[2] = MPI_UB;
153     MPI_Type_create_struct(3, b, d, t, &structype4);
154
155     MPI_Type_vector(1, 1, 1, structype4, &vec5);
156
157     b[0] = b[1] = b[2] = 1;
158     d[0] = 0;
159     d[1] = 160000;
160     d[2] = 200000;
161     t[0] = MPI_LB;
162     t[1] = vec5;
163     t[2] = MPI_UB;
164     MPI_Type_create_struct(3, b, d, t, type);
165
166     MPI_Type_free(&ctg);
167     MPI_Type_free(&vect);
168     MPI_Type_free(&structype);
169     MPI_Type_free(&vec2);
170     MPI_Type_free(&structype2);
171     MPI_Type_free(&vec3);
172     MPI_Type_free(&structype3);
173     MPI_Type_free(&vec4);
174     MPI_Type_free(&structype4);
175     MPI_Type_free(&vec5);
176     MPI_Type_commit(type);
177
178     return 0;
179 }
180
181 int makeHDF5type(MPI_Datatype * type);
182 int makeHDF5type(MPI_Datatype * type)
183 {
184     int i;
185
186 #define NTYPES 2
187
188     int blocklens[NTYPES];
189     MPI_Aint disps[NTYPES];
190
191     MPI_Datatype types[NTYPES];
192     makeHDF5type0(&(types[0]));
193     makeHDF5type1(&(types[1]));
194
195     for (i = 0; i < NTYPES; i++) {
196         blocklens[i] = 1;
197         disps[i] = 0;
198     }
199
200     MPI_Type_create_struct(NTYPES, blocklens, disps, types, type);
201     MPI_Type_commit(type);
202
203     for (i = 0; i < NTYPES; i++) {
204         MPI_Type_free(&(types[i]));
205     }
206     return 0;
207 }
208
209 int main(int argc, char **argv)
210 {
211     MPI_Datatype hdf5type;
212
213     MPI_Init(&argc, &argv);
214     makeHDF5type(&hdf5type);
215
216     /*MPIDU_Datatype_debug(hdf5type, 32); */
217
218     MPI_Type_free(&hdf5type);
219     MPI_Finalize();
220
221     printf(" No Errors\n");
222
223     return 0;
224 }