1 /*
2 * Copyright (C) 2003, Northwestern University and Argonne National Laboratory
3 * See COPYRIGHT notice in top-level directory.
4 *
5 * $Id: nc_test.c 2744 2016-12-28 16:25:22Z wkliao $
6 */
7
8 #include <libgen.h> /* basename() */
9 #include <unistd.h>
10 #include "tests.h"
11
12 /*
13 * Test driver for netCDF-3 interface. This program performs tests against
14 * the netCDF-3 specification for all user-level functions in an
15 * implementation of the netCDF library.
16 *
17 * Unless invoked with "-r" (read_only) option, must be invoked from a
18 * directory in which the invoker has write permission.
19 *
20 * Files:
21 * The read-only tests read files:
22 * test.nc (see below)
23 * test_get.c (used merely as an example of a non-netCDF file)
24 *
25 * The write tests
26 * read test.nc (see below)
27 * write scratch.nc (deleted after each test)
28 *
29 * The file test.nc is created by running nc_test with the -c (create) option.
30 * It is described by the following global variables.
31 */
32
33
34 /*
35 * global variables (defined by function init_gvars) describing file test.nc
36 */
37 char dim_name[NDIMS][3];
38 MPI_Offset dim_len[NDIMS];
39 char var_name[NVARS][2+MAX_RANK];
40 nc_type var_type[NVARS];
41 int var_rank[NVARS];
42 int var_dimid[NVARS][MAX_RANK];
43 MPI_Offset var_shape[NVARS][MAX_RANK];
44 MPI_Offset var_nels[NVARS];
45 int var_natts[NVARS];
46 char att_name[NVARS][MAX_NATTS][2];
47 char gatt_name[NGATTS][3];
48 nc_type att_type[NVARS][NGATTS];
49 nc_type gatt_type[NGATTS];
50 MPI_Offset att_len[NVARS][MAX_NATTS];
51 MPI_Offset gatt_len[NGATTS];
52
53 /*
54 * command-line options
55 */
56 static int create_file; /* if 1, create file test.nc */
57 int read_only; /* if 1, don't try to change files */
58 int verbose; /* if 1, print details of tests */
59 int max_nmpt; /* max. number of messages per test */
60
61 /*
62 * Misc. global variables
63 */
64 int nfails; /* number of failures in specific test */
65 char testfile[128];
66 char scratch[128];
67 MPI_Comm comm = MPI_COMM_WORLD; /* mpi communicator for parallel-netcdf */
68 MPI_Info info;
69
70 static void
usage(char * progname)71 usage(char *progname)
72 {
73 error("%s [-c | -hrv -n <MAX_NMPT>]\n", progname);
74 error(" [-h] Print help\n" );
75 error(" [-c] Create file test.nc (Do not do tests)\n" );
76 error(" [-r] Just do read-only tests\n" );
77 error(" [-v] Verbose mode\n" );
78 error(" [-2] (with -c) create file with CDF-2 format\n" );
79 error(" [-n <MAX_NMPT>] max. number of messages per test (Default: 8)\n");
80 error(" [-d directory] directory for storing input/output files\n");
81 }
82
83 #define NC_CHECK_AND_PRINT \
84 nfailsTotal += nfails; \
85 if (verbose) print( "*** Testing %-30s ... ",func_name); \
86 if (nfails == 0 && verbose) { \
87 if (noks > 0) printf("%4d good comparisons. ok", noks); \
88 printf("\n"); \
89 } \
90 if (nfails > 0) { \
91 print("\n\t### %d FAILURES TESTING %s! Stop ... ###\n", \
92 nfails,func_name); \
93 goto fn_exit; \
94 }
95
96 #define NC_TEST(func) { \
97 int noks; \
98 char func_name[64]; \
99 nfails = 0; \
100 sprintf(func_name, "test_%s",#func); \
101 noks = test_ ## func(); \
102 NC_CHECK_AND_PRINT \
103 }
104
105 #define NC_TEST1(func, arg) { \
106 int noks; \
107 char func_name[64]; \
108 sprintf(func_name, "test_%s",#func); \
109 noks = test_ ## func(arg); \
110 NC_CHECK_AND_PRINT \
111 }
112
113 #define NC_TEST2(func, arg1, arg2) { \
114 int noks; \
115 char func_name[64]; \
116 sprintf(func_name, "test_%s",#func); \
117 noks = test_ ## func(arg1, arg2); \
118 NC_CHECK_AND_PRINT \
119 }
120
121 #if 1 /* both CRAY MPP and OSF/1 Alpha systems need this */
122 #include <signal.h>
123 #endif /* T90 */
124
125 int
main(int argc,char * argv[])126 main(int argc, char *argv[])
127 {
128 extern char *optarg;
129 int cdf_format, c;
130 int numGatts, numTypes, numVars;
131 int nfailsTotal = 0; /* total number of failures */
132
133 #if 1 /* both CRAY MPP and OSF/1 Alpha systems need this */
134 /*
135 * Some of the extreme test assignments in this program trigger
136 * floating point exceptions on CRAY T90
137 */
138 (void) signal(SIGFPE, SIG_IGN);
139 #endif
140
141 MPI_Init(&argc, &argv);
142
143 cdf_format = 1; /* 1: CDF-1, 2: CDF-2 5: CDF-5 */
144 create_file = 0; /* file test.nc will normally already exist */
145 read_only = 0; /* assume may write in test dir as default */
146 verbose = 0;
147 max_nmpt = 8;
148 strcpy(testfile, "test.nc"); /* read-only testfile */
149 strcpy(scratch, "scratch.nc"); /* writable scratch file */
150
151 while ((c = getopt(argc, argv, "c25hrvn:d:")) != EOF)
152 switch(c) {
153 case 'c': /* Create file test.nc */
154 create_file = 1;
155 break;
156 case 'r': /* just perform read-only tests */
157 read_only = 1;
158 break;
159 case 'v': /* verbose mode */
160 verbose = 1;
161 break;
162 case 'n': /* verbose mode */
163 max_nmpt = (int)strtol(optarg,NULL,10);
164 break;
165 case '2':
166 cdf_format = 2;
167 break;
168 case '5':
169 cdf_format = 5;
170 case 'd':
171 sprintf(testfile, "%s/test.nc", optarg);
172 sprintf(scratch, "%s/scratch.nc", optarg);
173 break;
174 case 'h':
175 case '?':
176 usage(argv[0]);
177 return 1;
178 }
179
180 MPI_Info_create(&info);
181 /* MPI_Info_set(info, "romio_pvfs2_posix_write", "enable"); */
182
183 numGatts = 6;
184 numVars = 136;
185 numTypes = 6;
186 if (cdf_format == 5) {
187 numGatts = NGATTS;
188 numVars = NVARS;
189 numTypes = NTYPES;
190 }
191
192 if (cdf_format == 2)
193 ncmpi_set_default_format(NC_FORMAT_CDF2, NULL);
194 else if (cdf_format == 5)
195 ncmpi_set_default_format(NC_FORMAT_CDF5, NULL);
196 else
197 ncmpi_set_default_format(NC_FORMAT_CLASSIC, NULL);
198
199 /* Initialize global variables defining test file */
200 init_gvars(numGatts, numTypes, numVars);
201
202 if ( create_file ) {
203 write_file(testfile, numGatts, numVars);
204 MPI_Info_free(&info);
205 MPI_Finalize();
206 return nfailsTotal > 0;
207 }
208
209 /* delete any existing scratch netCDF file */
210 if ( ! read_only ) {
211 if (access(scratch, F_OK) == 0)
212 unlink(scratch);
213 }
214
215 char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
216 sprintf(cmd_str, "*** TESTING C %s for format CDF-%d ", basename(argv[0]), cdf_format);
217 printf("%-66s ------ ",cmd_str);
218 free(cmd_str);
219
220 /* Test read-only functions, using pregenerated test-file */
221 NC_TEST(ncmpi_strerror);
222 NC_TEST(ncmpi_open);
223 NC_TEST(ncmpi_close);
224 NC_TEST2(ncmpi_inq, numGatts, numVars);
225 NC_TEST(ncmpi_inq_dimid);
226 NC_TEST(ncmpi_inq_dim);
227 NC_TEST(ncmpi_inq_dimlen);
228 NC_TEST(ncmpi_inq_dimname);
229 NC_TEST1(ncmpi_inq_varid, numVars);
230 NC_TEST1(ncmpi_inq_var, numVars);
231 NC_TEST1(ncmpi_inq_natts, numGatts);
232 NC_TEST(ncmpi_inq_ndims);
233 NC_TEST1(ncmpi_inq_nvars, numVars);
234 NC_TEST(ncmpi_inq_unlimdim);
235 NC_TEST1(ncmpi_inq_vardimid, numVars);
236 NC_TEST1(ncmpi_inq_varname, numVars);
237 NC_TEST2(ncmpi_inq_varnatts, numGatts, numVars);
238 NC_TEST1(ncmpi_inq_varndims, numVars);
239 NC_TEST1(ncmpi_inq_vartype, numVars);
240 NC_TEST1(ncmpi_get_var_text, numVars);
241 NC_TEST1(ncmpi_get_var_schar, numVars);
242 NC_TEST1(ncmpi_get_var_short, numVars);
243 NC_TEST1(ncmpi_get_var_int, numVars);
244 NC_TEST1(ncmpi_get_var_long, numVars);
245 NC_TEST1(ncmpi_get_var_float, numVars);
246 NC_TEST1(ncmpi_get_var_double, numVars);
247 NC_TEST1(ncmpi_get_var_uchar, numVars);
248 NC_TEST1(ncmpi_get_var_ushort, numVars);
249 NC_TEST1(ncmpi_get_var_uint, numVars);
250 NC_TEST1(ncmpi_get_var_longlong, numVars);
251 NC_TEST1(ncmpi_get_var_ulonglong, numVars);
252 NC_TEST1(ncmpi_get_var1_text, numVars);
253 NC_TEST1(ncmpi_get_var1_schar, numVars);
254 NC_TEST1(ncmpi_get_var1_short, numVars);
255 NC_TEST1(ncmpi_get_var1_int, numVars);
256 NC_TEST1(ncmpi_get_var1_long, numVars);
257 NC_TEST1(ncmpi_get_var1_float, numVars);
258 NC_TEST1(ncmpi_get_var1_double, numVars);
259 NC_TEST1(ncmpi_get_var1_uchar, numVars);
260 NC_TEST1(ncmpi_get_var1_ushort, numVars);
261 NC_TEST1(ncmpi_get_var1_uint, numVars);
262 NC_TEST1(ncmpi_get_var1_longlong, numVars);
263 NC_TEST1(ncmpi_get_var1_ulonglong, numVars);
264 NC_TEST1(ncmpi_get_var1, numVars);
265 NC_TEST1(ncmpi_get_vara_text, numVars);
266 NC_TEST1(ncmpi_get_vara_schar, numVars);
267 NC_TEST1(ncmpi_get_vara_short, numVars);
268 NC_TEST1(ncmpi_get_vara_int, numVars);
269 NC_TEST1(ncmpi_get_vara_long, numVars);
270 NC_TEST1(ncmpi_get_vara_float, numVars);
271 NC_TEST1(ncmpi_get_vara_double, numVars);
272 NC_TEST1(ncmpi_get_vara_uchar, numVars);
273 NC_TEST1(ncmpi_get_vara_ushort, numVars);
274 NC_TEST1(ncmpi_get_vara_uint, numVars);
275 NC_TEST1(ncmpi_get_vara_longlong, numVars);
276 NC_TEST1(ncmpi_get_vara_ulonglong, numVars);
277 NC_TEST1(ncmpi_get_vara, numVars);
278 NC_TEST1(ncmpi_get_vars_text, numVars);
279 NC_TEST1(ncmpi_get_vars_schar, numVars);
280 NC_TEST1(ncmpi_get_vars_short, numVars);
281 NC_TEST1(ncmpi_get_vars_int, numVars);
282 NC_TEST1(ncmpi_get_vars_long, numVars);
283 NC_TEST1(ncmpi_get_vars_float, numVars);
284 NC_TEST1(ncmpi_get_vars_double, numVars);
285 NC_TEST1(ncmpi_get_vars_uchar, numVars);
286 NC_TEST1(ncmpi_get_vars_ushort, numVars);
287 NC_TEST1(ncmpi_get_vars_uint, numVars);
288 NC_TEST1(ncmpi_get_vars_longlong, numVars);
289 NC_TEST1(ncmpi_get_vars_ulonglong, numVars);
290 NC_TEST1(ncmpi_get_vars, numVars);
291 NC_TEST1(ncmpi_get_varm_text, numVars);
292 NC_TEST1(ncmpi_get_varm_schar, numVars);
293 NC_TEST1(ncmpi_get_varm_short, numVars);
294 NC_TEST1(ncmpi_get_varm_int, numVars);
295 NC_TEST1(ncmpi_get_varm_long, numVars);
296 NC_TEST1(ncmpi_get_varm_float, numVars);
297 NC_TEST1(ncmpi_get_varm_double, numVars);
298 NC_TEST1(ncmpi_get_varm_uchar, numVars);
299 NC_TEST1(ncmpi_get_varm_ushort, numVars);
300 NC_TEST1(ncmpi_get_varm_uint, numVars);
301 NC_TEST1(ncmpi_get_varm_longlong, numVars);
302 NC_TEST1(ncmpi_get_varm_ulonglong, numVars);
303 NC_TEST1(ncmpi_get_varm, numVars);
304 NC_TEST2(ncmpi_get_att_text, numGatts, numVars);
305 NC_TEST2(ncmpi_get_att_schar, numGatts, numVars);
306 NC_TEST2(ncmpi_get_att_short, numGatts, numVars);
307 NC_TEST2(ncmpi_get_att_int, numGatts, numVars);
308 NC_TEST2(ncmpi_get_att_long, numGatts, numVars);
309 NC_TEST2(ncmpi_get_att_float, numGatts, numVars);
310 NC_TEST2(ncmpi_get_att_double, numGatts, numVars);
311 NC_TEST2(ncmpi_get_att_uchar, numGatts, numVars);
312 NC_TEST2(ncmpi_get_att_ushort, numGatts, numVars);
313 NC_TEST2(ncmpi_get_att_uint, numGatts, numVars);
314 NC_TEST2(ncmpi_get_att_longlong, numGatts, numVars);
315 NC_TEST2(ncmpi_get_att_ulonglong, numGatts, numVars);
316 NC_TEST2(ncmpi_get_att, numGatts, numVars);
317 NC_TEST2(ncmpi_inq_att, numGatts, numVars);
318 NC_TEST2(ncmpi_inq_attname, numGatts, numVars);
319 NC_TEST2(ncmpi_inq_attid, numGatts, numVars);
320 NC_TEST2(ncmpi_inq_attlen, numGatts, numVars);
321 NC_TEST2(ncmpi_inq_atttype, numGatts, numVars);
322
323 /* nonblocking I/O */
324 NC_TEST1(ncmpi_iget_var_text, numVars);
325 NC_TEST1(ncmpi_iget_var_schar, numVars);
326 NC_TEST1(ncmpi_iget_var_short, numVars);
327 NC_TEST1(ncmpi_iget_var_int, numVars);
328 NC_TEST1(ncmpi_iget_var_long, numVars);
329 NC_TEST1(ncmpi_iget_var_float, numVars);
330 NC_TEST1(ncmpi_iget_var_double, numVars);
331 NC_TEST1(ncmpi_iget_var_uchar, numVars);
332 NC_TEST1(ncmpi_iget_var_ushort, numVars);
333 NC_TEST1(ncmpi_iget_var_uint, numVars);
334 NC_TEST1(ncmpi_iget_var_longlong, numVars);
335 NC_TEST1(ncmpi_iget_var_ulonglong, numVars);
336 NC_TEST1(ncmpi_iget_var, numVars);
337 NC_TEST1(ncmpi_iget_var1_text, numVars);
338 NC_TEST1(ncmpi_iget_var1_schar, numVars);
339 NC_TEST1(ncmpi_iget_var1_short, numVars);
340 NC_TEST1(ncmpi_iget_var1_int, numVars);
341 NC_TEST1(ncmpi_iget_var1_long, numVars);
342 NC_TEST1(ncmpi_iget_var1_float, numVars);
343 NC_TEST1(ncmpi_iget_var1_double, numVars);
344 NC_TEST1(ncmpi_iget_var1_uchar, numVars);
345 NC_TEST1(ncmpi_iget_var1_ushort, numVars);
346 NC_TEST1(ncmpi_iget_var1_uint, numVars);
347 NC_TEST1(ncmpi_iget_var1_longlong, numVars);
348 NC_TEST1(ncmpi_iget_var1_ulonglong, numVars);
349 NC_TEST1(ncmpi_iget_var1, numVars);
350 NC_TEST1(ncmpi_iget_vara_text, numVars);
351 NC_TEST1(ncmpi_iget_vara_schar, numVars);
352 NC_TEST1(ncmpi_iget_vara_short, numVars);
353 NC_TEST1(ncmpi_iget_vara_int, numVars);
354 NC_TEST1(ncmpi_iget_vara_long, numVars);
355 NC_TEST1(ncmpi_iget_vara_float, numVars);
356 NC_TEST1(ncmpi_iget_vara_double, numVars);
357 NC_TEST1(ncmpi_iget_vara_uchar, numVars);
358 NC_TEST1(ncmpi_iget_vara_ushort, numVars);
359 NC_TEST1(ncmpi_iget_vara_uint, numVars);
360 NC_TEST1(ncmpi_iget_vara_longlong, numVars);
361 NC_TEST1(ncmpi_iget_vara_ulonglong, numVars);
362 NC_TEST1(ncmpi_iget_vara, numVars);
363 NC_TEST1(ncmpi_iget_vars_text, numVars);
364 NC_TEST1(ncmpi_iget_vars_schar, numVars);
365 NC_TEST1(ncmpi_iget_vars_short, numVars);
366 NC_TEST1(ncmpi_iget_vars_int, numVars);
367 NC_TEST1(ncmpi_iget_vars_long, numVars);
368 NC_TEST1(ncmpi_iget_vars_float, numVars);
369 NC_TEST1(ncmpi_iget_vars_double, numVars);
370 NC_TEST1(ncmpi_iget_vars_uchar, numVars);
371 NC_TEST1(ncmpi_iget_vars_ushort, numVars);
372 NC_TEST1(ncmpi_iget_vars_uint, numVars);
373 NC_TEST1(ncmpi_iget_vars_longlong, numVars);
374 NC_TEST1(ncmpi_iget_vars_ulonglong, numVars);
375 NC_TEST1(ncmpi_iget_vars, numVars);
376 NC_TEST1(ncmpi_iget_varm_text, numVars);
377 NC_TEST1(ncmpi_iget_varm_schar, numVars);
378 NC_TEST1(ncmpi_iget_varm_short, numVars);
379 NC_TEST1(ncmpi_iget_varm_int, numVars);
380 NC_TEST1(ncmpi_iget_varm_long, numVars);
381 NC_TEST1(ncmpi_iget_varm_float, numVars);
382 NC_TEST1(ncmpi_iget_varm_double, numVars);
383 NC_TEST1(ncmpi_iget_varm_uchar, numVars);
384 NC_TEST1(ncmpi_iget_varm_ushort, numVars);
385 NC_TEST1(ncmpi_iget_varm_uint, numVars);
386 NC_TEST1(ncmpi_iget_varm_longlong, numVars);
387 NC_TEST1(ncmpi_iget_varm_ulonglong, numVars);
388 NC_TEST1(ncmpi_iget_varm, numVars);
389
390 /* Test write functions */
391 if (! read_only) {
392 NC_TEST(ncmpi_create);
393 NC_TEST2(ncmpi_redef, numGatts, numVars);
394 /* NC_TEST(ncmpi_enddef); redundant, as it calls test_ncmpi_redef() */
395 NC_TEST2(ncmpi_sync, numGatts, numVars);
396 NC_TEST2(ncmpi_abort, numGatts, numVars);
397 NC_TEST1(ncmpi_def_dim, numVars);
398 NC_TEST(ncmpi_rename_dim);
399 NC_TEST1(ncmpi_def_var, numVars);
400 NC_TEST1(ncmpi_put_var_text, numVars);
401 NC_TEST1(ncmpi_put_var_schar, numVars);
402 NC_TEST1(ncmpi_put_var_short, numVars);
403 NC_TEST1(ncmpi_put_var_int, numVars);
404 NC_TEST1(ncmpi_put_var_long, numVars);
405 NC_TEST1(ncmpi_put_var_float, numVars);
406 NC_TEST1(ncmpi_put_var_double, numVars);
407 NC_TEST1(ncmpi_put_var_uchar, numVars);
408 NC_TEST1(ncmpi_put_var_ushort, numVars);
409 NC_TEST1(ncmpi_put_var_uint, numVars);
410 NC_TEST1(ncmpi_put_var_longlong, numVars);
411 NC_TEST1(ncmpi_put_var_ulonglong, numVars);
412 NC_TEST1(ncmpi_put_var1_text, numVars);
413 NC_TEST1(ncmpi_put_var1_schar, numVars);
414 NC_TEST1(ncmpi_put_var1_short, numVars);
415 NC_TEST1(ncmpi_put_var1_int, numVars);
416 NC_TEST1(ncmpi_put_var1_long, numVars);
417 NC_TEST1(ncmpi_put_var1_float, numVars);
418 NC_TEST1(ncmpi_put_var1_double, numVars);
419 NC_TEST1(ncmpi_put_var1_uchar, numVars);
420 NC_TEST1(ncmpi_put_var1_ushort, numVars);
421 NC_TEST1(ncmpi_put_var1_uint, numVars);
422 NC_TEST1(ncmpi_put_var1_longlong, numVars);
423 NC_TEST1(ncmpi_put_var1_ulonglong, numVars);
424 NC_TEST1(ncmpi_put_var1, numVars);
425 NC_TEST1(ncmpi_put_vara_text, numVars);
426 NC_TEST1(ncmpi_put_vara_schar, numVars);
427 NC_TEST1(ncmpi_put_vara_short, numVars);
428 NC_TEST1(ncmpi_put_vara_int, numVars);
429 NC_TEST1(ncmpi_put_vara_long, numVars);
430 NC_TEST1(ncmpi_put_vara_float, numVars);
431 NC_TEST1(ncmpi_put_vara_double, numVars);
432 NC_TEST1(ncmpi_put_vara_uchar, numVars);
433 NC_TEST1(ncmpi_put_vara_ushort, numVars);
434 NC_TEST1(ncmpi_put_vara_uint, numVars);
435 NC_TEST1(ncmpi_put_vara_longlong, numVars);
436 NC_TEST1(ncmpi_put_vara_ulonglong, numVars);
437 NC_TEST1(ncmpi_put_vara, numVars);
438 NC_TEST1(ncmpi_put_vars_text, numVars);
439 NC_TEST1(ncmpi_put_vars_schar, numVars);
440 NC_TEST1(ncmpi_put_vars_short, numVars);
441 NC_TEST1(ncmpi_put_vars_int, numVars);
442 NC_TEST1(ncmpi_put_vars_long, numVars);
443 NC_TEST1(ncmpi_put_vars_float, numVars);
444 NC_TEST1(ncmpi_put_vars_double, numVars);
445 NC_TEST1(ncmpi_put_vars_uchar, numVars);
446 NC_TEST1(ncmpi_put_vars_ushort, numVars);
447 NC_TEST1(ncmpi_put_vars_uint, numVars);
448 NC_TEST1(ncmpi_put_vars_longlong, numVars);
449 NC_TEST1(ncmpi_put_vars_ulonglong, numVars);
450 NC_TEST1(ncmpi_put_vars, numVars);
451 NC_TEST1(ncmpi_put_varm_text, numVars);
452 NC_TEST1(ncmpi_put_varm_schar, numVars);
453 NC_TEST1(ncmpi_put_varm_short, numVars);
454 NC_TEST1(ncmpi_put_varm_int, numVars);
455 NC_TEST1(ncmpi_put_varm_long, numVars);
456 NC_TEST1(ncmpi_put_varm_float, numVars);
457 NC_TEST1(ncmpi_put_varm_double, numVars);
458 NC_TEST1(ncmpi_put_varm_uchar, numVars);
459 NC_TEST1(ncmpi_put_varm_ushort, numVars);
460 NC_TEST1(ncmpi_put_varm_uint, numVars);
461 NC_TEST1(ncmpi_put_varm_longlong, numVars);
462 NC_TEST1(ncmpi_put_varm_ulonglong, numVars);
463 NC_TEST1(ncmpi_put_varm, numVars);
464 NC_TEST1(ncmpi_rename_var, numVars);
465 NC_TEST2(ncmpi_put_att_text, numGatts, numVars);
466 NC_TEST2(ncmpi_put_att_schar, numGatts, numVars);
467 NC_TEST2(ncmpi_put_att_short, numGatts, numVars);
468 NC_TEST2(ncmpi_put_att_int, numGatts, numVars);
469 NC_TEST2(ncmpi_put_att_long, numGatts, numVars);
470 NC_TEST2(ncmpi_put_att_float, numGatts, numVars);
471 NC_TEST2(ncmpi_put_att_double, numGatts, numVars);
472 NC_TEST2(ncmpi_put_att_uchar, numGatts, numVars);
473 NC_TEST2(ncmpi_put_att_ushort, numGatts, numVars);
474 NC_TEST2(ncmpi_put_att_uint, numGatts, numVars);
475 NC_TEST2(ncmpi_put_att_longlong, numGatts, numVars);
476 NC_TEST2(ncmpi_put_att_ulonglong, numGatts, numVars);
477 NC_TEST2(ncmpi_put_att, numGatts, numVars);
478 NC_TEST2(ncmpi_copy_att, numGatts, numVars);
479 NC_TEST2(ncmpi_rename_att, numGatts, numVars);
480 NC_TEST2(ncmpi_del_att, numGatts, numVars);
481 NC_TEST1(ncmpi_set_fill, numVars);
482 NC_TEST(ncmpi_delete);
483
484 /* test nonblocking APIs */
485 NC_TEST1(ncmpi_iput_var_text, numVars);
486 NC_TEST1(ncmpi_iput_var_schar, numVars);
487 NC_TEST1(ncmpi_iput_var_short, numVars);
488 NC_TEST1(ncmpi_iput_var_int, numVars);
489 NC_TEST1(ncmpi_iput_var_long, numVars);
490 NC_TEST1(ncmpi_iput_var_float, numVars);
491 NC_TEST1(ncmpi_iput_var_double, numVars);
492 NC_TEST1(ncmpi_iput_var_uchar, numVars);
493 NC_TEST1(ncmpi_iput_var_ushort, numVars);
494 NC_TEST1(ncmpi_iput_var_uint, numVars);
495 NC_TEST1(ncmpi_iput_var_longlong, numVars);
496 NC_TEST1(ncmpi_iput_var_ulonglong, numVars);
497 NC_TEST1(ncmpi_iput_var, numVars);
498 NC_TEST1(ncmpi_iput_var1_text, numVars);
499 NC_TEST1(ncmpi_iput_var1_schar, numVars);
500 NC_TEST1(ncmpi_iput_var1_short, numVars);
501 NC_TEST1(ncmpi_iput_var1_int, numVars);
502 NC_TEST1(ncmpi_iput_var1_long, numVars);
503 NC_TEST1(ncmpi_iput_var1_float, numVars);
504 NC_TEST1(ncmpi_iput_var1_double, numVars);
505 NC_TEST1(ncmpi_iput_var1_uchar, numVars);
506 NC_TEST1(ncmpi_iput_var1_ushort, numVars);
507 NC_TEST1(ncmpi_iput_var1_uint, numVars);
508 NC_TEST1(ncmpi_iput_var1_longlong, numVars);
509 NC_TEST1(ncmpi_iput_var1_ulonglong, numVars);
510 NC_TEST1(ncmpi_iput_var1, numVars);
511 NC_TEST1(ncmpi_iput_vara_text, numVars);
512 NC_TEST1(ncmpi_iput_vara_schar, numVars);
513 NC_TEST1(ncmpi_iput_vara_short, numVars);
514 NC_TEST1(ncmpi_iput_vara_int, numVars);
515 NC_TEST1(ncmpi_iput_vara_long, numVars);
516 NC_TEST1(ncmpi_iput_vara_float, numVars);
517 NC_TEST1(ncmpi_iput_vara_double, numVars);
518 NC_TEST1(ncmpi_iput_vara_uchar, numVars);
519 NC_TEST1(ncmpi_iput_vara_ushort, numVars);
520 NC_TEST1(ncmpi_iput_vara_uint, numVars);
521 NC_TEST1(ncmpi_iput_vara_longlong, numVars);
522 NC_TEST1(ncmpi_iput_vara_ulonglong, numVars);
523 NC_TEST1(ncmpi_iput_vara, numVars);
524 NC_TEST1(ncmpi_iput_vars_text, numVars);
525 NC_TEST1(ncmpi_iput_vars_schar, numVars);
526 NC_TEST1(ncmpi_iput_vars_short, numVars);
527 NC_TEST1(ncmpi_iput_vars_int, numVars);
528 NC_TEST1(ncmpi_iput_vars_long, numVars);
529 NC_TEST1(ncmpi_iput_vars_float, numVars);
530 NC_TEST1(ncmpi_iput_vars_double, numVars);
531 NC_TEST1(ncmpi_iput_vars_uchar, numVars);
532 NC_TEST1(ncmpi_iput_vars_ushort, numVars);
533 NC_TEST1(ncmpi_iput_vars_uint, numVars);
534 NC_TEST1(ncmpi_iput_vars_longlong, numVars);
535 NC_TEST1(ncmpi_iput_vars_ulonglong, numVars);
536 NC_TEST1(ncmpi_iput_vars, numVars);
537 NC_TEST1(ncmpi_iput_varm_text, numVars);
538 NC_TEST1(ncmpi_iput_varm_schar, numVars);
539 NC_TEST1(ncmpi_iput_varm_short, numVars);
540 NC_TEST1(ncmpi_iput_varm_int, numVars);
541 NC_TEST1(ncmpi_iput_varm_long, numVars);
542 NC_TEST1(ncmpi_iput_varm_float, numVars);
543 NC_TEST1(ncmpi_iput_varm_double, numVars);
544 NC_TEST1(ncmpi_iput_varm_uchar, numVars);
545 NC_TEST1(ncmpi_iput_varm_ushort, numVars);
546 NC_TEST1(ncmpi_iput_varm_uint, numVars);
547 NC_TEST1(ncmpi_iput_varm_longlong, numVars);
548 NC_TEST1(ncmpi_iput_varm_ulonglong, numVars);
549 NC_TEST1(ncmpi_iput_varm, numVars);
550 }
551
552 fn_exit:
553 MPI_Info_free(&info);
554
555 if (nfailsTotal == 0) {
556 printf(PASS_STR);
557 }
558 else {
559 print("\n%s: expects 0 failures ... ",argv[0]);
560 printf(FAIL_STR, nfailsTotal);
561 }
562 MPI_Finalize();
563 return nfailsTotal > 0;
564 }
565