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