1      Module tests
2!/*********************************************************************
3! *   Copyright 1996, UCAR/Unidata
4! *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
5! *   $Id: tests.inc,v 1.15 2007/01/19 16:08:47 ed Exp $
6! *********************************************************************/
7
8! Implementation of test.inc in a module
9! Modified by: Richard Weed,Ph.D
10!              Center for Advanced Vehicular Systems
11!              Mississippi State University
12!              rweed@cavs.msstate.edu
13
14!!!!
15! Do not tabify this unless you like hitting the 72 char limit !!!
16!!!
17#ifndef UD_TESTS_INC
18#define UD_TESTS_INC
19
20
21!/* The following prevents non-FORTRAN code from appearing in the output. */
22#if defined(__osf__)
23#   undef _POSIX_SOURCE
24#   define _POSIX_SOURCE
25#endif
26
27#if defined(NO_NETCDF_2)
28#  undef NO_NETCDF_2
29#  define NO_NETCDF_2 1
30#else
31#define NO_NETCDF_2 1
32#endif
33
34#ifdef USE_NETCDF4
35       USE netcdf4_f03
36#else
37       USE netcdf_f03
38#endif
39
40       Implicit NONE
41
42       SAVE
43!/* Parameters of test data */
44
45#ifdef  NF_INT1_T
46#   define NF_B 1
47#else
48#   define NF_B 0
49#endif
50#ifdef  NF_INT2_T
51#   define NF_S 1
52#else
53#   define NF_S 0
54#endif
55! Total number of FORTRAN types:
56       Integer, Parameter :: NUM_FORTRAN_TYPES = (3 + NF_S + NF_B)
57#undef NF_B
58#undef NF_S
59
60      Integer, Parameter :: NTYPES=6
61      Integer, Parameter :: NDIMS=5
62      Integer, Parameter :: NVARS=136
63      Integer, Parameter :: NRECS=2
64      Integer, Parameter :: NGATTS=NTYPES
65      Integer, Parameter :: RECDIM=1
66      Integer, Parameter :: MAX_RANK=3
67      Integer, Parameter :: MAX_NELS=64
68      Integer, Parameter :: MAX_DIM_LEN=4
69      Integer, Parameter :: MAX_NATTS=3
70
71
72!/*
73! * Limits of external types (based on those in ncx.h):
74! */
75      Integer, Parameter :: X_CHAR_MIN=0
76      Integer, Parameter :: X_CHAR_MAX=127
77      Integer, Parameter :: X_INT1_MIN=(-128)
78      Integer, Parameter :: X_INT1_MAX=127
79      Integer, Parameter :: X_INT2_MIN=(-32768)
80      Integer, Parameter :: X_INT2_MAX=32767
81      Integer, Parameter :: X_INT_MIN=(-2147483647-1)
82      Integer, Parameter :: X_INT_MAX=2147483647
83#if 0
84      Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+38
85#else
86      Real(RK4), Parameter :: X_REAL_MAX=3.4028234663852886e+37
87#endif
88      Real(RK4), Parameter :: X_REAL_MIN=(-X_REAL_MAX)
89#if 0
90      Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157E+308
91#else
92      Real(RK8), Parameter :: X_DOUBLE_MAX=1.7976931348623157D+200
93#endif
94      Real(RK8), Parameter :: X_DOUBLE_MIN=(-X_DOUBLE_MAX)
95
96      Integer, Parameter :: X_BYTE_MIN=X_INT1_MIN
97      Integer, Parameter :: X_BYTE_MAX=X_INT1_MAX
98      Integer, Parameter :: X_SHORT_MIN=X_INT2_MIN
99      Integer, Parameter :: X_SHORT_MAX=X_INT2_MAX
100      Real(RK4), Parameter :: X_FLOAT_MIN=X_REAL_MIN
101      Real(RK4), Parameter :: X_FLOAT_MAX=X_REAL_MAX
102
103
104!/*
105! * Examples of invalid argument values:
106! */
107      Integer, Parameter :: BAD_ID=-1
108      Integer, Parameter :: BAD_DIMID=-1
109      Integer, Parameter :: BAD_VARID=-2
110      Integer, Parameter :: BAD_ATTNUM=-1
111      Integer, Parameter :: BAD_TYPE=0
112      Integer, Parameter :: BAD_FILLMODE=-1
113      Character*3, Parameter :: BAD_NAME='a/b'
114
115
116!/*
117! * Internal data types:
118! */
119      Integer, Parameter :: NFT_UNSPECIFIED=0
120      Integer, Parameter :: NFT_TEXT=16
121      Integer, Parameter :: NFT_CHAR=NFT_TEXT
122      Integer, Parameter :: NFT_INT1=17
123      Integer, Parameter :: NFT_INT2=18
124      Integer, Parameter :: NFT_INT=20
125      Integer, Parameter :: NFT_REAL=36
126      Integer, Parameter :: NFT_DOUBLE=40
127
128
129!/*
130! * Define a macro for trimming trailing blanks from character variables.
131! */
132#define TRIM(string) string(1:len_trim(string))
133
134
135!
136! FORTRAN GETARG() subroutine:
137!
138#ifdef __hpux
139#   define      getarg  getarg_
140#endif
141
142
143#endif /* UD_TESTS_INC */
144
145
146! #include "../fortran/netcdf.inc"
147
148
149!    /* Global variables - filenames */
150
151      CHARACTER(LEN=80) ::   testfile   !/* netCDF read-only test data */
152      CHARACTER(LEN=80) ::   scratch    !/* netCDF test file for writing */
153
154!    /* Global variables - command-line arguments */
155
156      LOGICAL :: CREATE_FILE
157      LOGICAL :: READONLY
158      LOGICAL :: VERBOSE
159      INTEGER :: NFAILS
160      INTEGER :: MAX_NMPT        !/* max num messages per test */
161
162!    /* Global variables - test data */
163
164      CHARACTER(LEN=2)            :: DIM_NAME(NDIMS)
165      INTEGER                     :: DIM_LEN(NDIMS)
166      CHARACTER(LEN=(2+MAX_RANK)) :: VAR_NAME(NVARS)
167      INTEGER                     :: VAR_TYPE(NVARS)
168      INTEGER                     :: VAR_RANK(NVARS)
169      INTEGER                     :: VAR_DIMID(MAX_RANK,NVARS)
170      INTEGER                     :: VAR_SHAPE(MAX_RANK,NVARS)
171      INTEGER                     :: VAR_NELS(NVARS)
172      INTEGER                     :: VAR_NATTS(NVARS)
173      CHARACTER(LEN=2)            :: ATTNAME(MAX_NATTS,NVARS)
174      CHARACTER(LEN=2)            :: GATT_NAME(NGATTS)
175      INTEGER                     :: ATTTYPE(NGATTS,NVARS)
176      INTEGER                     :: GATT_TYPE(NGATTS)
177      INTEGER                     :: ATTLEN(MAX_NATTS,NVARS)
178      INTEGER                     :: GATT_LEN(NGATTS)
179
180!    /* Miscellaneous global variables: */
181      CHARACTER(LEN=80) :: PROGNAME        !/* name of the program */
182      INTEGER           :: NFAILSTOTAL
183
184!    /* Common blocks for global variables: */
185
186!     COMMON    /LOGCOM/        CREATE_FILE,                            &
187!    &                          READONLY,                               &
188!    &                          VERBOSE
189
190!     COMMON    /TXTCOM/        TESTFILE,                               &
191!    &                          SCRATCH,                                &
192!    &                          DIM_NAME,                               &
193!    &                          VAR_NAME,                               &
194!    &                          ATTNAME,                                &
195!    &                          GATT_NAME,                              &
196!    &                          PROGNAME
197
198!     COMMON    /INTCOM/        NFAILS,                                 &
199!    &                          DIM_LEN,                                &
200!    &                          VAR_TYPE,                               &
201!    &                          VAR_RANK,                               &
202!    &                          VAR_DIMID,                              &
203!    &                          VAR_SHAPE,                              &
204!    &                          VAR_NELS,                               &
205!    &                          VAR_NATTS,                              &
206!    &                          ATTTYPE,                                &
207!    &                          GATT_TYPE,                              &
208!    &                          ATTLEN,                                 &
209!    &                          GATT_LEN,                               &
210!    &                          MAX_NMPT,                               &
211!    &                          NFAILSTOTAL
212
213
214!    /* Functions for accessing attribute test data */
215!    /* varid is -1 for NC_GLOBAL so can do global atts in same loop */
216
217!/*      EXTERNAL       ATT_NAME */
218
219      INTEGER, EXTERNAL           :: VARID
220      INTEGER, EXTERNAL           :: NATTS
221      CHARACTER(LEN=2), EXTERNAL  :: ATT_NAME
222      INTEGER, EXTERNAL           :: ATT_TYPE
223      INTEGER, EXTERNAL           :: ATT_LEN
224
225
226      LOGICAL, EXTERNAL   :: INRANGE
227      LOGICAL, EXTERNAL   :: INRANGE_UCHAR
228      LOGICAL, EXTERNAL   :: INRANGE_FLOAT
229      LOGICAL, EXTERNAL   :: INRANGE3
230      LOGICAL, EXTERNAL   :: IN_INTERNAL_RANGE
231      LOGICAL, EXTERNAL   :: EQUAL
232      LOGICAL, EXTERNAL   :: INT_VEC_EQ
233
234      INTEGER, EXTERNAL   :: ROLL
235      INTEGER, EXTERNAL   :: INDEX2INDEXES
236      INTEGER, EXTERNAL   :: INDEX2NCINDEXES
237      INTEGER, EXTERNAL   :: INDEXES2INDEX
238      INTEGER, EXTERNAL   :: NC2DBL
239      INTEGER, EXTERNAL   :: DBL2NC
240!      INTEGER, EXTERNAL   :: LEN_TRIM
241      REAL(RK8), EXTERNAL :: HASH
242      REAL(RK8), EXTERNAL :: HASH4
243      REAL(RK8), EXTERNAL :: HASH_TEXT
244      REAL(RK8), EXTERNAL :: HASH_INT1
245      REAL(RK8), EXTERNAL :: HASH_INT2
246      REAL(RK8), EXTERNAL :: HASH_INT
247      REAL(RK8), EXTERNAL :: HASH_REAL
248      REAL(RK8), EXTERNAL :: HASH_DOUBLE
249      REAL(RK8), EXTERNAL :: INTERNAL_MIN
250      REAL(RK8), EXTERNAL :: INTERNAL_MAX
251      REAL(RK8), EXTERNAL :: EXTERNAL_MIN
252      REAL(RK8), EXTERNAL :: EXTERNAL_MAX
253
254      End Module tests
255