57 #define TESTFILE "bzip2.nc"
66 static size_t dimsize = DIMSIZE;
67 static size_t chunksize = CHUNKSIZE;
68 static size_t actualdims = NDIMS;
70 static size_t actualproduct = 1;
71 static size_t chunkproduct = 1;
73 static size_t dims[NDIMS];
74 static size_t chunks[NDIMS];
78 static int ncid, varid;
79 static int dimids[NDIMS];
80 static float* array = NULL;
81 static float* expected = NULL;
82 static unsigned int filterid = 0;
83 static unsigned int* params = NULL;
86 static void init(
int argc,
char** argv);
87 static int test_bzip2(
void);
88 static int verifychunks(
void);
92 fprintf(stderr, "Sorry! Unexpected result, %s, line: %d\n", \
93 __FILE__, __LINE__); \
98 check(
int err,
int line)
101 fprintf(stderr,
"fail (%d): %s\n",line,
nc_strerror(err));
108 #define CHECK(x) check(x,__LINE__)
120 size_t chunksizes[NDIMS];
121 memset(chunksizes,0,
sizeof(chunksizes));
125 fprintf(stderr,
"bad chunk store\n");
129 for(i=0;i<actualdims;i++) {
130 if(chunksizes[i] != chunks[i]) {
131 fprintf(stderr,
"bad chunk size: %d\n",i);
147 printf(
"data comparison: |array|=%ld\n",(
unsigned long)actualproduct);
148 for(i=0;i<actualproduct;i++) {
149 if(expected[i] != array[i]) {
150 printf(
"mismatch: array[%d]=%f expected[%d]=%f\n",
151 i,array[i],i,expected[i]);
158 printf(
"no data errors\n");
159 if(actualproduct <= 1)
171 unsigned int level = BZIP2_LEVEL;
175 printf(
"\n*** Testing API: bzip2 compression.\n");
178 memset(array,0,
sizeof(
float)*actualproduct);
187 for(i=0;i<actualdims;i++) {
189 snprintf(dimname,
sizeof(dimname),
"dim%d",i);
190 CHECK(
nc_def_dim(ncid, dimname, dims[i], &dimids[i]));
208 if(
id != BZIP2_ID || nparams != 1 || level != BZIP2_LEVEL) {
209 printf(
"test_filter: filter def/inq mismatch\n");
213 printf(
"show parameters for bzip2: level=%u\n",level);
215 printf(
"show chunks:");
216 for(i=0;i<actualdims;i++)
217 printf(
"%s%ld",(i==0?
" chunks=":
","),(
unsigned long)chunks[i]);
224 for(i=0;i<actualproduct;i++)
225 expected[i] = (
float)i;
234 printf(
"\n*** Testing API: bzip2 decompression.\n");
237 memset(array,0,
sizeof(
float)*actualproduct);
251 params = (
unsigned int*)malloc(
sizeof(
unsigned int)*nparams);
256 if(filterid != BZIP2_ID) {
257 printf(
"Bzip2 id mismatch: %d\n",filterid);
260 if(nparams != 1 && params != NULL && params[0] != BZIP2_LEVEL) {
261 printf(
"Compression parameter mismatch\n");
274 return (compare() ==
NC_NOERR ? 0 : 1);
281 init(
int argc,
char** argv)
287 for(i=0;i<NDIMS;i++) {
289 chunks[i] = chunksize;
291 actualproduct *= dims[i];
292 chunkproduct *= chunks[i];
296 array = (
float*)calloc(1,
sizeof(
float)*actualproduct);
297 expected = (
float*)calloc(1,
sizeof(
float)*actualproduct);
302 main(
int argc,
char **argv)
#define NC_ENOMEM
Memory allocation (malloc) failure.
#define NC_CHUNKED
In HDF5 files you can set storage for each variable to be either contiguous or chunked, with nc_def_var_chunking().
EXTERNL int nc_def_var(int ncid, const char *name, nc_type xtype, int ndims, const int *dimidsp, int *varidp)
Define a new variable.
EXTERNL int nc_def_dim(int ncid, const char *name, size_t len, int *idp)
Define a new dimension.
Main header file for the C API.
EXTERNL int nc_put_var(int ncid, int varid, const void *op)
Write an entire variable with one call.
EXTERNL int nc_inq_var_chunking(int ncid, int varid, int *storagep, size_t *chunksizesp)
This is a wrapper for nc_inq_var_all().
#define NC_NOWRITE
Set read-only access for nc_open().
#define NC_EBADDIM
Invalid dimension id or name.
EXTERNL int nc_close(int ncid)
Close an open netCDF dataset.
#define NC_EFILTER
Filter operation failed.
#define NC_EINVAL
Invalid Argument.
EXTERNL int nc_def_var_chunking(int ncid, int varid, int storage, const size_t *chunksizesp)
Define chunking parameters for a variable.
EXTERNL int nc_def_var_filter(int ncid, int varid, unsigned int id, size_t nparams, const unsigned int *parms)
Define a new variable filter.
#define NC_NOFILL
Argument to nc_set_fill() to turn off filling of data.
EXTERNL int nc_set_fill(int ncid, int fillmode, int *old_modep)
Change the fill-value mode to improve write performance.
EXTERNL int nc_inq_var_filter(int ncid, int varid, unsigned int *idp, size_t *nparams, unsigned int *params)
Find the filter (if any) associated with a variable.
#define NC_NETCDF4
Use netCDF-4/HDF5 format.
EXTERNL int nc_open(const char *path, int mode, int *ncidp)
Open an existing netCDF file.
EXTERNL int nc_inq_varid(int ncid, const char *name, int *varidp)
Find the ID of a variable, from the name.
int nc_get_var_float(int ncid, int varid, float *ip)
Read an entire variable in one call.
#define NC_ESTORAGE
Can't specify both contiguous and chunking.
#define NC_CLOBBER
Destroy existing file.
#define NC_NOERR
No Error.
EXTERNL int nc_enddef(int ncid)
Leave define mode.
EXTERNL const char * nc_strerror(int ncerr)
Given an error number, return an error message.
#define NC_FLOAT
single precision floating point number
EXTERNL int nc_create(const char *path, int cmode, int *ncidp)
Create a new netCDF file.
#define NC_EBADCHUNK
Bad chunksize.