1/* This is part of the netCDF package. Copyright 2016 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 nc_inq_type
6
7   Added in support of https://github.com/Unidata/netcdf/issues/240
8
9*/
10
11#include <stdlib.h>
12#include <string.h>
13
14#include "config.h"
15#include <nc_tests.h>
16#include "err_macros.h"
17#include <netcdf.h>
18
19#ifdef USE_PNETCDF
20#include <netcdf_par.h>
21#endif
22
23#define FILE_NAME "tst_inq_type.nc"
24
25void
26check_err(const int stat, const int line, const char *file) {
27   if (stat != NC_NOERR) {
28      (void)fprintf(stderr,"line %d of %s: %s\n", linefilenc_strerror(stat));
29      fflush(stderr);
30      exit(1);
31   }
32}
33
34
35int test_type_should_fail(int ncid, int type, char* tstring) {
36
37  printf("\t* Testing Type (Should Fail) %s:\t",tstring);
38  if(!nc_inq_type(ncid,type,NULL,NULL)) ERR;
39  else printf("expected failure.\n");
40
41  return 0;
42}
43
44int test_type(int ncid, int type, char* tstring) {
45
46  printf("\t* Testing Type %s:\t",tstring);
47  if(nc_inq_type(ncid,type,NULL,NULL)) ERR;
48  else printf("success.\n");
49
50  return 0;
51}
52
53
54
55int main(int argc, char **argv) {
56
57  int ncid=0;
58
59  {
60    printf("\n* Testing nc_inq_type with netcdf-3\n");
61
62    if(nc_create(FILE_NAME,NC_CLOBBER,&ncid)) ERR;
63
64    test_type(ncidNC_BYTE,"NC_BYTE");
65    test_type(ncidNC_CHAR,"NC_CHAR");
66    test_type(ncidNC_SHORT,"NC_SHORT");
67    test_type(ncidNC_INT,"NC_INT");
68    test_type(ncidNC_LONG,"NC_LONG");
69    test_type(ncidNC_FLOAT,"NC_FLOAT");
70    test_type(ncidNC_DOUBLE,"NC_DOUBLE");
71
72    /* Not Valid for Classic */
73    /* Valid now, see https://github.com/Unidata/netcdf-c/issues/240 for more
74       information. The types are not valid for use in Classic,
75       but nc_inq_type should return valid info. */
76    test_type(ncidNC_UBYTE,"NC_UBYTE");
77    test_type(ncidNC_USHORT,"NC_USHORT");
78    test_type(ncidNC_UINT,"NC_UINT");
79    test_type(ncidNC_INT64,"NC_INT64");
80    test_type(ncidNC_UINT64,"NC_UINT64");
81    test_type(ncidNC_STRING,"NC_STRING");
82
83    /* Invoke a true negative */
84    test_type_should_fail(ncid, 9999, "NC_GARBAGE");
85    test_type_should_fail(ncid, -1, "NC_GARBAGE_NEGATIVE");
86
87
88    if(nc_close(ncid)) ERR;
89  }
90
91  {
92    printf("\n* Testing nc_inq_type with CDF5\n");
93
94    if(nc_create(FILE_NAME,NC_CLOBBER|NC_CDF5,&ncid)) ERR;
95
96    test_type(ncidNC_BYTE,"NC_BYTE");
97    test_type(ncidNC_CHAR,"NC_CHAR");
98    test_type(ncidNC_SHORT,"NC_SHORT");
99    test_type(ncidNC_INT,"NC_INT");
100    test_type(ncidNC_LONG,"NC_LONG");
101    test_type(ncidNC_FLOAT,"NC_FLOAT");
102    test_type(ncidNC_DOUBLE,"NC_DOUBLE");
103    test_type(ncidNC_UBYTE,"NC_UBYTE");
104    test_type(ncidNC_USHORT,"NC_USHORT");
105    test_type(ncidNC_UINT,"NC_UINT");
106    test_type(ncidNC_INT64,"NC_INT64");
107    test_type(ncidNC_UINT64,"NC_UINT64");
108    test_type(ncidNC_STRING,"NC_STRING");
109
110    if(nc_close(ncid)) ERR;
111  }
112
113#ifdef USE_NETCDF4
114
115  {
116    printf("\n* Testing nc_inq_type with netcdf-4 + Classic Model\n");
117
118    if(nc_create(FILE_NAME,NC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL,&ncid)) ERR;
119
120    test_type(ncidNC_BYTE,"NC_BYTE");
121    test_type(ncidNC_CHAR,"NC_CHAR");
122    test_type(ncidNC_SHORT,"NC_SHORT");
123    test_type(ncidNC_INT,"NC_INT");
124    test_type(ncidNC_LONG,"NC_LONG");
125    test_type(ncidNC_FLOAT,"NC_FLOAT");
126    test_type(ncidNC_DOUBLE,"NC_DOUBLE");
127    test_type(ncidNC_UBYTE,"NC_UBYTE");
128    test_type(ncidNC_USHORT,"NC_USHORT");
129    test_type(ncidNC_UINT,"NC_UINT");
130    test_type(ncidNC_INT64,"NC_INT64");
131    test_type(ncidNC_UINT64,"NC_UINT64");
132    test_type(ncidNC_STRING,"NC_STRING");
133
134
135    if(nc_close(ncid)) ERR;
136  }
137
138  {
139    printf("\n* Testing nc_inq_type with netcdf-4\n");
140
141    if(nc_create(FILE_NAME,NC_CLOBBER|NC_NETCDF4,&ncid)) ERR;
142
143    test_type(ncidNC_BYTE,"NC_BYTE");
144    test_type(ncidNC_CHAR,"NC_CHAR");
145    test_type(ncidNC_SHORT,"NC_SHORT");
146    test_type(ncidNC_INT,"NC_INT");
147    test_type(ncidNC_LONG,"NC_LONG");
148    test_type(ncidNC_FLOAT,"NC_FLOAT");
149    test_type(ncidNC_DOUBLE,"NC_DOUBLE");
150    test_type(ncidNC_UBYTE,"NC_UBYTE");
151    test_type(ncidNC_USHORT,"NC_USHORT");
152    test_type(ncidNC_UINT,"NC_UINT");
153    test_type(ncidNC_INT64,"NC_INT64");
154    test_type(ncidNC_UINT64,"NC_UINT64");
155    test_type(ncidNC_STRING,"NC_STRING");
156    if(nc_close(ncid)) ERR;
157  }
158
159#endif // USE_NETCDF4
160
161  printf("* Finished.\n");
162
163  SUMMARIZE_ERR;
164  FINAL_RESULTS;
165}


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