netcdf-c/hdf4_test/tst_chunk_hdf4.c
2018-04-04 14:11:44 -06:00

105 lines
2.6 KiB
C

/* This is part of the netCDF package. Copyright 2005-2011,
University Corporation for Atmospheric Research/Unidata. See
COPYRIGHT file for conditions of use.
Test that NetCDF-4 can read HDF4 files.
Dennis Heimbigner, Ward Fisher, Ed Hartnett
*/
#include <config.h>
#include <nc_tests.h>
#include "err_macros.h"
#include <hdf5.h>
#include <H5DSpublic.h>
#include <mfhdf.h>
#define CHUNKEDFILE "ref_chunked.hdf4"
#define CHUNKEDVAR "LandWater"
#define CONTIGFILE "ref_contiguous.hdf4"
#define CONTIGVAR "pres"
#define LAT_LEN 3
#define LON_LEN 2
#define DIMS_2 2
static size_t EXPECTED_CHUNKSIZES[2] = {1,1200};
int
main(int argc, char **argv)
{
int ncid;
int varid;
int rank;
int d;
int storage;
size_t chunksizes[NC_MAX_VAR_DIMS];
printf("\n*** Testing HDF4/NetCDF-4 chunking API: chunked...");
{
/* Open with netCDF */
if (nc_open(CHUNKEDFILE, NC_NOWRITE, &ncid)) ERR;
/* Get a variable id */
if(nc_inq_varid(ncid,CHUNKEDVAR,&varid)) ERR;
/* get rank */
if(nc_inq_varndims(ncid,varid,&rank)) ERR;
/* get chunk info */
memset(chunksizes,0,sizeof(chunksizes));
if(nc_inq_var_chunking(ncid,varid,&storage,chunksizes)) ERR;
if(storage == NC_CONTIGUOUS) {
fprintf(stderr,"nc_inq_var_chunking did not return CHUNKED\n");
ERR;
}
for(d=0;d<rank;d++) {
if(EXPECTED_CHUNKSIZES[d] != chunksizes[d]) {
fprintf(stderr,"chunk size mismatch: [%d] %ld :: %ld\n",d,chunksizes[d],EXPECTED_CHUNKSIZES[d]);
ERR;
}
}
if (nc_close(ncid)) ERR;
}
SUMMARIZE_ERR;
printf("*** Testing HDF4/NetCDF-4 chunking API: contiguous...");
{
/* Open with netCDF */
if (nc_open(CONTIGFILE, NC_NOWRITE, &ncid)) ERR;
/* Get a variable id */
if(nc_inq_varid(ncid,CONTIGVAR,&varid)) ERR;
/* get rank */
if(nc_inq_varndims(ncid,varid,&rank)) ERR;
/* get chunk info */
memset(chunksizes,0,sizeof(chunksizes));
if(nc_inq_var_chunking(ncid,varid,&storage,chunksizes)) ERR;
if(storage != NC_CONTIGUOUS) {
fprintf(stderr,"nc_inq_var_chunking did not return CONTIGUOUS\n");
ERR;
}
if (nc_close(ncid)) ERR;
}
SUMMARIZE_ERR;
printf("*** Testing HDF4/NetCDF-4 chunking API: contiguous...");
{
/* Open with netCDF */
if (nc_open(CONTIGFILE, 0, &ncid)) ERR;
if (nc_inq_varid(ncid, CONTIGVAR, &varid)) ERR;
if (nc_def_var_deflate(ncid, varid, 0, 1, 4) != NC_ENOTNC4) ERR;
if (nc_close(ncid)) ERR;
}
SUMMARIZE_ERR;
FINAL_RESULTS;
}