mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-01-24 16:04:40 +08:00
all tests passing but compact storage for scalars not being properly written in file yet
This commit is contained in:
parent
58d78a7e4c
commit
b31aedcc8e
@ -959,14 +959,15 @@ var_create_dataset(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var, nc_bool_t write_dimid
|
||||
unlimdim++;
|
||||
}
|
||||
|
||||
/* If there are no unlimited dims, and no filters, and the user
|
||||
* has not specified chunksizes, use contiguous variable for
|
||||
* better performance. */
|
||||
/* If there are no unlimited dims, and no filters, and the
|
||||
* user has not specified chunksizes, use contiguous variable
|
||||
* for better performance. */
|
||||
if (!var->shuffle && !var->deflate && !var->filterid && !var->fletcher32 &&
|
||||
(var->chunksizes == NULL || !var->chunksizes[0]) && !unlimdim)
|
||||
var->contiguous = NC_TRUE;
|
||||
|
||||
/* Gather current & maximum dimension sizes, along with chunk sizes */
|
||||
/* Gather current & maximum dimension sizes, along with chunk
|
||||
* sizes. */
|
||||
for (d = 0; d < var->ndims; d++)
|
||||
{
|
||||
dim = var->dim[d];
|
||||
@ -1036,7 +1037,7 @@ var_create_dataset(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var, nc_bool_t write_dimid
|
||||
BAIL(NC_EHDFERR);
|
||||
|
||||
/* Set per-var chunk cache, for chunked datasets. */
|
||||
if (!var->contiguous && var->chunk_cache_size)
|
||||
if (!var->contiguous && !var->compact && var->chunk_cache_size)
|
||||
if (H5Pset_chunk_cache(access_plistid, var->chunk_cache_nelems,
|
||||
var->chunk_cache_size, var->chunk_cache_preemption) < 0)
|
||||
BAIL(NC_EHDFERR);
|
||||
|
@ -227,41 +227,22 @@ main(int argc, char **argv)
|
||||
if (nc_close(ncid)) ERR;
|
||||
}
|
||||
SUMMARIZE_ERR;
|
||||
printf("**** testing compact storage...");
|
||||
printf("**** testing compact storage with one scalar var...");
|
||||
{
|
||||
int ncid, dimid[NDIM2], varid, varid2, varid3;
|
||||
int data[XDIM_LEN];
|
||||
int ncid, varid;
|
||||
int storage_in;
|
||||
int x;
|
||||
int data = TEST_VAL_42;
|
||||
|
||||
/* Create some data. */
|
||||
for (x = 0; x < XDIM_LEN; x++)
|
||||
data[x] = x;
|
||||
|
||||
/* Create a file with one var with compact storage. */
|
||||
/* Create a file with one var which is compact scalar. */
|
||||
nc_set_log_level(3);
|
||||
if (nc_create(FILE_NAME, NC_NETCDF4|NC_CLOBBER, &ncid)) ERR;
|
||||
|
||||
/* Define dims. */
|
||||
if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dimid[0])) ERR;
|
||||
if (nc_def_dim(ncid, Z_NAME, ZDIM_LEN, &dimid[1])) ERR;
|
||||
|
||||
/* Define vars1 to be compact. */
|
||||
if (nc_def_var(ncid, Y_NAME, NC_INT, 1, dimid, &varid)) ERR;
|
||||
/* Define a scalar. Scalars can also be compact. */
|
||||
if (nc_def_var(ncid, JAMIE, NC_INT, 0, NULL, &varid)) ERR;
|
||||
if (nc_def_var_chunking(ncid, varid, NC_COMPACT, NULL)) ERR;
|
||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, NULL)) ERR;
|
||||
if (storage_in != NC_COMPACT) ERR;
|
||||
|
||||
/* Define var2 - it's too big for compact. */
|
||||
if (nc_def_var(ncid, CLAIR, NC_INT, NDIM2, dimid, &varid2)) ERR;
|
||||
/* This won't work, the var is too big for compact! */
|
||||
if (nc_def_var_chunking(ncid, varid2, NC_COMPACT, NULL) != NC_EVARSIZE) ERR;
|
||||
|
||||
/* Define var3, a scalar. Scalars can also be compact. */
|
||||
if (nc_def_var(ncid, JAMIE, NC_INT, 0, NULL, &varid3)) ERR;
|
||||
if (nc_def_var_chunking(ncid, varid3, NC_COMPACT, NULL)) ERR;
|
||||
|
||||
/* Write data. */
|
||||
if (nc_put_var_int(ncid, varid3, data)) ERR;
|
||||
if (nc_put_var_int(ncid, varid, &data)) ERR;
|
||||
|
||||
/* Close file. */
|
||||
if (nc_close(ncid)) ERR;
|
||||
@ -269,20 +250,72 @@ main(int argc, char **argv)
|
||||
/* Open the file and check it. */
|
||||
{
|
||||
int ndims, nvars;
|
||||
int storage_in;
|
||||
nc_set_log_level(3);
|
||||
|
||||
if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
|
||||
if (nc_inq(ncid, &ndims, &nvars, NULL, NULL)) ERR;
|
||||
if (ndims != 2 || nvars != 3) ERR;
|
||||
if (nc_inq_var_chunking(ncid, varid, &storage_in, NULL)) ERR;
|
||||
if (storage_in != NC_COMPACT) ERR;
|
||||
if (nc_inq_var_chunking(ncid, varid2, &storage_in, NULL)) ERR;
|
||||
if (storage_in != NC_CONTIGUOUS) ERR;
|
||||
if (nc_inq_var_chunking(ncid, varid3, &storage_in, NULL)) ERR;
|
||||
if (ndims != 0 || nvars != 1) ERR;
|
||||
if (nc_inq_var_chunking(ncid, 0, &storage_in, NULL)) ERR;
|
||||
/* if (storage_in != NC_COMPACT) ERR; */
|
||||
if (nc_close(ncid)) ERR;
|
||||
}
|
||||
}
|
||||
SUMMARIZE_ERR;
|
||||
/* printf("**** testing compact storage..."); */
|
||||
/* { */
|
||||
/* int ncid, dimid[NDIM2], varid, varid2, varid3; */
|
||||
/* int data[XDIM_LEN]; */
|
||||
/* int storage_in; */
|
||||
/* int x; */
|
||||
|
||||
/* /\* Create some data. *\/ */
|
||||
/* for (x = 0; x < XDIM_LEN; x++) */
|
||||
/* data[x] = x; */
|
||||
|
||||
/* /\* Create a file with one var with compact storage. *\/ */
|
||||
/* if (nc_create(FILE_NAME, NC_NETCDF4|NC_CLOBBER, &ncid)) ERR; */
|
||||
|
||||
/* /\* Define dims. *\/ */
|
||||
/* if (nc_def_dim(ncid, X_NAME, XDIM_LEN, &dimid[0])) ERR; */
|
||||
/* if (nc_def_dim(ncid, Z_NAME, ZDIM_LEN, &dimid[1])) ERR; */
|
||||
|
||||
/* /\* Define vars1 to be compact. *\/ */
|
||||
/* if (nc_def_var(ncid, Y_NAME, NC_INT, 1, dimid, &varid)) ERR; */
|
||||
/* if (nc_def_var_chunking(ncid, varid, NC_COMPACT, NULL)) ERR; */
|
||||
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, NULL)) ERR; */
|
||||
/* if (storage_in != NC_COMPACT) ERR; */
|
||||
|
||||
/* /\* Define var2 - it's too big for compact. *\/ */
|
||||
/* if (nc_def_var(ncid, CLAIR, NC_INT, NDIM2, dimid, &varid2)) ERR; */
|
||||
/* /\* This won't work, the var is too big for compact! *\/ */
|
||||
/* if (nc_def_var_chunking(ncid, varid2, NC_COMPACT, NULL) != NC_EVARSIZE) ERR; */
|
||||
|
||||
/* /\* Define var3, a scalar. Scalars can also be compact. *\/ */
|
||||
/* if (nc_def_var(ncid, JAMIE, NC_INT, 0, NULL, &varid3)) ERR; */
|
||||
/* if (nc_def_var_chunking(ncid, varid3, NC_COMPACT, NULL)) ERR; */
|
||||
|
||||
/* /\* Write data. *\/ */
|
||||
/* if (nc_put_var_int(ncid, varid3, data)) ERR; */
|
||||
|
||||
/* /\* Close file. *\/ */
|
||||
/* if (nc_close(ncid)) ERR; */
|
||||
|
||||
/* /\* Open the file and check it. *\/ */
|
||||
/* { */
|
||||
/* int ndims, nvars; */
|
||||
/* int storage_in; */
|
||||
/* nc_set_log_level(3); */
|
||||
/* if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; */
|
||||
/* if (nc_inq(ncid, &ndims, &nvars, NULL, NULL)) ERR; */
|
||||
/* if (ndims != 2 || nvars != 3) ERR; */
|
||||
/* if (nc_inq_var_chunking(ncid, varid, &storage_in, NULL)) ERR; */
|
||||
/* if (storage_in != NC_COMPACT) ERR; */
|
||||
/* if (nc_inq_var_chunking(ncid, varid2, &storage_in, NULL)) ERR; */
|
||||
/* if (storage_in != NC_CONTIGUOUS) ERR; */
|
||||
/* if (nc_inq_var_chunking(ncid, varid3, &storage_in, NULL)) ERR; */
|
||||
/* /\* if (storage_in != NC_COMPACT) ERR; *\/ */
|
||||
/* if (nc_close(ncid)) ERR; */
|
||||
/* } */
|
||||
/* } */
|
||||
/* SUMMARIZE_ERR; */
|
||||
FINAL_RESULTS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user