netcdf-c/nc_test/tst_err_enddef.c
Dennis Heimbigner 0454d8e235 Addendum: This PR has been extended to include
interoperability fixed. We were given a Zarr format dataset
stored as a directory+file tree. This dataset uses the XArray
conventions and was generated by some non-Unidata Zarr implementation.
In attempting to process it with NCZarr, several interoperability
problems were discovered and fixed. This gives us more confidence
that NCZarr -- using pure zarr -- can interoperate with other
Zarr implementations.

Specific changes:
* Add test nczarr_test/run_interop.sh
* Support attributes with single value not enclosed in JSON array tags.
* Add mode inferencing and use it in nczarr_test/run_purezarr.sh
* Reduce size of tst_err_enddef.nc because it is more than 3 GB.
2021-04-02 18:39:50 -06:00

65 lines
1.8 KiB
C

/*! \file
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2017, 2018
University Corporation for Atmospheric Research/Unidata.
See \ref copyright file for more info.
*/
#include <config.h>
#include <stdio.h>
#include <netcdf.h>
#define CHECK_ERR { \
if (err != NC_NOERR) { \
nerrs++; \
printf("Error at line %d in %s: (%s)\n", \
__LINE__,__FILE__,nc_strerror(err)); \
} \
}
#define EXP_ERR(exp) { \
if (err != exp) { \
nerrs++; \
printf("Error at line %d in %s: expecting %s but got %s\n", \
__LINE__,__FILE__,nc_strerror(exp), nc_strerror(err)); \
} \
}
int main(int argc, char** argv)
{
char *filename="tst_err_enddef.nc";
int err, nerrs=0, ncid, cmode, varid, dimid[3];
if (argc == 2) filename = argv[1];
printf("*** TESTING error code returned from nc__enddef and nc_close ");
cmode = NC_CLOBBER;
err = nc_create(filename, cmode, &ncid); CHECK_ERR
err = nc_set_fill(ncid, NC_NOFILL, NULL); CHECK_ERR
err = nc_def_dim(ncid, "X", 5, &dimid[0]); CHECK_ERR
err = nc_def_dim(ncid, "YY", 320, &dimid[1]); CHECK_ERR
err = nc_def_dim(ncid, "XX", 320, &dimid[2]); CHECK_ERR
err = nc_def_var(ncid, "var", NC_INT, 1, dimid, &varid); CHECK_ERR
err = nc_def_var(ncid, "var_big", NC_FLOAT, 2, dimid+1, &varid); CHECK_ERR
/* make the file header size larger than 2 GiB */
err = nc__enddef(ncid, 2147483648LL, 1, 1, 1);
EXP_ERR(NC_EVARSIZE)
/* the above error keeps the program in define mode, thus close will
* call enddef again, but this time no error is expected
*/
err = nc_close(ncid); CHECK_ERR
if (nerrs) printf(".... failed with %d errors\n",nerrs);
else printf(".... pass\n");
return (nerrs > 0);
}