1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test even more data conversions.
6
7   $Id: tst_converts2.c,v 1.14 2010/06/01 15:34:51 ed Exp $
8*/
9
10#include <nc_tests.h>
11#include "err_macros.h"
12#include "netcdf.h"
13#include "math.h"
14
15#define FILE_NAME "tst_converts2.nc"
16#define VAR_NAME "Monkey"
17#define DIM_NAME "n"
18#define DIM_LEN 5
19
20int
21main(int argc, char **argv)
22{
23   int ncidvarid;
24   signed char schar_inschar = -2;
25   char var_name[NC_MAX_NAME+1];
26   int ndimsnattsint_in;
27   long long_in;
28   nc_type var_type;
29
30   printf("\n*** Testing more netcdf-4 data conversion.\n");
31   printf ("*** Testing NC_BYTE conversions...");
32   {
33      /* Write a scalar NC_BYTE with value -2. */
34      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
35      if (nc_def_var(ncidVAR_NAMENC_BYTE, 0, NULL, &varid)) ERR;
36      if (nc_put_var_schar(ncidvarid, &schar)) ERR;
37      if (nc_close(ncid)) ERR;
38
39      /* Now open the file and check it. */
40      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
41      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsNULL, &natts)) ERR;
42      if (strcmp(var_nameVAR_NAME) || natts !=0 || ndims != 0 ||
43   var_type != NC_BYTEERR;
44      if (nc_get_var_schar(ncidvarid, &schar_in)) ERR;
45      if (schar_in != scharERR;
46      if (nc_get_var_int(ncidvarid, &int_in)) ERR;
47      if (int_in != scharERR;
48      if (nc_get_var_long(ncidvarid, &long_in)) ERR;
49      if (long_in != scharERR;
50      if (nc_close(ncid)) ERR;
51   }
52   SUMMARIZE_ERR;
53   printf ("*** Testing NC_USHORT conversions...");
54   {
55      /* Write a scalar NC_USHORT, converted from various types, testing a bug fix. */
56       unsigned short usval = 65535;
57       int ival = 65535;
58       long lval = 65535;
59       float fval = 65535;
60       double dval = 65535;
61       int dimid;
62       size_t coord[1];
63       unsigned short ushort_in;
64       int int_in;
65       long long_in;
66       float float_in;
67       double double_in;
68
69      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
70      if (nc_def_dim(ncidDIM_NAMEDIM_LEN, &dimid)) ERR;
71      if (nc_def_var(ncidVAR_NAMENC_USHORT, 1, &dimid, &varid)) ERR;
72      coord[0] = 0;
73      if (nc_put_var1_ushort(ncidvaridcoord, &usval)) ERR;
74      coord[0] = 1;
75      if (nc_put_var1_int(ncidvaridcoord, &ival)) ERR;
76      coord[0] = 2;
77      if (nc_put_var1_float(ncidvaridcoord, &fval)) ERR;
78      coord[0] = 3;
79      if (nc_put_var1_double(ncidvaridcoord, &dval)) ERR;
80      coord[0] = 4;
81      if (nc_put_var1_long(ncidvaridcoord, &lval)) ERR;
82
83      if (nc_close(ncid)) ERR;
84
85      /* Now open the file and check it. */
86      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
87      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsNULL, &natts)) ERR;
88      if (strcmp(var_nameVAR_NAME) || natts !=0 || ndims != 1 ||
89   var_type != NC_USHORTERR;
90      coord[0] = 0;
91      if (nc_get_var1_ushort(ncidvaridcoord, &ushort_in)) ERR;
92      if (ushort_in != usvalERR;
93      coord[0] = 1;
94      if (nc_get_var1_int(ncidvaridcoord, &int_in)) ERR;
95      if (int_in != ivalERR;
96      coord[0] = 2;
97      if (nc_get_var1_float(ncidvaridcoord, &float_in)) ERR;
98      if (float_in != fvalERR;
99      coord[0] = 3;
100      if (nc_get_var1_double(ncidvaridcoord, &double_in)) ERR;
101      if (double_in != dvalERR;
102      coord[0] = 4;
103      if (nc_get_var1_long(ncidvaridcoord, &long_in)) ERR;
104      if (long_in != lvalERR;
105
106      /* This should fail. */
107      coord[0] = 5;
108      if (nc_get_var1_ushort(ncidvaridcoord,
109      &ushort_in) != NC_EINVALCOORDSERR;
110
111      if (nc_close(ncid)) ERR;
112   }
113   {
114      /* Write a scalar NC_USHORT that's not default fill value,
115       * converted from various types. */
116       unsigned short usval = 65534;
117       int ival = 65534;
118       long lval = 65534;
119       float fval = 65534;
120       double dval = 65534;
121       int dimid;
122       size_t coord[1];
123       unsigned short ushort_in;
124       int int_in;
125       long long_in;
126       float float_in;
127       double double_in;
128
129      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
130      if (nc_def_dim(ncidDIM_NAMEDIM_LEN, &dimid)) ERR;
131      if (nc_def_var(ncidVAR_NAMENC_USHORT, 1, &dimid, &varid)) ERR;
132      coord[0] = 0;
133      if (nc_put_var1_ushort(ncidvaridcoord, &usval)) ERR;
134      coord[0] = 1;
135      if (nc_put_var1_int(ncidvaridcoord, &ival)) ERR;
136      coord[0] = 2;
137      if (nc_put_var1_float(ncidvaridcoord, &fval)) ERR;
138      coord[0] = 3;
139      if (nc_put_var1_double(ncidvaridcoord, &dval)) ERR;
140      coord[0] = 4;
141      if (nc_put_var1_long(ncidvaridcoord, &lval)) ERR;
142
143      if (nc_close(ncid)) ERR;
144
145      /* Now open the file and check it. */
146      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
147      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsNULL, &natts)) ERR;
148      if (strcmp(var_nameVAR_NAME) || natts !=0 || ndims != 1 ||
149   var_type != NC_USHORTERR;
150      coord[0] = 0;
151      if (nc_get_var1_ushort(ncidvaridcoord, &ushort_in)) ERR;
152      if (ushort_in != usvalERR;
153      coord[0] = 1;
154      if (nc_get_var1_int(ncidvaridcoord, &int_in)) ERR;
155      if (int_in != ivalERR;
156      coord[0] = 2;
157      if (nc_get_var1_float(ncidvaridcoord, &float_in)) ERR;
158      if (float_in != fvalERR;
159      coord[0] = 3;
160      if (nc_get_var1_double(ncidvaridcoord, &double_in)) ERR;
161      if (double_in != dvalERR;
162      coord[0] = 4;
163      if (nc_get_var1_long(ncidvaridcoord, &long_in)) ERR;
164      if (long_in != lvalERR;
165
166      /* This should fail. */
167      coord[0] = 5;
168      if (nc_get_var1_ushort(ncidvaridcoord,
169      &ushort_in) != NC_EINVALCOORDSERR;
170
171      if (nc_close(ncid)) ERR;
172   }
173   SUMMARIZE_ERR;
174   printf ("*** Testing MAX_INT conversions...");
175   {
176#define X_INT_MAX 2147483647 /* from libsrc4/nc4internal.h */
177      int ivalue = X_INT_MAXivalue_in;
178      unsigned char uchar_in;
179      unsigned int uivalue_in;
180      short svalue_in;
181      unsigned short usvalue_in;
182      long long int64_in;
183      unsigned long long uint64_in;
184      float float_in;
185      double double_in;
186
187      /* Write a scalar NC_INT with value X_MAX_INT. */
188      if (nc_create(FILE_NAMENC_NETCDF4, &ncid)) ERR;
189      if (nc_def_var(ncidVAR_NAMENC_INT, 0, NULL, &varid)) ERR;
190      if (nc_put_var_int(ncidvarid, &ivalue)) ERR;
191      if (nc_close(ncid)) ERR;
192
193      /* Now open the file and check it. */
194      if (nc_open(FILE_NAMENC_NOWRITE, &ncid)) ERR;
195      if (nc_inq_var(ncid, 0, var_name, &var_type, &ndimsNULL, &natts)) ERR;
196      if (strcmp(var_nameVAR_NAME) || natts !=0 || ndims != 0 ||
197   var_type != NC_INTERR;
198      if (nc_get_var_schar(ncidvarid, &schar_in) != NC_ERANGEERR;
199      if (schar_in != (signed char)ivalueERR;
200      if (nc_get_var_uchar(ncidvarid, &uchar_in) != NC_ERANGEERR;
201      if (uchar_in != (unsigned char)ivalueERR;
202      if (nc_get_var_short(ncidvarid, &svalue_in) != NC_ERANGEERR;
203      if (svalue_in != (short)ivalueERR;
204      if (nc_get_var_ushort(ncidvarid, &usvalue_in) != NC_ERANGEERR;
205      if (usvalue_in != (unsigned short)ivalueERR;
206      if (nc_get_var_int(ncidvarid, &ivalue_in)) ERR;
207      if (ivalue_in != ivalueERR;
208      if (nc_get_var_uint(ncidvarid, &uivalue_in)) ERR;
209      if (uivalue_in != (unsigned int)ivalueERR;
210      if (nc_get_var_long(ncidvarid, &long_in)) ERR;
211      if (long_in != ivalueERR;
212      if (nc_get_var_longlong(ncidvarid, &int64_in)) ERR;
213      if (int64_in != ivalueERR;
214      if (nc_get_var_ulonglong(ncidvarid, &uint64_in)) ERR;
215      if (uint64_in != ivalueERR;
216      if (nc_get_var_float(ncidvarid, &float_in)) ERR;
217
218      if(fabs( (float_in-X_INT_MAX) - ((float)ivalue - X_INT_MAX)) > 1) ERR;
219
220      if (nc_get_var_double(ncidvarid, &double_in)) ERR;
221      if (double_in != (double)ivalueERR;
222      if (nc_close(ncid)) ERR;
223   }
224   SUMMARIZE_ERR;
225   FINAL_RESULTS;
226}


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