1/* This is part of the netCDF package.
2   Copyright 2010 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test netcdf-4 file from user-reported error. This code based on an
6   ncgen output.
7
8   $Id: tst_files4.c,v 1.4 2010/05/18 12:30:05 ed Exp $
9*/
10
11#include <config.h>
12#include <stdio.h>
13#include <nc_tests.h>
14#include "err_macros.h"
15#include "netcdf.h"
16#include <string.h>
17
18#define FILE_NAME "tst_files4.nc"
19#define SNAPSHOT_LEN NC_UNLIMITED
20#define AXIS_LEN 3
21#define PARTICLE_LEN 256
22#define SLICE_LEN 2
23#define NDIMS1 1
24#define NDIMS4 4
25#define CLASSICAL "classical"
26
27int
28main() {/* create data.nc */
29
30    int  ncid;
31    int classical_grp;
32
33    /* dimension ids */
34    int snapshot_dim;
35    int axis_dim;
36    int particle_dim;
37    int slice_dim;
38
39
40    size_t snapshot_len = SNAPSHOT_LEN;
41    size_t axis_len = AXIS_LEN;
42    size_t particle_len = PARTICLE_LEN;
43    size_t slice_len = SLICE_LEN;
44
45    int snapshot_id;
46    int position_id;
47    int axis_id;
48
49    printf("\n*** Testing NetCDF-4 with user-supplied sample file.\n");
50    printf("*** testing creation of sample file...");
51    {
52       double data[SLICE_LEN * PARTICLE_LEN * AXIS_LEN];
53       size_t start[4] = {0, 0, 0, 0};
54       size_t count[4] = {1, SLICE_LENPARTICLE_LENAXIS_LEN};
55       int dimids[NDIMS4], grpid;
56       int ndims_innvars_innatts_inngrps_in;
57       int unlimdimid;
58       char name_in[NC_MAX_NAME + 1];
59       int i;
60
61       /* Sample data. */
62       for (i = 0; i < SLICE_LEN * PARTICLE_LEN * AXIS_LENi++)
63   data[i] = 42.42;
64
65       if (nc_create(FILE_NAMENC_CLOBBER|NC_NETCDF4, &ncid)) ERR;
66       if (nc_def_grp(ncidCLASSICAL, &classical_grp)) ERR;
67
68       /* define dimensions */
69       if (nc_def_dim(classical_grp, "snapshot", snapshot_len, &snapshot_dim)) ERR;
70       if (nc_def_dim(classical_grp, "axis", axis_len, &axis_dim)) ERR;
71       if (nc_def_dim(classical_grp, "particle", particle_len, &particle_dim)) ERR;
72       if (nc_def_dim(classical_grp, "slice", slice_len, &slice_dim)) ERR;
73
74       dimids[0] = snapshot_dim;
75       dimids[1] = slice_dim;
76       dimids[2] = particle_dim;
77       dimids[3] = axis_dim;
78       if (nc_def_var(classical_grp, "position", NC_DOUBLENDIMS4,
79       dimids, &position_id)) ERR;
80
81       /* First write some position data. */
82       if (nc_put_vara_double(classical_grpposition_id,
83       startcountdata)) ERR;
84
85       /* Now define some coordinate variables. */
86       if (nc_def_var(classical_grp, "snapshot", NC_INTNDIMS1,
87       &snapshot_dim, &snapshot_id)) ERR;
88       if (nc_def_var(classical_grp, "axis", NC_CHARNDIMS1,
89       &axis_dim, &axis_id)) ERR;
90
91       /* Check some stuff. */
92       if (nc_inq(ncid, &ndims_in, &nvars_in, &natts_in, &unlimdimid)) ERR;
93       if (ndims_in != 0 || nvars_in != 0 || natts_in != 0 || unlimdimid != -1) ERR;
94       if (nc_inq_grps(ncid, &ngrps_in, &grpid)) ERR;
95       if (ngrps_in != 1) ERR;
96       if (nc_inq_grpname(grpidname_in)) ERR;
97       if (strcmp(name_inCLASSICAL)) ERR;
98       if (nc_inq(classical_grp, &ndims_in, &nvars_in, &natts_in, &unlimdimid)) ERR;
99       if (ndims_in != 4 || nvars_in != 3 || natts_in != 0 || unlimdimid != 0) ERR;
100
101
102       if (nc_close(ncid)) ERR;
103
104       if (nc_open(FILE_NAME, 0, &ncid)) ERR;
105       if (nc_close(ncid)) ERR;
106    }
107    SUMMARIZE_ERR;
108#ifdef EXTRA_TESTS
109    printf("*** testing opening of many files...");
110    {
111       int incid;
112
113       for (i = 0; i < 32768; i++)
114       {
115   if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR_RET;
116   if (nc_close(ncid)) ERR_RET;
117       }
118       if (nc_create(FILE_NAME, 0, &ncid)) ERR_RET;
119       if (nc_def_var(ncid, "blah", NC_CHAR, 0, NULLNULL)) ERR;
120       if (nc_close(ncid)) ERR_RET;
121       /*printf("last ncid: %d\n", ncid);*/
122    }
123    SUMMARIZE_ERR;
124#endif
125    FINAL_RESULTS;
126}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed