1/* This is part of the netCDF package. Copyright 2005 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use. See www.unidata.ucar.edu for more info.
4
5   Test netcdf-4 opaque types.
6
7   $Id: tst_opaques.c,v 1.18 2010/05/25 13:53:04 ed Exp $
8*/
9
10#include <config.h>
11#include <nc_tests.h>
12#include "err_macros.h"
13
14#define FILE_NAME "tst_opaques.nc"
15#define DIM_LEN 3
16#define ATT_NAME "att_name"
17#define DIM_NAME "dim"
18#define BASE_SIZE 20
19#define VAR_NAME "var_defined_by_netcdf_user"
20#define TYPE_NAME "type_defined_by_netcdf_user"
21
22int
23main(int argc, char **argv)
24{
25   int ncid;
26   size_t size_in;
27   nc_type xtype;
28   unsigned char data[DIM_LEN][BASE_SIZE], data_in[DIM_LEN][BASE_SIZE];
29   int ij;
30
31   printf("\n*** Testing netcdf-4 opaque type.\n");
32
33   for (i=0; i<DIM_LENi++)
34      for (j=0; j<BASE_SIZEj++)
35  data[i][j] = 0;
36
37   printf("*** testing scalar opaque variable...");
38   {
39      int varid;
40      char name_in[NC_MAX_NAME+1];
41      size_t nfields_inbase_size_in;
42      nc_type base_nc_type_invar_type;
43      int class_in;
44      char var_name[NC_MAX_NAME+1];
45      int  nvarsnattsndimsunlimdimid;
46
47      /* Create a file that has an opaque variable. */
48      if (nc_create(FILE_NAMENC_NETCDF4|NC_CLOBBER, &ncid)) ERR;
49      if (nc_def_opaque(ncidBASE_SIZETYPE_NAME, &xtype)) ERR;
50      if (nc_inq_user_type(ncidxtypename_in, &base_size_in, &base_nc_type_in, &nfields_in, &class_in)) ERR;
51      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZE ||
52   base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
53      if (nc_inq_opaque(ncidxtypename_in, &base_size_in)) ERR;
54      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZEERR;
55      if (nc_def_var(ncidVAR_NAMExtype, 0, NULL, &varid)) ERR;
56      if (nc_put_var(ncidvarid, &data[0])) ERR;
57      if (nc_close(ncid)) ERR;
58
59      /* Check it out. */
60      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
61      if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
62      if (ndims != 0 || nvars != 1 || natts != 0 || unlimdimid != -1) ERR;
63      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsNULL, &natts)) ERR;
64      if (ndims != 0 || strcmp(var_nameVAR_NAME) || natts != 0) ERR;
65      if (nc_get_var(ncid, 0, &data_in[0])) ERR;
66      for (j = 0; j < BASE_SIZEj++)
67  if (data_in[0][j] != data[0][j]) ERR;
68      if (nc_close(ncid)) ERR;
69   }
70   SUMMARIZE_ERR;
71   printf("*** testing opaque variable...");
72   {
73      int dimidvariddimids[] = {0};
74      char name_in[NC_MAX_NAME+1];
75      nc_type base_nc_type_invar_type;
76      size_t nfields_inbase_size_in;
77      int class_in;
78      char var_name[NC_MAX_NAME+1];
79      int  nvarsnattsndimsunlimdimiddimids_var[1];
80
81      /* Create a file that has an opaque variable. */
82      if (nc_create(FILE_NAMENC_NETCDF4|NC_CLOBBER, &ncid)) ERR;
83      if (nc_def_opaque(ncidBASE_SIZETYPE_NAME, &xtype)) ERR;
84      if (nc_inq_user_type(ncidxtypename_in, &base_size_in, &base_nc_type_in, &nfields_in, &class_in)) ERR;
85      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZE ||
86   base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
87      if (nc_inq_opaque(ncidxtypename_in, &base_size_in)) ERR;
88      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZEERR;
89      if (nc_def_dim(ncidDIM_NAMEDIM_LEN, &dimid)) ERR;
90      if (nc_def_var(ncidVAR_NAMExtype, 1, dimids, &varid)) ERR;
91      if (nc_put_var(ncidvariddata)) ERR;
92      if (nc_close(ncid)) ERR;
93
94      /* Check it out. */
95      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
96      if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
97      if (ndims != 1 || nvars != 1 || natts != 0 || unlimdimid != -1) ERR;
98      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsdimids_var, &natts)) ERR;
99      if (ndims != 1 || strcmp(var_nameVAR_NAME) ||
100   dimids_var[0] != dimids[0] || natts != 0) ERR;
101      if (nc_get_var(ncid, 0, data_in)) ERR;
102      for (i=0; i<DIM_LENi++)
103   for (j=0; j<BASE_SIZEj++)
104      if (data_in[i][j] != data[i][j]) ERR;
105      if (nc_close(ncid)) ERR;
106   }
107   SUMMARIZE_ERR;
108   printf("*** testing *really* simple opaque attribute...");
109   {
110
111      /* Create a file that has an opaque attribute. */
112      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
113      if (nc_def_opaque(ncidBASE_SIZETYPE_NAME, &xtype)) ERR;
114
115      /* Write an att. */
116      if (nc_put_att(ncidNC_GLOBALATT_NAMExtypeDIM_LENdata)) ERR;
117      if (nc_close(ncid)) ERR;
118
119      /* Reopen. */
120      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
121      if (nc_close(ncid)) ERR;
122   }
123
124   SUMMARIZE_ERR;
125   printf("*** testing opaque attribute...");
126   {
127      char name_in[NC_MAX_NAME+1];
128      nc_type base_nc_type_in;
129      size_t base_size_in;
130      size_t nfields_in;
131      int class_in;
132
133      /* Create a file that has an opaque attribute. */
134      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
135
136      if (nc_def_opaque(ncidBASE_SIZETYPE_NAME, &xtype)) ERR;
137
138      /* Check it out. */
139      if (nc_inq_user_type(ncidxtypename_in, &base_size_in, &base_nc_type_in,
140    &nfields_in, &class_in)) ERR;
141      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZE ||
142   base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
143      if (nc_inq_opaque(ncidxtypename_in, &base_size_in)) ERR;
144      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZEERR;
145
146      /* Write an att. */
147      if (nc_put_att(ncidNC_GLOBALATT_NAMExtypeDIM_LENdata)) ERR;
148
149      if (nc_close(ncid)) ERR;
150
151      /* Reopen. */
152      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
153
154      /* Check it out. */
155      if (nc_inq_att(ncidNC_GLOBALATT_NAME, &xtype, &size_in)) ERR;
156      if (size_in != DIM_LENERR;
157      if (nc_inq_user_type(ncidxtypename_in, &base_size_in, &base_nc_type_in, &nfields_in, &class_in)) ERR;
158      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZE ||
159   base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
160      if (nc_inq_opaque(ncidxtypename_in, &base_size_in)) ERR;
161      if (strcmp(name_inTYPE_NAME) || base_size_in != BASE_SIZEERR;
162      if (nc_get_att(ncidNC_GLOBALATT_NAMEdata_in)) ERR;
163      for (i=0; i<DIM_LENi++)
164   for (j=0; j<BASE_SIZEj++)
165      if (data_in[i][j] != data[i][j]) ERR;
166
167      if (nc_close(ncid)) ERR;
168   }
169   SUMMARIZE_ERR;
170   printf("*** testing 3 opaque types...");
171   {
172#define TYPE_SIZE1 20
173#define NUM_TYPES 3
174
175      char name_in[NC_MAX_NAME+1];
176      nc_type base_nc_type_in;
177      size_t nfields_inbase_size_in;
178      nc_type otid[3];
179      int class_in;
180      char type_name[NUM_TYPES][NC_MAX_NAME + 1] = {"o1", "o2", "o3"};
181      int  nvarsnattsndimsunlimdimid;
182      int ntypestypeids[NUM_TYPES];
183      int i;
184
185      /* Create a file that has three opaque types. */
186      if (nc_create(FILE_NAMENC_NETCDF4|NC_CLOBBER, &ncid)) ERR;
187      for (i = 0; i < NUM_TYPESi++)
188      {
189  if (nc_def_opaque(ncidTYPE_SIZE1type_name[i], &otid[i])) ERR;
190  if (nc_inq_user_type(ncidotid[i], name_in, &base_size_in, &base_nc_type_in, &nfields_in, &class_in)) ERR;
191  if (strcmp(name_intype_name[i]) || base_size_in != TYPE_SIZE1 ||
192      base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
193  if (nc_inq_opaque(ncidotid[i], name_in, &base_size_in)) ERR;
194  if (strcmp(name_intype_name[i]) || base_size_in != TYPE_SIZE1ERR;
195      }
196      if (nc_close(ncid)) ERR;
197
198      /* Check it out. */
199      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
200      if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
201      if (ndims != 0 || nvars != 0 || natts != 0 || unlimdimid != -1) ERR;
202      if (nc_inq_typeids(ncid, &ntypestypeids)) ERR;
203      if (ntypes != NUM_TYPESERR;
204      for (i = 0; i < NUM_TYPESi++)
205      {
206  if (nc_inq_user_type(ncidotid[i], name_in, &base_size_in, &base_nc_type_in, &nfields_in, &class_in)) ERR;
207  if (strcmp(name_intype_name[i]) || base_size_in != TYPE_SIZE1 ||
208      base_nc_type_in != 0 || nfields_in != 0 || class_in != NC_OPAQUEERR;
209  if (nc_inq_opaque(ncidotid[i], name_in, &base_size_in)) ERR;
210  if (strcmp(name_intype_name[i]) || base_size_in != TYPE_SIZE1ERR;
211      }
212      if (nc_close(ncid)) ERR;
213   }
214
215   SUMMARIZE_ERR;
216   FINAL_RESULTS;
217}


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