mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-13 16:47:58 +08:00
Move H5Fset_dset_no_attrs_hint VOL operations to native.
Move minimzied object header tests from separate file to test/ohdr.c Some formatting changes.
This commit is contained in:
parent
5efc08a06d
commit
99bc714c4b
1
MANIFEST
1
MANIFEST
@ -1056,7 +1056,6 @@
|
||||
./test/none.h5
|
||||
./test/ntypes.c
|
||||
./test/ohdr.c
|
||||
./test/ohdr_min.c
|
||||
./test/objcopy.c
|
||||
./test/page_buffer.c
|
||||
./test/paged_nopersist.h5
|
||||
|
@ -1858,7 +1858,7 @@ H5Fget_dset_no_attrs_hint(hid_t file_id, hbool_t *minimize)
|
||||
if(NULL == vol_obj)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
|
||||
|
||||
#if 1
|
||||
#if 0
|
||||
if(H5VL_file_get(vol_obj, H5VL_FILE_GET_MIN_DSET_OHDR_FLAG, H5P_DATASET_XFER_DEFAULT, H5_REQUEST_NULL, minimize) < 0)
|
||||
HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file's dataset header minimization flag")
|
||||
#else
|
||||
|
24
src/H5Fint.c
24
src/H5Fint.c
@ -3713,3 +3713,27 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5F_get_file_id() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5F_set_min_dset_ohdr
|
||||
*
|
||||
* Purpose: Set the crt_dset_ohdr_flag field with a new value.
|
||||
*
|
||||
* Return: SUCCEED/FAIL
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5F_set_min_dset_ohdr(H5F_t *f, hbool_t minimize)
|
||||
{
|
||||
/* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(f);
|
||||
HDassert(f->shared);
|
||||
|
||||
f->shared->crt_dset_min_ohdr_flag = minimize;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* H5F_set_min_dset_ohdr() */
|
||||
|
||||
|
@ -331,7 +331,7 @@ typedef struct H5F_t H5F_t;
|
||||
#define H5F_POINT_OF_NO_RETURN(F) ((F)->shared->fs.point_of_no_return)
|
||||
#define H5F_FIRST_ALLOC_DEALLOC(F) ((F)->shared->first_alloc_dealloc)
|
||||
#define H5F_EOA_PRE_FSM_FSALLOC(F) ((F)->shared->eoa_pre_fsm_fsalloc)
|
||||
#define H5F_MIN_DSET_OHDR(F) ((F)->shared->crt_dset_min_ohdr_flag)
|
||||
#define H5F_GET_MIN_DSET_OHDR(F) ((F)->shared->crt_dset_min_ohdr_flag)
|
||||
#define H5F_SET_MIN_DSET_OHDR(F, V) ((F)->shared->crt_dset_min_ohdr_flag = (V))
|
||||
#else /* H5F_MODULE */
|
||||
#define H5F_LOW_BOUND(F) (H5F_get_low_bound(F))
|
||||
@ -390,7 +390,7 @@ typedef struct H5F_t H5F_t;
|
||||
#define H5F_POINT_OF_NO_RETURN(F) (H5F_get_point_of_no_return(F))
|
||||
#define H5F_FIRST_ALLOC_DEALLOC(F) (H5F_get_first_alloc_dealloc(F))
|
||||
#define H5F_EOA_PRE_FSM_FSALLOC(F) (H5F_get_eoa_pre_fsm_fsalloc(F))
|
||||
#define H5F_MIN_DSET_OHDR(F) (H5F_get_min_dset_ohdr(F))
|
||||
#define H5F_GET_MIN_DSET_OHDR(F) (H5F_get_min_dset_ohdr(F))
|
||||
#define H5F_SET_MIN_DSET_OHDR(F, V) (H5F_set_min_dset_ohdr((F), (V)))
|
||||
#endif /* H5F_MODULE */
|
||||
|
||||
|
@ -244,7 +244,8 @@ typedef enum H5VL_native_file_optional_t {
|
||||
H5VL_NATIVE_FILE_GET_EOA, /* H5Fget_eoa */
|
||||
H5VL_NATIVE_FILE_INCR_FILESIZE, /* H5Fincrement_filesize */
|
||||
H5VL_NATIVE_FILE_SET_LIBVER_BOUNDS, /* H5Fset_latest_format/libver_bounds */
|
||||
H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG /* H5Fset_dset_no_attrs_hint*/
|
||||
H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG, /* H5Fget_dset_no_attrs_hint */
|
||||
H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG /* H5Fset_dset_no_attrs_hint */
|
||||
} H5VL_native_file_optional_t;
|
||||
|
||||
|
||||
|
@ -1614,17 +1614,6 @@ H5VL__native_file_get(void *obj, H5VL_file_get_t get_type,
|
||||
break;
|
||||
}
|
||||
|
||||
/* H5Fget_dset_no_attrs_hint */
|
||||
case H5VL_FILE_GET_MIN_DSET_OHDR_FLAG:
|
||||
{
|
||||
hbool_t *minimize = va_arg(arguments, hbool_t*);
|
||||
f = (H5F_t*)obj;
|
||||
if(NULL == f)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
|
||||
*minimize = H5F_MIN_DSET_OHDR(f);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
HGOTO_ERROR(H5E_VOL, H5E_CANTGET, FAIL, "can't get this type of information")
|
||||
} /* end switch */
|
||||
@ -2123,6 +2112,18 @@ H5VL__native_file_optional(void *obj, hid_t H5_ATTR_UNUSED dxpl_id, void H5_ATTR
|
||||
}
|
||||
|
||||
/* H5Fget_dset_no_attrs_hint */
|
||||
case H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG:
|
||||
{
|
||||
hbool_t *minimize = va_arg(arguments, hbool_t *);
|
||||
*minimize = H5F_GET_MIN_DSET_OHDR(f);
|
||||
#if 0
|
||||
if(H5F_get_min_dset_ohdr(f, (hbool_t)minimize) < 0)
|
||||
HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "cannot set file's dataset object header minimization flag")
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
/* H5Fset_dset_no_attrs_hint */
|
||||
case H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG:
|
||||
{
|
||||
int minimize = va_arg(arguments, int);
|
||||
|
@ -115,8 +115,7 @@ typedef enum H5VL_file_get_t {
|
||||
H5VL_FILE_GET_INTENT, /* file intent */
|
||||
H5VL_FILE_GET_NAME, /* file name */
|
||||
H5VL_FILE_GET_OBJ_COUNT, /* object count in file */
|
||||
H5VL_FILE_GET_OBJ_IDS, /* object ids in file */
|
||||
H5VL_FILE_GET_MIN_DSET_OHDR_FLAG /* minimize dataset object headers? */
|
||||
H5VL_FILE_GET_OBJ_IDS /* object ids in file */
|
||||
} H5VL_file_get_t;
|
||||
|
||||
/* types for file SPECIFIC callback */
|
||||
|
@ -2719,9 +2719,6 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
|
||||
case H5VL_FILE_GET_OBJ_IDS:
|
||||
HDfprintf(out, "H5VL_FILE_GET_OBJ_IDS");
|
||||
break;
|
||||
case H5VL_FILE_GET_MIN_DSET_OHDR_FLAG:
|
||||
HDfprintf(out, "H5VL_FILE_GET_MIN_DSET_OHDR_FLAG");
|
||||
break;
|
||||
default:
|
||||
HDfprintf(out, "%ld", (long)get);
|
||||
break;
|
||||
|
@ -52,7 +52,7 @@ check_SCRIPTS = $(TEST_SCRIPT)
|
||||
# As an exception, long-running tests should occur earlier in the list.
|
||||
# This gives them more time to run when tests are executing in parallel.
|
||||
TEST_PROG= testhdf5 \
|
||||
cache cache_api cache_image cache_tagging lheap ohdr ohdr_mindset \
|
||||
cache cache_api cache_image cache_tagging lheap ohdr \
|
||||
stab gheap evict_on_close farray earray btree2 fheap \
|
||||
pool accum hyperslab istore bittests dt_arith page_buffer \
|
||||
dtypes dsets cmpd_dset filter_fail extend direct_chunk external efc \
|
||||
|
863
test/ohdr.c
863
test/ohdr.c
@ -36,9 +36,16 @@
|
||||
|
||||
const char *FILENAME[] = {
|
||||
"ohdr",
|
||||
"ohdr_min_a",
|
||||
"ohdr_min_b",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* used for object header size comparison */
|
||||
#define EQ 1
|
||||
#define LT 2
|
||||
#define GT 3
|
||||
|
||||
/* The tbogus.h5 is generated from gen_bogus.c in HDF5 'test' directory.
|
||||
* To get this data file, define H5O_ENABLE_BOGUS in src/H5Oprivate, rebuild
|
||||
* the library and simply compile gen_bogus.c with that HDF5 library and run it.
|
||||
@ -733,6 +740,847 @@ error:
|
||||
return FAIL;
|
||||
} /* test_unknown() */
|
||||
|
||||
/*
|
||||
* Set an attribute with the given information.
|
||||
* If the out parameter `attr_id` is negative, a new attribute will be
|
||||
* created with the given information. Else, it will attempt to update the
|
||||
* attribute with the new value.
|
||||
*
|
||||
* `dataspace_id` ignored if `attribute_id` >= 0
|
||||
*/
|
||||
static herr_t
|
||||
put_attribute(hid_t loc_id, const char *attrname, const void *attrvalue, hid_t datatype_id, hid_t dataspace_id, hid_t *attribute_id)
|
||||
{
|
||||
if((*attribute_id) < 0) {
|
||||
hid_t id = -1;
|
||||
id = H5Acreate(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(id < 0)
|
||||
return FAIL;
|
||||
*attribute_id = id;
|
||||
}
|
||||
return H5Awrite(*attribute_id, datatype_id, attrvalue);
|
||||
} /* put_attribute */
|
||||
|
||||
/*
|
||||
* Count the number of attributes attached to an object.
|
||||
* Returns negative in event of error.
|
||||
*/
|
||||
static int
|
||||
count_attributes(hid_t dset_id)
|
||||
{
|
||||
H5O_info_t info;
|
||||
|
||||
if(H5Oget_info(dset_id, &info, H5O_INFO_ALL) < 0)
|
||||
return -1;
|
||||
else
|
||||
return (int)info.num_attrs; /* should never exceed int bounds */
|
||||
} /* count_attributes */
|
||||
|
||||
/*
|
||||
* Get the total space used by the object header.
|
||||
* Used by oh_compare()
|
||||
* On success, stores size in `size_out` pointer.
|
||||
*/
|
||||
static herr_t
|
||||
_oh_getsize(hid_t did, hsize_t *size_out)
|
||||
{
|
||||
H5O_info_t info;
|
||||
if(FAIL == H5Oget_info2(did, &info, H5O_INFO_HDR))
|
||||
return FAIL;
|
||||
*size_out = info.hdr.space.total;
|
||||
return SUCCEED;
|
||||
} /* _oh_getsize */
|
||||
|
||||
/*
|
||||
* Compare the TOTAL space used by datasets' object headers.
|
||||
* Returns negative value if an error occurred,
|
||||
* else positive #defined indicator value EQ, LT, GT.
|
||||
*/
|
||||
static int
|
||||
oh_compare(hid_t did1, hid_t did2)
|
||||
{
|
||||
hsize_t space1 = 0;
|
||||
hsize_t space2 = 0;
|
||||
|
||||
if(FAIL == _oh_getsize(did1, &space1))
|
||||
return -1;
|
||||
if(FAIL == _oh_getsize(did2, &space2))
|
||||
return -2;
|
||||
|
||||
if(space1 < space2)
|
||||
return LT;
|
||||
else if(space1 > space2)
|
||||
return GT;
|
||||
else
|
||||
return EQ;
|
||||
} /* oh_compare() */
|
||||
|
||||
/*
|
||||
* Demonstrate attribute addition to datasets.
|
||||
* Conduct additions side-by-side with a standard datataset and one with
|
||||
* minimized dataset object headers.
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_attribute_addition(void)
|
||||
{
|
||||
hsize_t array_10[1] = {10}; /* dataspace extent */
|
||||
char buffer[10] = ""; /* to inspect string attribute */
|
||||
int a_out = 0;
|
||||
char filename[512] = "";
|
||||
hid_t int_type_id = -1;
|
||||
hid_t char_type_id = -1;
|
||||
hid_t dcpl_id = -1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dspace_scalar_id = -1;
|
||||
hid_t dset_id = -1;
|
||||
hid_t mindset_id = -1;
|
||||
hid_t attr_1_id = -1;
|
||||
hid_t attr_1a_id = -1;
|
||||
hid_t attr_2_id = -1;
|
||||
hid_t attr_2a_id = -1;
|
||||
hid_t attr_3_id = -1;
|
||||
hid_t attr_3a_id = -1;
|
||||
hid_t file_id = -1;
|
||||
herr_t ret;
|
||||
int count = 0;
|
||||
|
||||
TESTING("minimized dset object headers attribute additions")
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(FILENAME[1], H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, array_10, NULL);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dspace_scalar_id = H5Screate(H5S_SCALAR);
|
||||
if(dspace_scalar_id < 0) TEST_ERROR
|
||||
|
||||
char_type_id = H5Tcopy(H5T_NATIVE_CHAR);
|
||||
if(char_type_id < 0) TEST_ERROR
|
||||
|
||||
int_type_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(int_type_id < 0) TEST_ERROR
|
||||
|
||||
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
count = count_attributes(dset_id);
|
||||
} H5E_END_TRY;
|
||||
if(count != -1) TEST_ERROR
|
||||
|
||||
dset_id = H5Dcreate(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_id < 0) TEST_ERROR
|
||||
|
||||
mindset_id = H5Dcreate(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(mindset_id < 0) TEST_ERROR
|
||||
|
||||
/********************
|
||||
* TEST/DEMONSTRATE *
|
||||
********************/
|
||||
|
||||
/* -------------------
|
||||
* no attributes added
|
||||
*/
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 0) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 0) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add one attribute
|
||||
*/
|
||||
ret = put_attribute(dset_id, "PURPOSE", "DEMO", char_type_id, dspace_id, &attr_1_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
ret = put_attribute(mindset_id, "PURPOSE", "DEMO", char_type_id, dspace_id, &attr_1a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("DEMO", buffer)) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1a_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("DEMO", buffer)) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* modify one attribute
|
||||
*/
|
||||
|
||||
ret = put_attribute(dset_id, "PURPOSE", "REWRITE", char_type_id, -1, &attr_1_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
ret = put_attribute(mindset_id, "PURPOSE", "REWRITE", char_type_id, -1, &attr_1a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("REWRITE", buffer)) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1a_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("REWRITE", buffer)) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add second attribute
|
||||
*/
|
||||
|
||||
a_out = 5;
|
||||
ret = put_attribute(dset_id, "RANK", &a_out, int_type_id, dspace_scalar_id, &attr_2_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
a_out = 3;
|
||||
ret = put_attribute(mindset_id, "RANK", &a_out, int_type_id, dspace_scalar_id, &attr_2a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 2) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 2) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_2_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 5) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_2a_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 3) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add third attribute
|
||||
*/
|
||||
|
||||
a_out = -86;
|
||||
ret = put_attribute(dset_id, "FLAVOR", &a_out, int_type_id, dspace_scalar_id, &attr_3_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
a_out = 2185;
|
||||
ret = put_attribute(mindset_id, "FLAVOR", &a_out, int_type_id, dspace_scalar_id, &attr_3a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 3) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 3) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_3_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != -86) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_3a_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 2185) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Tclose(int_type_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(char_type_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_id) < 0) TEST_ERROR
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(mindset_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_1_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_1a_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_2_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_2a_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_3_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_3a_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error :
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Tclose(int_type_id);
|
||||
(void)H5Tclose(char_type_id);
|
||||
(void)H5Pclose(dcpl_id);
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Dclose(dset_id);
|
||||
(void)H5Dclose(mindset_id);
|
||||
(void)H5Aclose(attr_1_id);
|
||||
(void)H5Aclose(attr_1a_id);
|
||||
(void)H5Aclose(attr_2_id);
|
||||
(void)H5Aclose(attr_2a_id);
|
||||
(void)H5Aclose(attr_3_id);
|
||||
(void)H5Aclose(attr_3a_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_attribute_addition */
|
||||
|
||||
/*
|
||||
* Compare header sizes against when headers have been minimized.
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_size_comparisons(void)
|
||||
{
|
||||
hsize_t array_10[1] = {10}; /* dataspace extents */
|
||||
|
||||
/* IDs that are file-agnostic */
|
||||
hid_t dspace_id = -1;
|
||||
hid_t int_type_id = -1;
|
||||
hid_t dcpl_minimize = -1;
|
||||
hid_t dcpl_dontmin = -1;
|
||||
|
||||
/* IDs for non-minimzed file open */
|
||||
hid_t file_f_id = -1; /* lower 'f' for standard file setting */
|
||||
hid_t dset_f_x_id = -1; /* 'x' for default */
|
||||
hid_t dset_f_N_id = -1; /* 'N' for explcit non-minimized dset */
|
||||
hid_t dset_f_Y_id = -1; /* 'Y' for minimzed dset */
|
||||
|
||||
/* IDs for minimzed file open */
|
||||
hid_t file_F_id = -1; /* upper 'F' for minimzed file setting */
|
||||
hid_t dset_F_x_id = -1; /* 'x' for default */
|
||||
hid_t dset_F_N_id = -1; /* 'N' for explcit non-minimized dset */
|
||||
hid_t dset_F_Y_id = -1; /* 'Y' for minimzed dset */
|
||||
|
||||
char filename_a[512] = "";
|
||||
char filename_b[512] = "";
|
||||
|
||||
herr_t ret;
|
||||
|
||||
TESTING("minimized dset object headers size comparisons");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(FILENAME[1], H5P_DEFAULT, filename_a, sizeof(filename_a)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
if(h5_fixname(FILENAME[2], H5P_DEFAULT, filename_b, sizeof(filename_b)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_minimize = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_minimize < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_minimize, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_dontmin = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_dontmin < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_dontmin, FALSE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, array_10, NULL);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
int_type_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(int_type_id < 0) TEST_ERROR
|
||||
|
||||
file_f_id = H5Fcreate(filename_a, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_f_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_x_id = H5Dcreate(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_N_id = H5Dcreate(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_f_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_Y_id = H5Dcreate(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
file_F_id = H5Fcreate(filename_b, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_F_id < 0) TEST_ERROR
|
||||
ret = H5Fset_dset_no_attrs_hint(file_F_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dset_F_x_id = H5Dcreate(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_F_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_N_id = H5Dcreate(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_F_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_Y_id = H5Dcreate(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_F_Y_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
if(oh_compare(dset_f_x_id, dset_f_x_id) != EQ) TEST_ERROR /* identity */
|
||||
|
||||
if(oh_compare(dset_f_x_id, dset_f_N_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_f_x_id, dset_f_Y_id) != GT) TEST_ERROR
|
||||
if(oh_compare(dset_f_N_id, dset_f_Y_id) != GT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_F_x_id, dset_F_N_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_x_id, dset_F_Y_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_N_id, dset_F_Y_id) != EQ) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_F_x_id, dset_f_Y_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_x_id, dset_f_x_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(int_type_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_minimize) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_dontmin) < 0) TEST_ERROR
|
||||
|
||||
if(H5Fclose(file_f_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_x_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_N_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_Y_id) < 0) TEST_ERROR
|
||||
|
||||
if(H5Fclose(file_F_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_x_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_N_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_Y_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error :
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Pclose(dcpl_minimize);
|
||||
(void)H5Pclose(dcpl_dontmin);
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(int_type_id);
|
||||
|
||||
(void)H5Fclose(file_f_id);
|
||||
(void)H5Dclose(dset_f_x_id);
|
||||
(void)H5Dclose(dset_f_N_id);
|
||||
(void)H5Dclose(dset_f_Y_id);
|
||||
|
||||
(void)H5Fclose(file_F_id);
|
||||
(void)H5Dclose(dset_F_x_id);
|
||||
(void)H5Dclose(dset_F_N_id);
|
||||
(void)H5Dclose(dset_F_Y_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_size_comparisons */
|
||||
|
||||
/*
|
||||
* Test minimized dataset object header with filter/pipeline message
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_with_filter(void)
|
||||
{
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {1024}; /* extents of dataspace */
|
||||
const unsigned filter_values[] = {0}; /* TBD */
|
||||
const hsize_t chunk_dim[] = {32}; /* needed for filter */
|
||||
const int ndims = 1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dcpl_xZ_id = -1;
|
||||
hid_t dcpl_mx_id = -1;
|
||||
hid_t dcpl_mZ_id = -1;
|
||||
hid_t dset_xx_id = -1;
|
||||
hid_t dset_xZ_id = -1;
|
||||
hid_t dset_mx_id = -1;
|
||||
hid_t dset_mZ_id = -1;
|
||||
hid_t file_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
/* | default | minimize
|
||||
* ----------+---------+---------
|
||||
* no filter | xx | mx
|
||||
* ----------+---------+---------
|
||||
* filter | xZ | mZ
|
||||
*/
|
||||
|
||||
TESTING("minimized dset object headers with filter message");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(FILENAME[1], H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_mx_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mx_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mx_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_xZ_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_xZ_id < 0) TEST_ERROR
|
||||
ret = H5Pset_chunk(dcpl_xZ_id, ndims, chunk_dim);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_filter(dcpl_xZ_id, H5Z_FILTER_DEFLATE, H5Z_FLAG_OPTIONAL, 0, filter_values);
|
||||
if(ret < 0) TEST_ERROR
|
||||
dcpl_mZ_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mZ_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mZ_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_chunk(dcpl_mZ_id, ndims, chunk_dim);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_filter( dcpl_mZ_id, H5Z_FILTER_DEFLATE, H5Z_FLAG_OPTIONAL, 0, filter_values);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xZ_id = H5Dcreate(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
|
||||
if(dset_xZ_id < 0) TEST_ERROR
|
||||
|
||||
dset_mZ_id = H5Dcreate(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
|
||||
if(dset_mZ_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
if(oh_compare(dset_mx_id, dset_xx_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_xZ_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mZ_id, dset_mx_id) != GT) TEST_ERROR
|
||||
if(oh_compare(dset_mZ_id, dset_xZ_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_xZ_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mx_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mZ_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xZ_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mZ_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_xZ_id);
|
||||
(void)H5Pclose(dcpl_mx_id);
|
||||
(void)H5Pclose(dcpl_mZ_id);
|
||||
(void)H5Dclose(dset_xx_id);
|
||||
(void)H5Dclose(dset_xZ_id);
|
||||
(void)H5Dclose(dset_mx_id);
|
||||
(void)H5Dclose(dset_mZ_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_with_filter */
|
||||
|
||||
/*
|
||||
* Test minimized dataset object header and recording modification times.
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_modification_times(void)
|
||||
{
|
||||
/* test-local structure for parameterized testing
|
||||
*/
|
||||
struct testcase {
|
||||
unsigned oh_version;
|
||||
};
|
||||
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {128}; /* extents of dataspace */
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dcpl_xT_id = -1; /* Track modtime */
|
||||
hid_t dcpl_mx_id = -1; /* minimized */
|
||||
hid_t dcpl_mT_id = -1; /* minimized, Track */
|
||||
hid_t dcpl_mN_id = -1; /* minimized, do Not track */
|
||||
hid_t dset_xx_id = -1;
|
||||
hid_t dset_xT_id = -1;
|
||||
hid_t dset_mx_id = -1;
|
||||
hid_t dset_mT_id = -1;
|
||||
hid_t dset_mN_id = -1;
|
||||
hid_t file_id = -1;
|
||||
hid_t fapl_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
unsigned i = 0; /* for testcase loop */
|
||||
unsigned n_cases = 2; /* must match `cases` array size below */
|
||||
struct testcase cases[2] = {
|
||||
{ 1, }, /* version 1 object header */
|
||||
{ 2, }, /* version 2 object header */
|
||||
};
|
||||
|
||||
TESTING("minimized dset object headers with modification times");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(FILENAME[1], H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_mx_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mx_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mx_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_xT_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_xT_id < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_xT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_mT_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mT_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_mT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_mN_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mN_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mN_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_mN_id, FALSE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
for (i = 0; i < n_cases; i++) {
|
||||
|
||||
/* -------------- *
|
||||
* per-case setup *
|
||||
* -------------- */
|
||||
|
||||
fapl_id = H5P_DEFAULT;
|
||||
|
||||
if(cases[i].oh_version > 1) {
|
||||
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
|
||||
if(fapl_id < 0) TEST_ERROR
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_V18, H5F_LIBVER_V110);
|
||||
if(ret < 0) TEST_ERROR
|
||||
}
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xT_id = H5Dcreate(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
|
||||
if(dset_xT_id < 0) TEST_ERROR
|
||||
dset_mT_id = H5Dcreate(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
|
||||
if(dset_mT_id < 0) TEST_ERROR
|
||||
|
||||
dset_mN_id = H5Dcreate(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
|
||||
if(dset_mN_id < 0) TEST_ERROR
|
||||
|
||||
/* ----- *
|
||||
* TESTS *
|
||||
* ----- */
|
||||
|
||||
/* sanity check */
|
||||
if(oh_compare(dset_mx_id, dset_xx_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_xT_id) != LT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_xx_id, dset_xT_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_mT_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_mN_id, dset_mT_id) != LT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_mT_id, dset_xT_id) != LT) TEST_ERROR
|
||||
|
||||
/* ----------------- *
|
||||
* per-case teardown *
|
||||
* ----------------- */
|
||||
|
||||
if(H5Dclose(dset_xx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xT_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mT_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mN_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
if((fapl_id != H5P_DEFAULT) && (H5Pclose(fapl_id) < 0))
|
||||
TEST_ERROR
|
||||
|
||||
} /* for each version tested */
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_xT_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mx_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mT_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mN_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_xT_id);
|
||||
(void)H5Pclose(dcpl_mx_id);
|
||||
(void)H5Pclose(dcpl_mT_id);
|
||||
(void)H5Pclose(dcpl_mN_id);
|
||||
(void)H5Dclose(dset_xx_id);
|
||||
(void)H5Dclose(dset_xT_id);
|
||||
(void)H5Dclose(dset_mx_id);
|
||||
(void)H5Dclose(dset_mT_id);
|
||||
(void)H5Dclose(dset_mN_id);
|
||||
(void)H5Fclose(file_id);
|
||||
(void)H5Pclose(fapl_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_modification_times */
|
||||
|
||||
/*
|
||||
* Test minimized dataset object header with a fill value set.
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_fillvalue_backwards_compatability(void)
|
||||
{
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {64}; /* extents of dataspace */
|
||||
const int fill[1] = {343}; /* fill value of dataset */
|
||||
hid_t file_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dcpl_id = -1;
|
||||
hid_t fapl_id = -1;
|
||||
hid_t dset_0_id = -1;
|
||||
hid_t dset_1_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
TESTING("minimized dset object headers with fill values and different libver support");
|
||||
|
||||
if(h5_fixname(FILENAME[1], H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_id, TRUE);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
ret = H5Pset_fill_value(dcpl_id, dtype_id, fill);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
|
||||
if(fapl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_0_id = H5Dcreate(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_0_id < 0) TEST_ERROR
|
||||
|
||||
/* Close file and re-open with different libver bounds.
|
||||
* Dataset "fullrange" must also be closed for expected reopen behavior.
|
||||
*/
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR;
|
||||
if(H5Dclose(dset_0_id) < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_V18, H5F_LIBVER_LATEST);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_1_id = H5Dcreate(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_1_id < 0) TEST_ERROR
|
||||
|
||||
/* re-open "fullrange" dataset
|
||||
*/
|
||||
dset_0_id = H5Dopen2(file_id, "fullrange", H5P_DEFAULT);
|
||||
if(dset_0_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
/* dset not supporting pre-1.08 should be smaller? */
|
||||
if(oh_compare(dset_1_id, dset_0_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(fapl_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_0_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_1_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR;
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_id);
|
||||
(void)H5Pclose(fapl_id);
|
||||
(void)H5Dclose(dset_0_id);
|
||||
(void)H5Dclose(dset_1_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_fillvalue_backwards_compatability */
|
||||
|
||||
#define STR_EARLIEST "earliest"
|
||||
#define STR_V18 "v18"
|
||||
#define STR_LATEST "latest"
|
||||
@ -1030,6 +1878,21 @@ main(void)
|
||||
if(test_ohdr_cache(filename, fapl) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
if(test_minimized_oh_attribute_addition() < 0)
|
||||
TEST_ERROR
|
||||
|
||||
if(test_minimized_oh_size_comparisons() < 0)
|
||||
TEST_ERROR
|
||||
|
||||
if(test_minimized_oh_with_filter() < 0)
|
||||
TEST_ERROR
|
||||
|
||||
if(test_minimized_oh_modification_times() < 0)
|
||||
TEST_ERROR
|
||||
|
||||
if(test_minimized_oh_fillvalue_backwards_compatability() < 0)
|
||||
TEST_ERROR
|
||||
|
||||
} /* high */
|
||||
} /* low */
|
||||
|
||||
|
@ -1,944 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Tests to verify behavior of minimized dataset object headers.
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "hdf5.h"
|
||||
#include "h5test.h"
|
||||
|
||||
/******************
|
||||
* TESTING MACROS *
|
||||
******************/
|
||||
|
||||
/* basenames of test files created in this test suite */
|
||||
#define OHMIN_FILENAME_A "ohdr_min_a"
|
||||
#define OHMIN_FILENAME_B "ohdr_min_b"
|
||||
|
||||
/* used for object header size comparison */
|
||||
#define EQ 1
|
||||
#define LT 2
|
||||
#define GT 3
|
||||
|
||||
/*********************
|
||||
* UTILITY FUNCTIONS *
|
||||
*********************/
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Function: put_attribute()
|
||||
*
|
||||
* Purpose: Set an attribute with the given information.
|
||||
*
|
||||
* If the out parameter `attr_id` is negative, a new attribute will be
|
||||
* created with the given information. Else, it will attempt to update the
|
||||
* attribute with the new value.
|
||||
*
|
||||
* `dataspace_id` ignored if `attribute_id` >= 0
|
||||
*
|
||||
* Return: 0 (success) or -1 (failure)
|
||||
*
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
put_attribute(hid_t loc_id, const char *attrname, const void *attrvalue, hid_t datatype_id, hid_t dataspace_id, hid_t *attribute_id)
|
||||
{
|
||||
if((*attribute_id) < 0) {
|
||||
hid_t id = -1;
|
||||
id = H5Acreate(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(id < 0)
|
||||
return FAIL;
|
||||
*attribute_id = id;
|
||||
}
|
||||
return H5Awrite(*attribute_id, datatype_id, attrvalue);
|
||||
} /* put_attribute */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Function: count_attributes()
|
||||
*
|
||||
* Purpose: Count the number of attributes attached to an object.
|
||||
*
|
||||
* TODO: If the location id is that of a file, tries to count all the
|
||||
* attributes present in the file.
|
||||
*
|
||||
* Return: -1 if an error occurred, else the number of attributes.
|
||||
*
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
count_attributes(hid_t dset_id)
|
||||
{
|
||||
H5O_info_t info;
|
||||
|
||||
if(0 > H5Oget_info(dset_id, &info, H5O_INFO_ALL))
|
||||
return -1;
|
||||
else
|
||||
return (int)info.num_attrs; /* should never exceed int bounds */
|
||||
} /* count_attributes */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Function: _oh_getsize()
|
||||
*
|
||||
* Purpose: Get the total space used by the object header
|
||||
*
|
||||
*
|
||||
* Return: SUCCEED/FAIL. On success, stores size in `size_out` pointer.
|
||||
*
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
_oh_getsize(hid_t did, hsize_t *size_out)
|
||||
{
|
||||
H5O_info_t info;
|
||||
if(FAIL == H5Oget_info2(did, &info, H5O_INFO_HDR))
|
||||
return FAIL;
|
||||
*size_out = info.hdr.space.total;
|
||||
return SUCCEED;
|
||||
} /* _oh_getsize */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Function: oh_compare()
|
||||
*
|
||||
* Purpose: Compare the TOTAL space used by datasets' object headers.
|
||||
*
|
||||
*
|
||||
* Return: negative value if an error occurred,
|
||||
* else positive #defined indicator value EQ, LT, GT.
|
||||
*
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
oh_compare(hid_t did1, hid_t did2)
|
||||
{
|
||||
hsize_t space1 = 0;
|
||||
hsize_t space2 = 0;
|
||||
|
||||
if(FAIL == _oh_getsize(did1, &space1))
|
||||
return -1;
|
||||
if(FAIL == _oh_getsize(did2, &space2))
|
||||
return -2;
|
||||
|
||||
if(space1 < space2)
|
||||
return LT;
|
||||
else if(space1 > space2)
|
||||
return GT;
|
||||
else
|
||||
return EQ;
|
||||
}
|
||||
|
||||
/******************
|
||||
* TEST FUNCTIONS *
|
||||
******************/
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Demonstrate attribute addition to datasets.
|
||||
* Conduct additions side-by-side with a standard datataset and one with
|
||||
* minimized dataset object headers.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_attribute_addition(void)
|
||||
{
|
||||
hsize_t array_10[1] = {10}; /* dataspace extent */
|
||||
char buffer[10] = ""; /* to inspect string attribute */
|
||||
int a_out = 0;
|
||||
char filename[512] = "";
|
||||
hid_t int_type_id = -1;
|
||||
hid_t char_type_id = -1;
|
||||
hid_t dcpl_id = -1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dspace_scalar_id = -1;
|
||||
hid_t dset_id = -1;
|
||||
hid_t mindset_id = -1;
|
||||
hid_t attr_1_id = -1;
|
||||
hid_t attr_1a_id = -1;
|
||||
hid_t attr_2_id = -1;
|
||||
hid_t attr_2a_id = -1;
|
||||
hid_t attr_3_id = -1;
|
||||
hid_t attr_3a_id = -1;
|
||||
hid_t file_id = -1;
|
||||
herr_t ret;
|
||||
int count = 0;
|
||||
|
||||
TESTING("attribute additions to [un]minimized dataset")
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, array_10, NULL);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dspace_scalar_id = H5Screate(H5S_SCALAR);
|
||||
if(dspace_scalar_id < 0) TEST_ERROR
|
||||
|
||||
char_type_id = H5Tcopy(H5T_NATIVE_CHAR);
|
||||
if(char_type_id < 0) TEST_ERROR
|
||||
|
||||
int_type_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(int_type_id < 0) TEST_ERROR
|
||||
|
||||
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
count = count_attributes(dset_id);
|
||||
} H5E_END_TRY;
|
||||
if(count != -1) TEST_ERROR
|
||||
|
||||
dset_id = H5Dcreate(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_id < 0) TEST_ERROR
|
||||
|
||||
mindset_id = H5Dcreate(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(mindset_id < 0) TEST_ERROR
|
||||
|
||||
/********************
|
||||
* TEST/DEMONSTRATE *
|
||||
********************/
|
||||
|
||||
/* -------------------
|
||||
* no attributes added
|
||||
*/
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 0) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 0) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add one attribute
|
||||
*/
|
||||
ret = put_attribute(dset_id, "PURPOSE", "DEMO", char_type_id, dspace_id, &attr_1_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
ret = put_attribute(mindset_id, "PURPOSE", "DEMO", char_type_id, dspace_id, &attr_1a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("DEMO", buffer)) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1a_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("DEMO", buffer)) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* modify one attribute
|
||||
*/
|
||||
|
||||
ret = put_attribute(dset_id, "PURPOSE", "REWRITE", char_type_id, -1, &attr_1_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
ret = put_attribute(mindset_id, "PURPOSE", "REWRITE", char_type_id, -1, &attr_1a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 1) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("REWRITE", buffer)) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_1a_id, char_type_id, buffer);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(HDstrcmp("REWRITE", buffer)) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add second attribute
|
||||
*/
|
||||
|
||||
a_out = 5;
|
||||
ret = put_attribute(dset_id, "RANK", &a_out, int_type_id, dspace_scalar_id, &attr_2_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
a_out = 3;
|
||||
ret = put_attribute(mindset_id, "RANK", &a_out, int_type_id, dspace_scalar_id, &attr_2a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 2) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 2) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_2_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 5) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_2a_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 3) TEST_ERROR
|
||||
|
||||
/* -----------------
|
||||
* add third attribute
|
||||
*/
|
||||
|
||||
a_out = -86;
|
||||
ret = put_attribute(dset_id, "FLAVOR", &a_out, int_type_id, dspace_scalar_id, &attr_3_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
a_out = 2185;
|
||||
ret = put_attribute(mindset_id, "FLAVOR", &a_out, int_type_id, dspace_scalar_id, &attr_3a_id);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
count = count_attributes(dset_id);
|
||||
if(count != 3) TEST_ERROR
|
||||
count = count_attributes(mindset_id);
|
||||
if(count != 3) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_3_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != -86) TEST_ERROR
|
||||
|
||||
ret = H5Aread(attr_3a_id, int_type_id, &a_out);
|
||||
if(ret < 0) TEST_ERROR
|
||||
if(a_out != 2185) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Tclose(int_type_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(char_type_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_id) < 0) TEST_ERROR
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(mindset_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_1_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_1a_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_2_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_2a_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_3_id) < 0) TEST_ERROR
|
||||
if(H5Aclose(attr_3a_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error :
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Tclose(int_type_id);
|
||||
(void)H5Tclose(char_type_id);
|
||||
(void)H5Pclose(dcpl_id);
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Dclose(dset_id);
|
||||
(void)H5Dclose(mindset_id);
|
||||
(void)H5Aclose(attr_1_id);
|
||||
(void)H5Aclose(attr_1a_id);
|
||||
(void)H5Aclose(attr_2_id);
|
||||
(void)H5Aclose(attr_2a_id);
|
||||
(void)H5Aclose(attr_3_id);
|
||||
(void)H5Aclose(attr_3a_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_attribute_addition */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Compare header sizes against when headers have been minimized.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_size_comparisons(void)
|
||||
{
|
||||
hsize_t array_10[1] = {10}; /* dataspace extents */
|
||||
|
||||
/* IDs that are file-agnostic */
|
||||
hid_t dspace_id = -1;
|
||||
hid_t int_type_id = -1;
|
||||
hid_t dcpl_minimize = -1;
|
||||
hid_t dcpl_dontmin = -1;
|
||||
|
||||
/* IDs for non-minimzed file open */
|
||||
hid_t file_f_id = -1; /* lower 'f' for standard file setting */
|
||||
hid_t dset_f_x_id = -1; /* 'x' for default */
|
||||
hid_t dset_f_N_id = -1; /* 'N' for explcit non-minimized dset */
|
||||
hid_t dset_f_Y_id = -1; /* 'Y' for minimzed dset */
|
||||
|
||||
/* IDs for minimzed file open */
|
||||
hid_t file_F_id = -1; /* upper 'F' for minimzed file setting */
|
||||
hid_t dset_F_x_id = -1; /* 'x' for default */
|
||||
hid_t dset_F_N_id = -1; /* 'N' for explcit non-minimized dset */
|
||||
hid_t dset_F_Y_id = -1; /* 'Y' for minimzed dset */
|
||||
|
||||
char filename_a[512] = "";
|
||||
char filename_b[512] = "";
|
||||
|
||||
herr_t ret;
|
||||
|
||||
TESTING("default size comparisons");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename_a, sizeof(filename_a)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_B, H5P_DEFAULT, filename_b, sizeof(filename_b)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_minimize = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_minimize < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_minimize, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_dontmin = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_dontmin < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_dontmin, FALSE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, array_10, NULL);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
int_type_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(int_type_id < 0) TEST_ERROR
|
||||
|
||||
file_f_id = H5Fcreate(filename_a, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_f_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_x_id = H5Dcreate(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_N_id = H5Dcreate(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_f_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_Y_id = H5Dcreate(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
file_F_id = H5Fcreate(filename_b, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_F_id < 0) TEST_ERROR
|
||||
ret = H5Fset_dset_no_attrs_hint(file_F_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dset_F_x_id = H5Dcreate(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_F_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_N_id = H5Dcreate(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_F_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_Y_id = H5Dcreate(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_F_Y_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
if(oh_compare(dset_f_x_id, dset_f_x_id) != EQ) TEST_ERROR /* identity */
|
||||
|
||||
if(oh_compare(dset_f_x_id, dset_f_N_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_f_x_id, dset_f_Y_id) != GT) TEST_ERROR
|
||||
if(oh_compare(dset_f_N_id, dset_f_Y_id) != GT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_F_x_id, dset_F_N_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_x_id, dset_F_Y_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_N_id, dset_F_Y_id) != EQ) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_F_x_id, dset_f_Y_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_F_x_id, dset_f_x_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(int_type_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_minimize) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_dontmin) < 0) TEST_ERROR
|
||||
|
||||
if(H5Fclose(file_f_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_x_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_N_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_f_Y_id) < 0) TEST_ERROR
|
||||
|
||||
if(H5Fclose(file_F_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_x_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_N_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_F_Y_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error :
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Pclose(dcpl_minimize);
|
||||
(void)H5Pclose(dcpl_dontmin);
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(int_type_id);
|
||||
|
||||
(void)H5Fclose(file_f_id);
|
||||
(void)H5Dclose(dset_f_x_id);
|
||||
(void)H5Dclose(dset_f_N_id);
|
||||
(void)H5Dclose(dset_f_Y_id);
|
||||
|
||||
(void)H5Fclose(file_F_id);
|
||||
(void)H5Dclose(dset_F_x_id);
|
||||
(void)H5Dclose(dset_F_N_id);
|
||||
(void)H5Dclose(dset_F_Y_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_size_comparisons */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Test minimized dataset object header with filter/pipeline message
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_with_filter(void)
|
||||
{
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {1024}; /* extents of dataspace */
|
||||
const unsigned filter_values[] = {0}; /* TBD */
|
||||
const hsize_t chunk_dim[] = {32}; /* needed for filter */
|
||||
const int ndims = 1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dcpl_xZ_id = -1;
|
||||
hid_t dcpl_mx_id = -1;
|
||||
hid_t dcpl_mZ_id = -1;
|
||||
hid_t dset_xx_id = -1;
|
||||
hid_t dset_xZ_id = -1;
|
||||
hid_t dset_mx_id = -1;
|
||||
hid_t dset_mZ_id = -1;
|
||||
hid_t file_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
/* | default | minimize
|
||||
* ----------+---------+---------
|
||||
* no filter | xx | mx
|
||||
* ----------+---------+---------
|
||||
* filter | xZ | mZ
|
||||
*/
|
||||
|
||||
TESTING("with filter message");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_mx_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mx_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mx_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_xZ_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_xZ_id < 0) TEST_ERROR
|
||||
ret = H5Pset_chunk(dcpl_xZ_id, ndims, chunk_dim);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_filter(dcpl_xZ_id, H5Z_FILTER_DEFLATE, H5Z_FLAG_OPTIONAL, 0, filter_values);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_mZ_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mZ_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mZ_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_chunk(dcpl_mZ_id, ndims, chunk_dim);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_filter( dcpl_mZ_id, H5Z_FILTER_DEFLATE, H5Z_FLAG_OPTIONAL, 0, filter_values);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xZ_id = H5Dcreate(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
|
||||
if(dset_xZ_id < 0) TEST_ERROR
|
||||
|
||||
dset_mZ_id = H5Dcreate(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
|
||||
if(dset_mZ_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
if(oh_compare(dset_mx_id, dset_xx_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_xZ_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mZ_id, dset_mx_id) != GT) TEST_ERROR
|
||||
if(oh_compare(dset_mZ_id, dset_xZ_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_xZ_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mx_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mZ_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xZ_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mZ_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_xZ_id);
|
||||
(void)H5Pclose(dcpl_mx_id);
|
||||
(void)H5Pclose(dcpl_mZ_id);
|
||||
(void)H5Dclose(dset_xx_id);
|
||||
(void)H5Dclose(dset_xZ_id);
|
||||
(void)H5Dclose(dset_mx_id);
|
||||
(void)H5Dclose(dset_mZ_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_with_filter */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Test minimized dataset object header and recording modification times.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_modification_times(void)
|
||||
{
|
||||
/* test-local structure for parameterized testing
|
||||
*/
|
||||
struct testcase {
|
||||
unsigned oh_version;
|
||||
};
|
||||
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {128}; /* extents of dataspace */
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dcpl_xT_id = -1; /* Track modtime */
|
||||
hid_t dcpl_mx_id = -1; /* minimized */
|
||||
hid_t dcpl_mT_id = -1; /* minimized, Track */
|
||||
hid_t dcpl_mN_id = -1; /* minimized, do Not track */
|
||||
hid_t dset_xx_id = -1;
|
||||
hid_t dset_xT_id = -1;
|
||||
hid_t dset_mx_id = -1;
|
||||
hid_t dset_mT_id = -1;
|
||||
hid_t dset_mN_id = -1;
|
||||
hid_t file_id = -1;
|
||||
hid_t fapl_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
unsigned i = 0; /* for testcase loop */
|
||||
unsigned n_cases = 2; /* must match `cases` array size below */
|
||||
struct testcase cases[2] = {
|
||||
{ 1, }, /* version 1 object header */
|
||||
{ 2, }, /* version 2 object header */
|
||||
};
|
||||
|
||||
TESTING("with modification times");
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dcpl_mx_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mx_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mx_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_xT_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_xT_id < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_xT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_mT_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mT_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_mT_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dcpl_mN_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_mN_id < 0) TEST_ERROR
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_mN_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
ret = H5Pset_obj_track_times(dcpl_mN_id, FALSE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
for (i = 0; i < n_cases; i++) {
|
||||
|
||||
/* -------------- *
|
||||
* per-case setup *
|
||||
* -------------- */
|
||||
|
||||
fapl_id = H5P_DEFAULT;
|
||||
|
||||
if(cases[i].oh_version > 1) {
|
||||
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
|
||||
if(fapl_id < 0) TEST_ERROR
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_V18, H5F_LIBVER_V110);
|
||||
if(ret < 0) TEST_ERROR
|
||||
}
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xT_id = H5Dcreate(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
|
||||
if(dset_xT_id < 0) TEST_ERROR
|
||||
|
||||
dset_mT_id = H5Dcreate(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
|
||||
if(dset_mT_id < 0) TEST_ERROR
|
||||
|
||||
dset_mN_id = H5Dcreate(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
|
||||
if(dset_mN_id < 0) TEST_ERROR
|
||||
|
||||
/* ----- *
|
||||
* TESTS *
|
||||
* ----- */
|
||||
|
||||
/* sanity check */
|
||||
if(oh_compare(dset_mx_id, dset_xx_id) != LT) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_xT_id) != LT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_xx_id, dset_xT_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_mx_id, dset_mT_id) != EQ) TEST_ERROR
|
||||
if(oh_compare(dset_mN_id, dset_mT_id) != LT) TEST_ERROR
|
||||
|
||||
if(oh_compare(dset_mT_id, dset_xT_id) != LT) TEST_ERROR
|
||||
|
||||
/* ----------------- *
|
||||
* per-case teardown *
|
||||
* ----------------- */
|
||||
|
||||
if(H5Dclose(dset_xx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_xT_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mx_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mT_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_mN_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
if((fapl_id != H5P_DEFAULT) && (H5Pclose(fapl_id) < 0))
|
||||
TEST_ERROR
|
||||
|
||||
} /* for each version tested */
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_xT_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mx_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mT_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_mN_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_xT_id);
|
||||
(void)H5Pclose(dcpl_mx_id);
|
||||
(void)H5Pclose(dcpl_mT_id);
|
||||
(void)H5Pclose(dcpl_mN_id);
|
||||
(void)H5Dclose(dset_xx_id);
|
||||
(void)H5Dclose(dset_xT_id);
|
||||
(void)H5Dclose(dset_mx_id);
|
||||
(void)H5Dclose(dset_mT_id);
|
||||
(void)H5Dclose(dset_mN_id);
|
||||
(void)H5Fclose(file_id);
|
||||
(void)H5Pclose(fapl_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_modification_times */
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Test minimized dataset object header with a fill value set.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_minimized_oh_fillvalue_backwards_compatability(void)
|
||||
{
|
||||
char filename[512] = "";
|
||||
const hsize_t extents[1] = {64}; /* extents of dataspace */
|
||||
const int fill[1] = {343}; /* fill value of dataset */
|
||||
hid_t file_id = -1;
|
||||
hid_t dtype_id = -1;
|
||||
hid_t dspace_id = -1;
|
||||
hid_t dcpl_id = -1;
|
||||
hid_t fapl_id = -1;
|
||||
hid_t dset_0_id = -1;
|
||||
hid_t dset_1_id = -1;
|
||||
herr_t ret;
|
||||
|
||||
/*********
|
||||
* SETUP *
|
||||
*********/
|
||||
|
||||
TESTING("with fill values and different libver support");
|
||||
|
||||
if(h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)) == NULL)
|
||||
TEST_ERROR
|
||||
|
||||
dspace_id = H5Screate_simple(1, extents, extents);
|
||||
if(dspace_id < 0) TEST_ERROR
|
||||
|
||||
dtype_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
if(dtype_id < 0) TEST_ERROR
|
||||
|
||||
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if(dcpl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_dset_no_attrs_hint(dcpl_id, TRUE);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
ret = H5Pset_fill_value(dcpl_id, dtype_id, fill);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
|
||||
if(fapl_id < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_0_id = H5Dcreate(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_0_id < 0) TEST_ERROR
|
||||
|
||||
/* Close file and re-open with different libver bounds.
|
||||
* Dataset "fullrange" must also be closed for expected reopen behavior.
|
||||
*/
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR;
|
||||
if(H5Dclose(dset_0_id) < 0) TEST_ERROR
|
||||
|
||||
ret = H5Pset_libver_bounds(fapl_id, H5F_LIBVER_V18, H5F_LIBVER_LATEST);
|
||||
if(ret == FAIL) TEST_ERROR;
|
||||
|
||||
file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_1_id = H5Dcreate(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_1_id < 0) TEST_ERROR
|
||||
|
||||
/* re-open "fullrange" dataset
|
||||
*/
|
||||
dset_0_id = H5Dopen2(file_id, "fullrange", H5P_DEFAULT);
|
||||
if(dset_0_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
* TESTS *
|
||||
*********/
|
||||
|
||||
/* dset not supporting pre-1.08 should be smaller? */
|
||||
if(oh_compare(dset_1_id, dset_0_id) != LT) TEST_ERROR
|
||||
|
||||
/************
|
||||
* TEARDOWN *
|
||||
************/
|
||||
|
||||
if(H5Sclose(dspace_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(dtype_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(dcpl_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(fapl_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_0_id) < 0) TEST_ERROR
|
||||
if(H5Dclose(dset_1_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR;
|
||||
|
||||
PASSED()
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
(void)H5Sclose(dspace_id);
|
||||
(void)H5Tclose(dtype_id);
|
||||
(void)H5Pclose(dcpl_id);
|
||||
(void)H5Pclose(fapl_id);
|
||||
(void)H5Dclose(dset_0_id);
|
||||
(void)H5Dclose(dset_1_id);
|
||||
(void)H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return FAIL;
|
||||
} /* test_minimized_oh_fillvalue_backwards_compatability */
|
||||
|
||||
/********
|
||||
* MAIN *
|
||||
********/
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Main function is main. Runs tests.
|
||||
*
|
||||
* Returns number of failed tests.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int nerrors = 0;
|
||||
|
||||
HDprintf("Testing minimized dataset object headers.\n");
|
||||
|
||||
nerrors += test_minimized_oh_attribute_addition();
|
||||
nerrors += test_minimized_oh_size_comparisons();
|
||||
nerrors += test_minimized_oh_with_filter();
|
||||
nerrors += test_minimized_oh_modification_times();
|
||||
nerrors += test_minimized_oh_fillvalue_backwards_compatability();
|
||||
|
||||
if(nerrors < 0)
|
||||
HDprintf("***** %d MINIMIZED DATASET OHDR TEST%s FAILED! *****\n", nerrors, nerrors > 1 ? "S" : "");
|
||||
else
|
||||
HDprintf("All minimized dataset object header tests passed.\n");
|
||||
|
||||
return nerrors;
|
||||
} /* main */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user