mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-21 08:39:46 +08:00
7223c4a5aa
re: https://github.com/Unidata/netcdf-c/issues/1451 The situation with the various DAP (and other) remote test servers is currently in a state of flux. For example, Unidata admin is planning to forcibly shift the remote test server to remotetest.unidata.ucar.edu soon. In addition, the server test.opendap.org has shown some recent instability. The result is that various DAP (and byterange) tests can fail unexpectedly. This is an irritant to users and reveals nothing about test sucess or failure. Solve by modifying tests to report server inaccessibility and otherwise pretend to succeed. This puts an onus on Unidata to detect such server failures, but will not cause users to see spurious failures. [Note. Do similar fix for netcdf-java]. The check is: 1. export SETX=1 to cause all the shell scripts to trace 2. search the log files for the phrase "WARNING" (in upper case) and see if it is complaining about not finding a server. Misc. Changes ------------- 1. Added a pingurl program to see if a server was up. 2. modified some test case url targets
260 lines
6.4 KiB
C
260 lines
6.4 KiB
C
/* varm_test */
|
|
/* acm 9/15/09 */
|
|
/* ansley.b.manke@noaa.gov */
|
|
/* test nc_get_varm_float with calls similar to Ferret calls */
|
|
/* local file is correct results with stride: every second value */
|
|
/* remote url; incorrect results with stride
|
|
|
|
linked with:
|
|
cc varm_test.c -g -o varm_test /home/nstout/ansley/local/lib/libnetcdf.a -L/usr/lib64 -lc -lm -lcurl
|
|
|
|
netcdf.a from the daily snapshot
|
|
netcdf-4.1-beta2-snapshot2009091100
|
|
|
|
TODO: Note that this test uses thredds server
|
|
*/
|
|
|
|
/* This particular test seems to occasionally expose a server error*/
|
|
|
|
|
|
#include <config.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "netcdf.h"
|
|
#include "ncdispatch.h"
|
|
#include "nctestserver.h"
|
|
|
|
#undef STANDALONE
|
|
|
|
#undef DEBUG
|
|
|
|
#define TESTPATH "/dodsC/testdods/coads_climatology.nc"
|
|
#define VAR "SST"
|
|
|
|
static float expected_stride1[12] = {
|
|
29.430857,
|
|
29.403780,
|
|
29.325428,
|
|
29.578333,
|
|
29.660833,
|
|
29.378437,
|
|
29.151943,
|
|
29.109715,
|
|
29.114864,
|
|
29.550285,
|
|
29.542500,
|
|
29.500286
|
|
};
|
|
|
|
static float expected_stride2[6] = {
|
|
29.430857,
|
|
29.325428,
|
|
29.660833,
|
|
29.151943,
|
|
29.114864,
|
|
29.542500
|
|
};
|
|
|
|
static float expected_stride3[3] = {
|
|
29.430857,
|
|
29.378437,
|
|
29.542500
|
|
};
|
|
|
|
void
|
|
check(int status, char* file, int line)
|
|
{
|
|
if(status == 0) return;
|
|
fprintf(stderr,"error: %s at %s:%d\n",nc_strerror(status),file,line);
|
|
exit(1);
|
|
}
|
|
|
|
int
|
|
main()
|
|
{
|
|
|
|
int ncid;
|
|
int varid;
|
|
int i,fail;
|
|
int err;
|
|
size_t start[5], count[5];
|
|
ptrdiff_t stride[5], imap[5];
|
|
int idim;
|
|
float dat[20];
|
|
char url[4096];
|
|
char* svc;
|
|
#ifdef STANDALONE
|
|
int ndim;
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
oc_loginit();
|
|
oc_setlogging(1);
|
|
oc_logopen(NULL);
|
|
#endif
|
|
|
|
/* Find Test Server */
|
|
svc = nc_findtestserver("thredds",REMOTETESTSERVERS);
|
|
|
|
if(svc == NULL) {
|
|
fprintf(stderr,"WARNING: Cannot locate test server\n");
|
|
exit(0);
|
|
}
|
|
strncpy(url,svc,sizeof(url));
|
|
strlcat(url,TESTPATH,sizeof(url));
|
|
printf("*** Test: varm on URL: %s\n",url);
|
|
free(svc);
|
|
|
|
check(err = nc_open(url, NC_NOWRITE, &ncid),__FILE__,__LINE__);
|
|
check(err = nc_inq_varid(ncid, VAR, &varid),__FILE__,__LINE__);
|
|
for (idim=0; idim<4; idim++) {
|
|
start[idim] = 0;
|
|
count[idim] = 1;
|
|
stride[idim] = 1;
|
|
imap[idim] = 1;
|
|
}
|
|
#ifdef STANDALONE
|
|
ndim=3;
|
|
#endif
|
|
|
|
printf("*** Testing: stride case 1\n");
|
|
start[1] = 44;
|
|
start[2] = 66;
|
|
count[0] = 12;
|
|
|
|
#ifdef STANDALONE
|
|
printf("start = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
|
|
printf("\n");
|
|
printf("count = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
|
|
printf("\n");
|
|
printf("stride = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
|
|
printf("\n");
|
|
printf("map = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
|
|
printf("\n");
|
|
|
|
err = nc_get_vars_float (ncid, varid, start, count, stride,
|
|
(float*) dat);
|
|
printf("vars: %s =",VAR);
|
|
for(i=0;i<12;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
|
|
check(err = nc_get_varm_float (ncid, varid, start, count, stride, imap,(float*) dat),__FILE__,__LINE__);
|
|
/* check(err = nc_get_vara_float (ncid, varid, start, count, (float*) dat),__FILE__,__LINE__); */
|
|
|
|
#ifdef STANDALONE
|
|
printf("varm: %s =",VAR);
|
|
for(i=0;i<12;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
fail=0;
|
|
for(i=0;i<12;i++) {
|
|
float delta = (dat[i] - expected_stride1[i]);
|
|
if(delta > 0.0005 || delta < -0.0005) {
|
|
fprintf(stderr,"*** Failure: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
|
|
delta, i, dat[i], i, expected_stride1[i]);
|
|
fail = 1;
|
|
}
|
|
}
|
|
printf("*** %s: stride case 1\n",(fail?"Fail":"Pass"));
|
|
|
|
printf("*** Testing: stride case 2\n");
|
|
/* case with strides #1 where len % stride == 0 */
|
|
start[1] = 44;
|
|
start[2] = 66;
|
|
count[0] = 6;
|
|
stride[0] = 2;
|
|
|
|
#ifdef STANDALONE
|
|
printf("start = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
|
|
printf("\n");
|
|
printf("count = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
|
|
printf("\n");
|
|
printf("stride = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
|
|
printf("\n");
|
|
printf("map = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
|
|
printf("\n");
|
|
|
|
check(err = nc_get_vars_float(ncid, varid, start, count, stride,
|
|
(float*) dat),__FILE__,__LINE__);
|
|
printf("strided.vars: %s =",VAR);
|
|
for(i=0;i<6;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
check(err = nc_get_varm_float(ncid, varid, start, count, stride, imap,
|
|
(float*) dat),__FILE__,__LINE__);
|
|
#ifdef STANDALONE
|
|
printf("strided.varm: %s =",VAR);
|
|
for(i=0;i<6;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
fail=0;
|
|
for(i=0;i<6;i++) {
|
|
float delta = (dat[i] - expected_stride2[i]);
|
|
if(delta > 0.0005 || delta < -0.0005) {
|
|
fprintf(stderr,"*** Failure: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
|
|
delta, i, dat[i], i, expected_stride2[i]);
|
|
fail=1;
|
|
}
|
|
}
|
|
printf("*** %s: stride case 2\n",(fail?"Fail":"Pass"));
|
|
|
|
/* case with strides #2: len % stride != 0 */
|
|
printf("*** Testing: stride case 3\n");
|
|
start[1] = 44;
|
|
start[2] = 66;
|
|
count[0] = 3;
|
|
stride[0] = 5;
|
|
|
|
#ifdef STANDALONE
|
|
printf("start = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)start[i]);
|
|
printf("\n");
|
|
printf("count = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)count[i]);
|
|
printf("\n");
|
|
printf("stride = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)stride[i]);
|
|
printf("\n");
|
|
printf("map = ");
|
|
for(i=0;i<ndim;i++) printf(" %d",(int)imap[i]);
|
|
printf("\n");
|
|
|
|
check(err = nc_get_vars_float(ncid, varid, start, count, stride,
|
|
(float*) dat),__FILE__,__LINE__);
|
|
printf("strided.vars: %s =",VAR);
|
|
for(i=0;i<3;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
check(err = nc_get_varm_float(ncid, varid, start, count, stride, imap,
|
|
(float*) dat),__FILE__,__LINE__);
|
|
#ifdef STANDALONE
|
|
printf("strided.varm: %s =",VAR);
|
|
for(i=0;i<3;i++) printf(" %f",dat[i]);
|
|
printf("\n");
|
|
#endif
|
|
fail=0;
|
|
for(i=0;i<3;i++) {
|
|
float delta = (dat[i] - expected_stride3[i]);
|
|
if(delta > 0.0005 || delta < -0.0005) {
|
|
fprintf(stderr,"*** Failure: stride case 2: unexpected value: delta=%g dat[%d]=%g expected[%d]=%g\n",
|
|
delta, i, dat[i], i, expected_stride3[i]);
|
|
fail=1;
|
|
}
|
|
}
|
|
printf("*** %s: stride case 3\n",(fail?"Fail":"Pass"));
|
|
|
|
nc_close(ncid);
|
|
return fail;
|
|
|
|
}
|