LRAUV  revA
NetCdfReader_Test.h
Go to the documentation of this file.
1 
9 #ifndef _NETCDFREADER_TEST_H_
10 #define _NETCDFREADER_TEST_H_
11 
12 #ifndef __arm__
13 #include "utils/NetCdfReader.h"
14 #endif
15 
16 #include <cxxtest/TestSuite.h>
17 
23 class NetCdfReader_Test : public CxxTest::TestSuite
24 {
25 public:
26 
27  // Constructor/Destructor test
29  {
30 #ifndef __arm__
31  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
32 
33  // Should fail...
34  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
35 
36  if( NULL != netCdfReader )
37  {
38  delete netCdfReader;
39  }
40 #endif
41  }
42 
43  // GetAttsDimsVars test
44  void testFindAttsDimsVars( void )
45  {
46 #ifndef __arm__
47  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
48 
49  // Should fail...
50  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
51 
52  if( NULL != netCdfReader )
53  {
54  TS_ASSERT( netCdfReader->findDim( "latitude" ) );
55  TS_ASSERT( netCdfReader->findDim( "longitude" ) );
56 
57  TS_ASSERT( netCdfReader->findAtt( "name" ) );
58 
59  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "distance" ) );
60  TS_ASSERT( var );
61  if( var )
62  {
63  TS_ASSERT( netCdfReader->findAtt( *var, "units" ) );
64  }
65 
66  delete netCdfReader;
67  }
68 #endif
69  }
70 
71  // Read(String,Att) test
72  void testReadStringAtt( void )
73  {
74 #ifndef __arm__
75  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
76 
77  // Should fail...
78  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
79 
80  if( NULL != netCdfReader )
81  {
82  Str attString;
83  NetCdfReader::NetCdfAtt* att( netCdfReader->findAtt( "name" ) );
84  TS_ASSERT( att );
85  if( att )
86  {
87  TS_ASSERT( netCdfReader->readStr( attString, *att ) );
88  TS_ASSERT_EQUALS( attString, "Distance from shore, central California region" );
89  }
90 
91  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "distance" ) );
92  TS_ASSERT( var );
93  if( var )
94  {
95  att = netCdfReader->findAtt( *var, "units" );
96  TS_ASSERT( att );
97  if( att )
98  {
99  TS_ASSERT( netCdfReader->readStr( attString, *att ) );
100  TS_ASSERT_EQUALS( attString, "m" );
101  }
102  }
103 
104  delete netCdfReader;
105  }
106 #endif
107  }
108 
109  // Read(Float,Var,Index1) test
110  void testReadFloatVar1D( void )
111  {
112 #ifndef __arm__
113  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
114 
115  // Should fail...
116  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
117 
118  if( NULL != netCdfReader )
119  {
120  float theFloat;
121  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "latitude" ) );
122  TS_ASSERT( var );
123  if( var )
124  {
125  TS_ASSERT( netCdfReader->read1D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 0 ) );
126  TS_ASSERT_DELTA( theFloat, 35.0, 1e-4 );
127  TS_ASSERT( netCdfReader->read1D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 280 ) );
128  TS_ASSERT_DELTA( theFloat, 37.8, 1e-4 );
129  }
130  var = netCdfReader->findVar( "longitude" );
131  TS_ASSERT( var );
132  if( var )
133  {
134  TS_ASSERT( netCdfReader->read1D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 0 ) );
135  TS_ASSERT_DELTA( theFloat, -123.8, 1e-4 );
136  TS_ASSERT( netCdfReader->read1D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 280 ) );
137  TS_ASSERT_DELTA( theFloat, -121.0, 1e-4 );
138  }
139  var = netCdfReader->findVar( "distance" );
140  TS_ASSERT( var );
141  if( var )
142  {
143  TS_ASSERT( netCdfReader->read2D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 0, 0 ) );
144  TS_ASSERT_DELTA( theFloat, 224.5141, 1e-4 );
145  }
146  delete netCdfReader;
147  }
148 #endif
149  }
150 
151  // Read(Float,Var,Index1a,Index1b) test
153  {
154 #ifndef __arm__
155  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
156 
157  // Should fail...
158  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
159 
160  if( NULL != netCdfReader )
161  {
162  float theFloats[3];
163  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "longitude" ) );
164  TS_ASSERT( var );
165  if( var )
166  {
167  TS_ASSERT( netCdfReader->read1DArray( theFloats, NetCdf::NC_FLOAT_TYPE, *var, 30, 32 ) );
168  TS_ASSERT_DELTA( theFloats[0], -123.50, 1e-4 );
169  TS_ASSERT_DELTA( theFloats[1], -123.49, 1e-4 );
170  TS_ASSERT_DELTA( theFloats[2], -123.48, 1e-4 );
171  }
172  delete netCdfReader;
173  }
174 #endif
175  }
176 
177  // ReadFloatVar,Index1,Index2) test
178  void testReadFloatVar2D( void )
179  {
180 #ifndef __arm__
181  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
182 
183  // Should fail...
184  TS_ASSERT_DIFFERS( ( int )( size_t ) netCdfReader, 0 );
185 
186  if( NULL != netCdfReader )
187  {
188  float theFloat;
189  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "distance" ) );
190  TS_ASSERT( var );
191  if( var )
192  {
193  TS_ASSERT( netCdfReader->read2D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 0, 0 ) );
194  TS_ASSERT_DELTA( theFloat, 224.5141, 1e-4 );
195  TS_ASSERT( netCdfReader->read2D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 140, 140 ) );
196  TS_ASSERT_DELTA( theFloat, 41.8181, 1e-4 );
197  TS_ASSERT( netCdfReader->read2D( &theFloat, NetCdf::NC_FLOAT_TYPE, *var, 280, 280 ) );
198  TS_ASSERT_DELTA( theFloat, 96.3373, 1e-4 );
199  }
200  delete netCdfReader;
201  }
202 #endif
203  }
204 
205  // ReadFloat(Var,Index1a,Index1b,Index2a,Index2b) test
207  {
208 #ifndef __arm__
209  NetCdfReader* netCdfReader = NetCdfReader::NewNetCdfReader( "./Resources/NetCdfReader_Test.nc" );
210  TS_ASSERT( netCdfReader );
211 
212  if( NULL != netCdfReader )
213  {
214  float theFloats[3][3];
215  NetCdfReader::NetCdfVar* var( netCdfReader->findVar( "distance" ) );
216  TS_ASSERT( var );
217  if( var )
218  {
219  TS_ASSERT( netCdfReader->read2DArray( theFloats, NetCdf::NC_FLOAT_TYPE, *var, 30, 32, 30, 32 ) );
220  TS_ASSERT_DELTA( theFloats[0][0], 182.2367, 1e-4 );
221  TS_ASSERT_DELTA( theFloats[0][1], 181.5249, 1e-4 );
222  TS_ASSERT_DELTA( theFloats[0][2], 180.8149, 1e-4 );
223  TS_ASSERT_DELTA( theFloats[1][0], 181.5502, 1e-4 );
224  TS_ASSERT_DELTA( theFloats[1][1], 180.8359, 1e-4 );
225  TS_ASSERT_DELTA( theFloats[1][2], 180.1232, 1e-4 );
226  TS_ASSERT_DELTA( theFloats[2][0], 180.8680, 1e-4 );
227  TS_ASSERT_DELTA( theFloats[2][1], 180.1511, 1e-4 );
228  TS_ASSERT_DELTA( theFloats[2][2], 179.4357, 1e-4 );
229  }
230  delete netCdfReader;
231  }
232 #endif
233  }
234 };
235 
236 #endif // _NETCDFREADER_TEST_H
void testReadFloatVar2D(void)
Definition: NetCdfReader_Test.h:178
NetCdfVar * findVar(const Str &name)
Finds a variable by name Returns NULL if error.
Definition: NetCdf.cpp:80
void testConstructorDestructor(void)
Definition: NetCdfReader_Test.h:28
Contains the NetCdfReader class declaration.
Definition: NetCdf.h:73
static NetCdfReader * NewNetCdfReader(const char *fileName)
Returns an newNetCdfReader of a NetCdfReader for a file.
Definition: NetCdfReader.cpp:15
void testReadFloatVar2DRange(void)
Definition: NetCdfReader_Test.h:206
Replacement for standard template class string.
Definition: Str.h:12
void testFindAttsDimsVars(void)
Definition: NetCdfReader_Test.h:44
A very compact, very simple netCDF reader with a minimal feature set.
Definition: NetCdfReader.h:21
Units tests for class NetCdfReader
Definition: NetCdfReader_Test.h:23
void testReadFloatVar1DRange(void)
Definition: NetCdfReader_Test.h:152
bool read2DArray(void *assignTo, const NetCdfType assignType, const NetCdfVar &var, const unsigned long index1a, const unsigned long index1b, const unsigned long index2a, const unsigned long index2b)
Reads a 2D range of the variable between 2 pairs of indices (a <= index <= b) into an existing 2D arr...
Definition: NetCdfReader.cpp:155
void testReadFloatVar1D(void)
Definition: NetCdfReader_Test.h:110
Definition: NetCdf.h:51
void testReadStringAtt(void)
Definition: NetCdfReader_Test.h:72
Definition: NetCdf.h:84