1/* varm_test */
2/* acm 9/15/09 */
3/* ansley.b.manke@noaa.gov */
4/* test nc_get_varm_float with calls similar to Ferret calls */
5/* local file is correct results with stride: every second value */
6/* remote url; incorrect results with stride
7
8linked with:
9 cc varm_test.c -g -o varm_test /home/nstout/ansley/local/lib/libnetcdf.a -L/usr/lib64 -lc -lm -lcurl
10
11netcdf.a from the daily snapshot
12netcdf-4.1-beta2-snapshot2009091100
13*/
14
15/* This particular test seems to occasionally expose a server error*/
16
17
18#include <config.h>
19#include <stdlib.h>
20#include <stdio.h>
21#include <string.h>
22#include "netcdf.h"
23#include "ncdispatch.h"
24
25#undef STANDALONE
26
27#undef DEBUG
28
29#define TESTPATH "/dodsC/testdods/coads_climatology.nc"
30#define VAR "SST"
31
32static float expected_stride1[12] = {
3329.430857,
3429.403780,
3529.325428,
3629.578333,
3729.660833,
3829.378437,
3929.151943,
4029.109715,
4129.114864,
4229.550285,
4329.542500,
4429.500286
45};
46
47static float expected_stride2[6] = {
4829.430857,
4929.325428,
5029.660833,
5129.151943,
5229.114864,
5329.542500
54};
55
56static float expected_stride3[3] = {
5729.430857,
5829.378437,
5929.542500
60};
61
62void
63check(int status, char* file, int line)
64{
65    if(status == 0) return;
66    fprintf(stderr,"error: %s at %s:%d\n",nc_strerror(status),file,line);
67    exit(1);
68}
69
70int
71main()
72{
73
74    int ncid;
75    int varid;
76    int i,fail;
77    int err;
78    size_t start[5], count[5];
79    ptrdiff_t stride[5], imap[5];
80    int idim;
81    float dat[20];
82    char url[4096];
83    char* svc;
84#ifdef STANDALONE
85    int ndim;
86#endif
87
88#ifdef DEBUG
89    oc_loginit();
90    oc_setlogging(1);
91    oc_logopen(NULL);
92#endif
93
94    /* Find Test Server */
95    svc = getenv("THREDDSTESTSERVER");
96    if(svc != NULL) {
97        const char* testserver[2];
98 testserver[0] = svc;
99 testserver[1] = NULL;
100        svc = NC_findtestserver("thredds",testserver);
101    } else 
102        svc = NC_findtestserver("thredds",NULL);
103
104    if(svc == NULL) {
105        fprintf(stderr,"Cannot locate test server\n");
106 exit(0);
107    }
108    strcpy(url,svc);
109    strcat(url,TESTPATH);
110
111    printf("*** Test: varm on URL: %s\n",url);
112
113    check(err = nc_open(urlNC_NOWRITE, &ncid),__FILE__,__LINE__);
114    check(err = nc_inq_varid(ncidVAR, &varid),__FILE__,__LINE__);
115    for (idim=0; idim<4; idim++) {
116        start[idim] = 0;
117        count[idim] = 1;
118        stride[idim] = 1;
119        imap[idim] = 1;
120    }
121#ifdef STANDALONE
122    ndim=3;
123#endif
124
125    printf("*** Testing: stride case 1\n");
126    start[1] = 44;
127    start[2] = 66;
128    count[0] = 12;
129
130#ifdef STANDALONE
131    printf("start = ");
132    for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
133    printf("\n");
134    printf("count = ");
135    for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
136    printf("\n");
137    printf("stride = ");
138    for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
139    printf("\n");
140    printf("map = ");
141    for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
142    printf("\n");
143
144    err = nc_get_vars_float (ncidvaridstartcountstride,
145      (float*) dat);
146    printf("vars: %s =",VAR);
147    for(i=0;i<12;i++) printf(" %f",dat[i]);
148    printf("\n");
149#endif
150
151    check(err = nc_get_varm_float (ncidvaridstartcountstrideimap,(float*) dat),__FILE__,__LINE__);
152    /*    check(err = nc_get_vara_float (ncid, varid, start, count, (float*) dat),__FILE__,__LINE__); */
153
154#ifdef STANDALONE
155    printf("varm: %s =",VAR);
156    for(i=0;i<12;i++) printf(" %f",dat[i]);
157    printf("\n");
158#endif
159    fail=0;
160    for(i=0;i<12;i++) {
161 float delta = (dat[i] - expected_stride1[i]);
162 if(delta > 0.0005 || delta < -0.0005) {
163     fprintf(stderr,"*** Failure: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
164     deltaidat[i], iexpected_stride1[i]);
165      fail = 1;
166 }
167    }
168    printf("*** %s: stride case 1\n",(fail?"Fail":"Pass"));
169
170    printf("*** Testing: stride case 2\n");
171    /* case with strides #1 where len % stride == 0 */
172    start[1] = 44;
173    start[2] = 66;
174    count[0] =  6;
175    stride[0] = 2;
176
177#ifdef STANDALONE
178    printf("start = ");
179    for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
180    printf("\n");
181    printf("count = ");
182    for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
183    printf("\n");
184    printf("stride = ");
185    for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
186    printf("\n");
187    printf("map = ");
188    for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
189    printf("\n");
190
191    check(err = nc_get_vars_float(ncidvaridstartcountstride,
192                             (float*) dat),__FILE__,__LINE__);
193    printf("strided.vars: %s =",VAR);
194    for(i=0;i<6;i++) printf(" %f",dat[i]);
195    printf("\n");
196#endif
197    check(err = nc_get_varm_float(ncidvaridstartcountstrideimap,
198                             (float*) dat),__FILE__,__LINE__);
199#ifdef STANDALONE
200    printf("strided.varm: %s =",VAR);
201    for(i=0;i<6;i++) printf(" %f",dat[i]);
202    printf("\n");
203#endif
204    fail=0;
205    for(i=0;i<6;i++) {
206 float delta = (dat[i] - expected_stride2[i]);
207 if(delta > 0.0005 || delta < -0.0005) {
208     fprintf(stderr,"*** Failure: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
209     deltaidat[i], iexpected_stride2[i]);
210     fail=1;
211 }
212    }
213    printf("*** %s: stride case 2\n",(fail?"Fail":"Pass"));
214
215    /* case with strides #2: len % stride != 0 */
216    printf("*** Testing: stride case 3\n");
217    start[1] = 44;
218    start[2] = 66;
219    count[0] =  3;
220    stride[0] = 5;
221
222#ifdef STANDALONE
223    printf("start = ");
224    for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
225    printf("\n");
226    printf("count = ");
227    for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
228    printf("\n");
229    printf("stride = ");
230    for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
231    printf("\n");
232    printf("map = ");
233    for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
234    printf("\n");
235
236    check(err = nc_get_vars_float(ncidvaridstartcountstride,
237                             (float*) dat),__FILE__,__LINE__);
238    printf("strided.vars: %s =",VAR);
239    for(i=0;i<3;i++) printf(" %f",dat[i]);
240    printf("\n");
241#endif
242    check(err = nc_get_varm_float(ncidvaridstartcountstrideimap,
243                             (float*) dat),__FILE__,__LINE__);
244#ifdef STANDALONE
245    printf("strided.varm: %s =",VAR);
246    for(i=0;i<3;i++) printf(" %f",dat[i]);
247    printf("\n");
248#endif
249    fail=0;
250    for(i=0;i<3;i++) {
251 float delta = (dat[i] - expected_stride3[i]);
252 if(delta > 0.0005 || delta < -0.0005) {
253     fprintf(stderr,"*** Failure: stride case 2: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
254     deltaidat[i], iexpected_stride3[i]);
255     fail=1;
256 }
257    }
258    printf("*** %s: stride case 3\n",(fail?"Fail":"Pass"));
259
260    return fail;
261
262}


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