1/*********************************************************************
2 *   Copyright 1996, UCAR/Unidata
3 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4 *   $Id: tests.h 2785 2014-10-26 05:21:20Z wkliao $
5 *********************************************************************/
6
7#include <config.h>
8#include <stdio.h>
9#include <string.h>
10#include <stdlib.h>
11#include <assert.h>
12#include <limits.h>
13#include <float.h>
14#define NO_NETCDF_2 1
15#include "netcdf.h"
16#ifdef USE_PARALLEL
17#include "netcdf_par.h"
18#endif
19#include "error.h"
20
21#if defined(_CRAY) && !defined(_CRAYIEEE) && !defined(__crayx1)
22#define CRAYFLOAT 1 /* CRAY Floating point */
23#elif defined(_SX) && defined(_FLOAT2) /* NEC SUPER-UX in CRAY mode */
24#define CRAYFLOAT 1 /* CRAY Floating point */
25#endif
26
27    /* Limits of external types (based on those in ncx.h) */
28
29#ifdef __CHAR_UNSIGNED__
30#define X_CHAR_MIN SCHAR_MIN
31#define X_CHAR_MAX SCHAR_MAX
32#else
33#define X_CHAR_MIN CHAR_MIN
34#define X_CHAR_MAX CHAR_MAX
35#endif //__unsigned_char__
36
37#define X_BYTE_MIN (-128)
38#define X_BYTE_MAX 127
39#define X_SHORT_MIN (-32768)
40#define X_SHORT_MAX 32767
41#define X_INT_MIN (-2147483647-1)
42#define X_INT_MAX 2147483647
43#if defined(FLT_MAX_EXP) && FLT_MAX_EXP < 128
44/* FLT_MAX < X_FLOAT_MAX */
45#define X_FLOAT_MAX FLT_MAX
46#else
47#ifdef WIN32 /* Windows, of course, has to be a *little* different. */
48#define X_FLOAT_MAX 3.402823466e+38f
49#else
50#define X_FLOAT_MAX 3.40282347e+38f
51#endif /* WIN32 */
52#endif
53#define X_FLOAT_MIN (-X_FLOAT_MAX)
54#if CRAYFLOAT
55/* ldexp(1. - ldexp(.5 , -46), 1024) */
56#define X_DOUBLE_MAX    1.79769313486230e+308
57#else
58/* scalb(1. - scalb(.5 , -52), 1024) */
59#define X_DOUBLE_MAX 1.7976931348623157e+308
60#endif
61#define X_DOUBLE_MIN (-X_DOUBLE_MAX)
62
63#define X_SCHAR_MAX     SCHAR_MAX
64#define X_SCHAR_MIN     SCHAR_MIN
65#define X_UCHAR_MAX     UCHAR_MAX
66#define X_UCHAR_MIN     0
67#define X_UBYTE_MAX     X_UCHAR_MAX
68#define X_UBYTE_MIN     X_UCHAR_MIN
69#define X_USHORT_MAX    USHRT_MAX
70#define X_USHORT_MIN    0
71#define X_UINT_MAX      UINT_MAX
72#define X_UINT_MIN      0
73
74#ifndef LLONG_MAX
75#define LLONG_MAX  0x7fffffffffffffffLL
76#endif
77#ifndef LLONG_MIN
78#define LLONG_MIN (-0x7fffffffffffffffLL-1)
79#endif
80#ifndef ULLONG_MAX
81#define ULLONG_MAX  0xffffffffffffffffULL
82#endif
83
84#ifndef X_INT64_MAX
85#define X_INT64_MAX    LLONG_MAX
86#endif
87#ifndef X_INT64_MIN
88#define X_INT64_MIN    LLONG_MIN
89#endif
90#ifndef X_UINT64_MAX
91#define X_UINT64_MAX  ULLONG_MAX
92#endif
93#ifndef X_UINT64_MIN
94#define X_UINT64_MIN  ULLONG_MIN
95#endif
96
97
98#if _SX /* NEC SUPER UX */
99#if _INT64
100#undef  INT_MAX /* workaround cpp bug */
101#define INT_MAX  X_INT_MAX
102#undef  INT_MIN /* workaround cpp bug */
103#define INT_MIN  X_INT_MIN
104#undef  LONG_MAX /* workaround cpp bug */
105#define LONG_MAX  X_INT_MAX
106#undef  LONG_MIN /* workaround cpp bug */
107#define LONG_MIN  X_INT_MIN
108#elif _LONG64
109#undef  LONG_MAX /* workaround cpp bug */
110#define LONG_MAX  4294967295L
111#undef  LONG_MIN /* workaround cpp bug */
112#define LONG_MIN -4294967295L
113#endif
114#endif /* _SX */
115
116
117#ifndef MAX
118#define MAX(a,b) ((a) > (b) ? (a) : (b))
119#endif /* MAX */
120
121#ifndef MIN
122#define MIN(a,b) ((a) < (b) ? (a) : (b))
123#endif /* MIN */
124
125#ifndef ABS
126#define ABS(x)  ((x) < 0 ? -(x) : (x))
127#endif /* ABS */
128
129
130    /* Parameters of test data */
131
132#define NTYPES 11
133#define NDIMS 5
134#define NVARS 166
135#define NRECS 2
136#define NGATTS NTYPES
137#define RECDIM 0
138#define MAX_RANK 3
139#define MAX_NELS 64
140#define MAX_DIM_LEN 4
141#define MAX_NATTS 3
142
143extern int numGatts;  /* number of global attributes */
144extern int numVars;   /* number of variables */
145extern int numTypes;  /* number of netCDF data types to test */
146
147
148    /* Limits of internal types */
149
150#define text_min SCHAR_MIN
151#define uchar_min 0
152#define schar_min SCHAR_MIN
153#define short_min SHRT_MIN
154#define int_min INT_MIN
155#define long_min LONG_MIN
156#define float_min (-FLT_MAX)
157#define double_min (-DBL_MAX)
158#define ushort_min 0
159#define uint_min 0
160#define ulong_min 0
161#define int64_min LLONG_MIN
162#define longlong_min int64_min
163#define uint64_min 0
164#define ulonglong_min uint64_min
165
166#define text_max SCHAR_MAX
167#define uchar_max UCHAR_MAX
168#define schar_max SCHAR_MAX
169#define short_max SHRT_MAX
170#define int_max INT_MAX
171#define long_max LONG_MAX
172#define float_max FLT_MAX
173#define double_max DBL_MAX
174#define ushort_max USHRT_MAX
175#define uint_max UINT_MAX
176#define ulong_max ULONG_MAX
177#define int64_max LLONG_MAX
178#define longlong_max int64_max
179#define uint64_max ULLONG_MAX
180#define ulonglong_max uint64_max
181
182
183
184    /* Examples of invalid argument values */
185
186#define BAD_ID -1               /* invalid netCDF ID */
187#define BAD_DIMID -1            /* invalid dim ID */
188#define BAD_VARID -2            /* invalid var ID */
189#define BAD_ATTNUM -1           /* invalid att number */
190#define BAD_TYPE (nc_type) 0    /* invalid data type */
191#define BAD_FILLMODE -1         /* invalid fill mode */
192#define BAD_NAME "a/b" /* invalid name */
193#define BAD_DEFAULT_FORMAT 12   /* invalid default format */
194
195#define LEN_OF(array) ((sizeof array) / (sizeof array[0]))
196
197#ifdef __cplusplus
198extern "C" {
199#endif
200
201
202    /* Non-standard internal types */
203
204#ifdef HAVE_SYS_TYPES_H
205# include <sys/types.h>
206#endif
207
208typedef signed char text;
209typedef signed char schar;
210
211#ifndef HAVE_USHORT
212typedef unsigned short int  ushort;
213#endif
214
215#ifndef HAVE_UINT
216typedef unsigned       int  uint;
217#endif
218
219#ifndef HAVE_INT64
220typedef          long long  int64;
221#endif
222
223#ifndef HAVE_UINT64
224typedef unsigned long long  uint64;
225#endif
226
227
228    /* Global variables - filenames */
229
230extern char testfile[]; /* netCDF read-only test data */
231extern char scratch[]; /* netCDF test file for writing */
232
233    /* Global variables - command-line arguments */
234
235extern int  read_only; /* if 1, don't try to change files */
236extern int  verbose; /* if 1, print details of tests */
237extern int  nfails; /* number of failures in specific test */
238extern int  max_nmpt; /* max. number of messages per test */
239
240    /* Global variables - test data */
241
242extern char dim_name[NDIMS][3];
243extern size_t dim_len[NDIMS];
244extern char var_name[NVARS][2+MAX_RANK];
245extern nc_type var_type[NVARS];
246extern size_t var_rank[NVARS];
247extern int var_dimid[NVARS][MAX_RANK];
248extern size_t var_shape[NVARS][MAX_RANK];
249extern size_t var_nels[NVARS];
250extern size_t var_natts[NVARS];
251extern char att_name[NVARS][MAX_NATTS][2];
252extern char gatt_name[NGATTS][3];
253extern nc_type att_type[NVARS][NGATTS];
254extern nc_type gatt_type[NGATTS];
255extern size_t att_len[NVARS][MAX_NATTS];
256extern size_t gatt_len[NGATTS];
257
258
259    /* Macros for accessing attribute test data */
260    /* varid is -1 for NC_GLOBAL so can do global atts in same loop */
261
262#define VARID(varid)      (varid < 0 ? NC_GLOBAL : varid)
263#define NATTS(varid)      (varid < 0 ? numGatts : var_natts[varid])
264#define ATT_NAME(varid,j) (varid < 0 ? gatt_name[j] : att_name[varid][j])
265#define ATT_TYPE(varid,j) (varid < 0 ? gatt_type[j] : att_type[varid][j])
266#define ATT_LEN(varid,j)  (varid < 0 ? gatt_len[j] : att_len[varid][j])
267
268extern const char *s_nc_type(nc_type);
269
270extern void test_nc_strerror(void);
271extern void test_nc_open(void);
272extern void test_nc_close(void);
273
274extern void test_nc_inq(void);
275extern void test_nc_inq_natts(void);
276extern void test_nc_inq_ndims(void);
277extern void test_nc_inq_nvars(void);
278extern void test_nc_inq_unlimdim(void);
279
280extern void test_nc_inq_dimid(void);
281extern void test_nc_inq_dim(void);
282extern void test_nc_inq_dimlen(void);
283extern void test_nc_inq_dimname(void);
284
285extern void test_nc_inq_varid(void);
286extern void test_nc_inq_vardimid(void);
287extern void test_nc_inq_varname(void);
288extern void test_nc_inq_varnatts(void);
289extern void test_nc_inq_varndims(void);
290extern void test_nc_inq_vartype(void);
291extern void test_nc_inq_var(void);
292
293extern void test_nc_get_var_double(void);
294extern void test_nc_get_var_float(void);
295extern void test_nc_get_var_int(void);
296extern void test_nc_get_var_long(void);
297extern void test_nc_get_var_schar(void);
298extern void test_nc_get_var_short(void);
299extern void test_nc_get_var_text(void);
300extern void test_nc_get_var_uchar(void);
301extern void test_nc_get_var(void);
302extern void test_nc_get_var_ushort(void);
303extern void test_nc_get_var_uint(void);
304extern void test_nc_get_var_longlong(void);
305extern void test_nc_get_var_ulonglong(void);
306
307extern void test_nc_get_var1_double(void);
308extern void test_nc_get_var1_float(void);
309extern void test_nc_get_var1_int(void);
310extern void test_nc_get_var1_long(void);
311extern void test_nc_get_var1_schar(void);
312extern void test_nc_get_var1_short(void);
313extern void test_nc_get_var1_text(void);
314extern void test_nc_get_var1_uchar(void);
315extern void test_nc_get_var1(void);
316extern void test_nc_get_var1_ushort(void);
317extern void test_nc_get_var1_uint(void);
318extern void test_nc_get_var1_longlong(void);
319extern void test_nc_get_var1_ulonglong(void);
320
321extern void test_nc_get_vara_double(void);
322extern void test_nc_get_vara_float(void);
323extern void test_nc_get_vara_int(void);
324extern void test_nc_get_vara_long(void);
325extern void test_nc_get_vara_schar(void);
326extern void test_nc_get_vara_short(void);
327extern void test_nc_get_vara_text(void);
328extern void test_nc_get_vara_uchar(void);
329extern void test_nc_get_vara(void);
330extern void test_nc_get_vara_ushort(void);
331extern void test_nc_get_vara_uint(void);
332extern void test_nc_get_vara_longlong(void);
333extern void test_nc_get_vara_ulonglong(void);
334
335extern void test_nc_get_vars(void);
336extern void test_nc_get_vars_double(void);
337extern void test_nc_get_vars_float(void);
338extern void test_nc_get_vars_int(void);
339extern void test_nc_get_vars_long(void);
340extern void test_nc_get_vars_schar(void);
341extern void test_nc_get_vars_short(void);
342extern void test_nc_get_vars_text(void);
343extern void test_nc_get_vars_uchar(void);
344extern void test_nc_get_vars(void);
345extern void test_nc_get_vars_ushort(void);
346extern void test_nc_get_vars_uint(void);
347extern void test_nc_get_vars_longlong(void);
348extern void test_nc_get_vars_ulonglong(void);
349
350extern void test_nc_get_varm(void);
351extern void test_nc_get_varm_double(void);
352extern void test_nc_get_varm_float(void);
353extern void test_nc_get_varm_int(void);
354extern void test_nc_get_varm_long(void);
355extern void test_nc_get_varm_schar(void);
356extern void test_nc_get_varm_short(void);
357extern void test_nc_get_varm_text(void);
358extern void test_nc_get_varm_uchar(void);
359extern void test_nc_get_varm(void);
360extern void test_nc_get_varm_ushort(void);
361extern void test_nc_get_varm_uint(void);
362extern void test_nc_get_varm_longlong(void);
363extern void test_nc_get_varm_ulonglong(void);
364
365extern void test_nc_get_att(void);
366extern void test_nc_get_att_double(void);
367extern void test_nc_get_att_float(void);
368extern void test_nc_get_att_int(void);
369extern void test_nc_get_att_long(void);
370extern void test_nc_get_att_schar(void);
371extern void test_nc_get_att_short(void);
372extern void test_nc_get_att_text(void);
373extern void test_nc_get_att_uchar(void);
374extern void test_nc_get_att_ushort(void);
375extern void test_nc_get_att_uint(void);
376extern void test_nc_get_att_longlong(void);
377extern void test_nc_get_att_ulonglong(void);
378
379extern void test_nc_put_att(void);
380extern void test_nc_put_var_double(void);
381extern void test_nc_put_var_float(void);
382extern void test_nc_put_var_int(void);
383extern void test_nc_put_var_long(void);
384extern void test_nc_put_var_schar(void);
385extern void test_nc_put_var_short(void);
386extern void test_nc_put_var_text(void);
387extern void test_nc_put_var_uchar(void);
388extern void test_nc_put_var(void);
389extern void test_nc_put_var_ushort(void);
390extern void test_nc_put_var_uint(void);
391extern void test_nc_put_var_longlong(void);
392extern void test_nc_put_var_ulonglong(void);
393
394extern void test_nc_put_var1_double(void);
395extern void test_nc_put_var1_float(void);
396extern void test_nc_put_var1_int(void);
397extern void test_nc_put_var1_long(void);
398extern void test_nc_put_var1_schar(void);
399extern void test_nc_put_var1_short(void);
400extern void test_nc_put_var1_text(void);
401extern void test_nc_put_var1_uchar(void);
402extern void test_nc_put_var1(void);
403extern void test_nc_put_var1_ushort(void);
404extern void test_nc_put_var1_uint(void);
405extern void test_nc_put_var1_longlong(void);
406extern void test_nc_put_var1_ulonglong(void);
407
408extern void test_nc_put_vara_double(void);
409extern void test_nc_put_vara_float(void);
410extern void test_nc_put_vara_int(void);
411extern void test_nc_put_vara_long(void);
412extern void test_nc_put_vara_schar(void);
413extern void test_nc_put_vara_short(void);
414extern void test_nc_put_vara_text(void);
415extern void test_nc_put_vara_uchar(void);
416extern void test_nc_put_vara(void);
417extern void test_nc_put_vara_ushort(void);
418extern void test_nc_put_vara_uint(void);
419extern void test_nc_put_vara_longlong(void);
420extern void test_nc_put_vara_ulonglong(void);
421
422extern void test_nc_put_vars_double(void);
423extern void test_nc_put_vars_float(void);
424extern void test_nc_put_vars_int(void);
425extern void test_nc_put_vars_long(void);
426extern void test_nc_put_vars_schar(void);
427extern void test_nc_put_vars_short(void);
428extern void test_nc_put_vars_text(void);
429extern void test_nc_put_vars_uchar(void);
430extern void test_nc_put_vars(void);
431extern void test_nc_put_vars_ushort(void);
432extern void test_nc_put_vars_uint(void);
433extern void test_nc_put_vars_longlong(void);
434extern void test_nc_put_vars_ulonglong(void);
435
436extern void test_nc_put_varm_double(void);
437extern void test_nc_put_varm_float(void);
438extern void test_nc_put_varm_int(void);
439extern void test_nc_put_varm_long(void);
440extern void test_nc_put_varm_schar(void);
441extern void test_nc_put_varm_short(void);
442extern void test_nc_put_varm_text(void);
443extern void test_nc_put_varm_uchar(void);
444extern void test_nc_put_varm(void);
445extern void test_nc_put_varm_ushort(void);
446extern void test_nc_put_varm_uint(void);
447extern void test_nc_put_varm_longlong(void);
448extern void test_nc_put_varm_ulonglong(void);
449
450extern void test_nc_put_att_double(void);
451extern void test_nc_put_att_float(void);
452extern void test_nc_put_att_int(void);
453extern void test_nc_put_att_long(void);
454extern void test_nc_put_att_schar(void);
455extern void test_nc_put_att_short(void);
456extern void test_nc_put_att_text(void);
457extern void test_nc_put_att_uchar(void);
458extern void test_nc_put_att_ushort(void);
459extern void test_nc_put_att_uint(void);
460extern void test_nc_put_att_longlong(void);
461extern void test_nc_put_att_ulonglong(void);
462
463extern void test_nc_create(void);
464extern void test_nc_redef(void);
465extern void test_nc_enddef(void);
466extern void test_nc_sync(void);
467extern void test_nc_abort(void);
468extern void test_nc_def_dim(void);
469extern void test_nc_rename_dim(void);
470extern void test_nc_def_var(void);
471extern void test_nc_rename_var(void);
472extern void test_nc_copy_att(void);
473
474extern void test_nc_inq_att(void);
475extern void test_nc_inq_attname(void);
476extern void test_nc_inq_attid(void);
477extern void test_nc_inq_attlen(void);
478extern void test_nc_inq_atttype(void);
479
480extern void test_nc_rename_att(void);
481extern void test_nc_del_att(void);
482extern void test_nc_set_fill(void);
483extern void test_nc_set_default_format(void);
484
485void print_nok(int nok);
486
487int inRange(const double value, const nc_type datatype);
488
489/*
490 * internal types
491 */
492typedef enum {
493 NCT_UNSPECIFIED = 0,
494 NCT_UCHAR = 1, /* unsigned char */
495 NCT_TEXT = 16, /* char */
496#define NCT_CHAR NCT_TEXT
497 NCT_SCHAR = 17, /* signed char */
498 NCT_SHORT = 18, /* short */
499 NCT_INT = 20, /* int */
500 NCT_LONG = 22, /* long */
501 NCT_FLOAT = 36, /* float */
502 NCT_DOUBLE = 40, /* double */
503        NCT_USHORT =    41,
504        NCT_UINT =      42,
505        NCT_INT64 =     43,
506#define NCT_LONGLONG NCT_INT64
507        NCT_UINT64 =    44
508#define NCT_ULONGLONG NCT_UINT64
509nct_itype;
510
511int inRange3(const double value, const nc_type datatype, const nct_itype itype);
512
513int equal(const double x, const double ync_type extTypenct_itype itype);
514
515int int_vec_eq(const int *v1, const int *v2, const int n);
516
517int roll( int n );
518
519int
520toMixedBase(
521    size_t number,        /* number to be converted to mixed base */
522    size_t length,
523    const size_t base[],        /* dimensioned [length], base[0] ignored */
524    size_t result[]);      /* dimensioned [length] */
525
526size_t
527fromMixedBase(
528    size_t length,
529    size_t number[],      /* dimensioned [length] */
530    size_t base[]);        /* dimensioned [length], base[0] ignored */
531
532int nc2dbl ( const nc_type datatype, const void *p, double *result);
533
534int dbl2nc ( const double d, const nc_type datatype, void *p);
535
536double hash( const nc_type type, const int rank, const size_t *index );
537
538double hash4(
539    const nc_type type,
540    const int rank,
541    const size_t *index,
542    const nct_itype itype);
543
544void init_gvars(void);
545
546void def_dims(int ncid);
547
548void def_vars(int ncid);
549
550void put_atts(int ncid);
551
552void put_vars(int ncid);
553
554void write_file(char *filename);
555
556void check_dims(int  ncid);
557
558void check_vars(int  ncid);
559
560void check_atts(int  ncid);
561
562void check_file(char *filename);
563
564int file_create(const char *filename, int cmode, int *ncid);
565
566int file_open(const char *filename, int omode, int *ncid);
567
568#ifdef __cplusplus
569}
570#endif


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