netcdf-c/nc_test/tst_err_enddef.c

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", 32000, &dimid[1]); CHECK_ERR
err = nc_def_dim(ncid, "XX", 32000, &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);
}