mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-09 07:32:32 +08:00
Merge pull request #2472 in HDFFV/hdf5 from ~VCHOI/my_third_fork:bugfix/bounds_compat to develop
* commit '3f081c99376ad562dcb6bbf7d6c11216f682aca7': Modifications based on PR review feedback. Add two routines gen_ref_files() and gen_sel_files() to generate test files related to references and selections. These test files will be copied to 1.12, 1.10 and 1.8 for compatibility testing.
This commit is contained in:
commit
1e52e74ca8
@ -27,8 +27,61 @@
|
|||||||
* that they can or cannot read particular file format.
|
* that they can or cannot read particular file format.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add two routines gen_ref_files() and gen_sel_files() to generate the
|
||||||
|
* following test files:
|
||||||
|
*
|
||||||
|
* (1) gen_ref_files():
|
||||||
|
* bounds_ref_earliest_latest.h5
|
||||||
|
* bounds_ref_latest_latest.h5
|
||||||
|
* bounds_ref_v110_v110.h5
|
||||||
|
* bounds_ref_v18_v18.h5
|
||||||
|
* (1) gen_sel_files():
|
||||||
|
* bounds_sel_earliest_latest.h5
|
||||||
|
* bounds_sel_latest_latest.h5
|
||||||
|
* bounds_sel_v112_v112.h5
|
||||||
|
* bounds_sel_v110_v110.h5
|
||||||
|
*
|
||||||
|
* These test files will be copied to 1.12, 1.10 and 1.8 libraries for
|
||||||
|
* compatibility testing.
|
||||||
|
*/
|
||||||
#include "h5test.h"
|
#include "h5test.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defines for gen_ref_files()
|
||||||
|
*/
|
||||||
|
/* File names used for references */
|
||||||
|
#define FILENAME_REF_E_L "bounds_ref_earliest_latest.h5"
|
||||||
|
#define FILENAME_REF_L_L "bounds_ref_latest_latest.h5"
|
||||||
|
#define FILENAME_REF_V112_V112 "bounds_ref_v112_v112.h5"
|
||||||
|
#define FILENAME_REF_V110_V110 "bounds_ref_v110_v110.h5"
|
||||||
|
#define FILENAME_REF_V18_V18 "bounds_ref_v18_v18.h5"
|
||||||
|
|
||||||
|
/* Dataset names for references */
|
||||||
|
#define REVISED_REFS_DSET "Revised_refs_dset"
|
||||||
|
#define OLD_REF_OBJ_DSET "Old_ref_object_dset"
|
||||||
|
#define OLD_REF_REG_DSET "Old_ref_region_dset"
|
||||||
|
|
||||||
|
#define GROUP "Group"
|
||||||
|
#define ATTR "Attr"
|
||||||
|
#define DATASET "Dataset"
|
||||||
|
#define POWER32 4294967296 /* 2^32 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defines for gen_sel_files()
|
||||||
|
*/
|
||||||
|
/* File names for hyperslab/point selections */
|
||||||
|
#define FILENAME_SEL_E_L "bounds_sel_earliest_latest.h5"
|
||||||
|
#define FILENAME_SEL_L_L "bounds_sel_latest_latest.h5"
|
||||||
|
#define FILENAME_SEL_V112_V112 "bounds_sel_v112_v112.h5"
|
||||||
|
#define FILENAME_SEL_V110_V110 "bounds_sel_v110_v110.h5"
|
||||||
|
|
||||||
|
/* Dataset names for hyperslab/point selections */
|
||||||
|
#define SEL_EX_REG_DSET "Sel_ex32_reg_dset"
|
||||||
|
#define SEL_EX_IRR_DSET "Sel_ex32_irr_dset"
|
||||||
|
#define SEL_EX_PT_DSET "Sel_ex32_pt_dset"
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* gen_earliest_latest() creates file "bounds_earliest_latest.h5"
|
* gen_earliest_latest() creates file "bounds_earliest_latest.h5"
|
||||||
*
|
*
|
||||||
@ -594,6 +647,461 @@ error:
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
} /* gen_v18_v18 */
|
} /* gen_v18_v18 */
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* gen_sel_files() is used to create the following test files:
|
||||||
|
* bounds_sel_earliest_latest.h5
|
||||||
|
* bounds_sel_latest_latest.h5
|
||||||
|
* bounds_sel_v112_v112.h5
|
||||||
|
* bounds_sel_v110_v110.h5
|
||||||
|
*
|
||||||
|
* File contents for:
|
||||||
|
* --bounds_sel_earliest_latest.h5
|
||||||
|
* --bounds_sel_latest_latest.h5
|
||||||
|
* --bounds_sel_v112_v112.h5
|
||||||
|
* --each file contains 3 datasets with old region reference type
|
||||||
|
* (1) Sel_ex32_reg_dset:
|
||||||
|
* --regular hyperslab selection exceeding 32 bits integer limit
|
||||||
|
* (2) Sel_ex32_irr_dset:
|
||||||
|
* --irregular hyperslab selection exceeding 32 bits integer limit
|
||||||
|
* (3) Sel_ex32_pt_dset:
|
||||||
|
* --point selection exceeding 32 bits integer limit
|
||||||
|
*
|
||||||
|
* File contents for:
|
||||||
|
* --bounds_ref_v110_v110.h5
|
||||||
|
* (1) Sel_ex32_reg_dset: a dataset with old region reference type
|
||||||
|
* --regular hyperslab selection exceeding 32 bits integer limit
|
||||||
|
* (2) Sel_ex32_irr_dset: does not exist, cannot be created
|
||||||
|
* (3) Sel_ex32_pt_dset: does not exist, cannot be created
|
||||||
|
*
|
||||||
|
* Return: SUCCEED/FAIL
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
static herr_t gen_sel_files(const char *filename, H5F_libver_t low_bound, H5F_libver_t high_bound)
|
||||||
|
{
|
||||||
|
hid_t fid = H5I_INVALID_HID; /* File ID */
|
||||||
|
hid_t fapl = H5I_INVALID_HID; /* File access property list */
|
||||||
|
hid_t sid = H5I_INVALID_HID; /* Dataspace ID */
|
||||||
|
hid_t did = H5I_INVALID_HID; /* Dataset ID */
|
||||||
|
hsize_t numparticles = 8388608;
|
||||||
|
hsize_t total_particles = numparticles * 513;
|
||||||
|
hsize_t vdsdims[1] = {total_particles}; /* Dataset dimension size */
|
||||||
|
hsize_t coord[4]; /* Point selection */
|
||||||
|
hsize_t ref_start; /* Starting location of hyperslab */
|
||||||
|
hsize_t ref_stride; /* Stride of hyperslab */
|
||||||
|
hsize_t ref_count; /* Element count of hyperslab */
|
||||||
|
hsize_t ref_block; /* Block size of hyperslab */
|
||||||
|
hid_t ref_sid = H5I_INVALID_HID; /* Dataspace ID for the reference dataset */
|
||||||
|
hid_t ref_did = H5I_INVALID_HID; /* Dataset ID for the reference dataset */
|
||||||
|
hsize_t ref_dims[1] = {1}; /* Dimension for reference dataset */
|
||||||
|
hdset_reg_ref_t ref_wbuf[1]; /* Buffer for dataset region reference */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create test file, attribute, group and dataset
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Create the test file */
|
||||||
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create a dataset */
|
||||||
|
if((sid = H5Screate_simple(1, vdsdims, NULL)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if((did = H5Dcreate2(fid, DATASET, H5T_NATIVE_UINT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Sclose(sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Fclose(fid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create file access property list */
|
||||||
|
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Set to use the low/high bounds in fapl */
|
||||||
|
if(H5Pset_libver_bounds(fapl, low_bound, high_bound) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Open the file with fapl */
|
||||||
|
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Open the dataset */
|
||||||
|
if((did = H5Dopen2(fid, DATASET, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Get the dataset's dataspace */
|
||||||
|
if((sid = H5Dget_space(did)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create dataspace for the reference dataset */
|
||||||
|
ref_dims[0] = 1;
|
||||||
|
if((ref_sid = H5Screate_simple(1, ref_dims, NULL)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate regular hyperslab exceeding 32 */
|
||||||
|
ref_start = 0;
|
||||||
|
ref_count = 2;
|
||||||
|
ref_block = 4;
|
||||||
|
ref_stride = POWER32;
|
||||||
|
|
||||||
|
if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, &ref_start, &ref_stride, &ref_count, &ref_block) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Should succeed for v110 and above */
|
||||||
|
if(high_bound >= H5F_LIBVER_V110) {
|
||||||
|
|
||||||
|
/* Create the first reference */
|
||||||
|
if(H5Rcreate(&ref_wbuf[0], fid, DATASET, H5R_DATASET_REGION, sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create the reference datset */
|
||||||
|
if((ref_did = H5Dcreate2(fid, SEL_EX_REG_DSET, H5T_STD_REF_DSETREG, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write to the reference datset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, ref_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate irregular hyperslab exceeding 32 */
|
||||||
|
ref_start = 8;
|
||||||
|
ref_count = 5;
|
||||||
|
ref_block = 2;
|
||||||
|
ref_stride = POWER32;
|
||||||
|
if(H5Sselect_hyperslab(sid, H5S_SELECT_OR, &ref_start, &ref_stride, &ref_count, &ref_block) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Should succeed for v112 and above */
|
||||||
|
if(high_bound >= H5F_LIBVER_V112) {
|
||||||
|
|
||||||
|
/* Create the second reference */
|
||||||
|
if(H5Rcreate(&ref_wbuf[0], fid, DATASET, H5R_DATASET_REGION, sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create the reference datset */
|
||||||
|
if((ref_did = H5Dcreate2(fid, SEL_EX_IRR_DSET, H5T_STD_REF_DSETREG, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write to the reference datset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, ref_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate point selection exceeding 32 */
|
||||||
|
coord[0] = 5;
|
||||||
|
coord[1] = 15;
|
||||||
|
coord[2] = POWER32 + 1;
|
||||||
|
coord[3] = 19;
|
||||||
|
|
||||||
|
if(H5Sselect_elements(sid, H5S_SELECT_SET, (size_t)4, coord) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Should succeed for v112 and above */
|
||||||
|
if(high_bound >= H5F_LIBVER_V112) {
|
||||||
|
|
||||||
|
/* Create the third reference */
|
||||||
|
if(H5Rcreate(&ref_wbuf[0], fid, DATASET, H5R_DATASET_REGION, sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create the reference datset */
|
||||||
|
if((ref_did = H5Dcreate2(fid, SEL_EX_PT_DSET, H5T_STD_REF_DSETREG, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write to the reference datset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, ref_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Closing */
|
||||||
|
if(H5Sclose(ref_sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Sclose(sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Fclose(fid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
return SUCCEED;
|
||||||
|
|
||||||
|
error:
|
||||||
|
H5E_BEGIN_TRY {
|
||||||
|
H5Dclose(ref_did);
|
||||||
|
H5Sclose(ref_sid);
|
||||||
|
H5Dclose(did);
|
||||||
|
H5Sclose(sid);
|
||||||
|
H5Pclose(fapl);
|
||||||
|
H5Fclose(fid);
|
||||||
|
} H5E_END_TRY;
|
||||||
|
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
|
} /* gen_sel_files() */
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* gen_ref_files() is used to create the following test files:
|
||||||
|
* bounds_ref_earliest_latest.h5
|
||||||
|
* bounds_ref_latest_latest.h5
|
||||||
|
* bounds_ref_v110_v110.h5
|
||||||
|
* bounds_ref_v18_v18.h5
|
||||||
|
*
|
||||||
|
* File contents for:
|
||||||
|
* --bounds_ref_earliest_latest.h5
|
||||||
|
* --bounds_ref_latest_latest.h5
|
||||||
|
* --bounds_ref_v112_v112.h5
|
||||||
|
* (1) Revised_refs_dset: a dataset created with the revised reference type
|
||||||
|
* --attribute reference
|
||||||
|
* --object reference
|
||||||
|
* --dataset region reference
|
||||||
|
* (2) Old_ref_object_dset:
|
||||||
|
* --a dataset created with the old object reference type
|
||||||
|
* (3) Old_ref_region_dset:
|
||||||
|
* --a dataset created with the old dataset region reference type
|
||||||
|
*
|
||||||
|
* File contents for:
|
||||||
|
* --bounds_ref_v110_v110.h5
|
||||||
|
* --bounds_ref_v18_v18.h5
|
||||||
|
* (1) Old_ref_object_dset:
|
||||||
|
* --a dataset created with the old object reference type
|
||||||
|
* (2) Old_ref_region_dset:
|
||||||
|
* --a dataset created with the old dataset region reference type
|
||||||
|
*
|
||||||
|
* Return: SUCCEED/FAIL
|
||||||
|
*
|
||||||
|
***********************************************************************/
|
||||||
|
static herr_t gen_ref_files(const char *filename, H5F_libver_t low_bound, H5F_libver_t high_bound)
|
||||||
|
{
|
||||||
|
hid_t fid = H5I_INVALID_HID; /* File ID */
|
||||||
|
hid_t gid = H5I_INVALID_HID; /* Group ID */
|
||||||
|
hid_t fapl = H5I_INVALID_HID; /* File access property list */
|
||||||
|
hid_t aid = H5I_INVALID_HID; /* Attribute ID */
|
||||||
|
hid_t asid = H5I_INVALID_HID; /* Dataspace ID for attribute */
|
||||||
|
hid_t sid = H5I_INVALID_HID; /* Dataspace ID */
|
||||||
|
hid_t did = H5I_INVALID_HID; /* Dataset ID */
|
||||||
|
hsize_t dims[1] = {100}; /* Dimension size */
|
||||||
|
unsigned *dwbuf = NULL; /* Buffer for writing data */
|
||||||
|
hid_t ref_sid = H5I_INVALID_HID; /* Dataspace ID for the reference dataset */
|
||||||
|
hid_t ref_did = H5I_INVALID_HID; /* Dataset ID for the reference dataset */
|
||||||
|
hsize_t rev_ref_dims[1] = {3}; /* Dimension size for the reference dataset */
|
||||||
|
H5R_ref_t rev_ref_wbuf[3]; /* Buffer for storing the revised references */
|
||||||
|
hobj_ref_t old_ref_obj_wbuf[1]; /* Buffer for storing the old reference object */
|
||||||
|
hdset_reg_ref_t old_ref_reg_wbuf[1]; /* Buffer for storing the old dataset region reference */
|
||||||
|
hsize_t old_ref_dims[] = {1}; /* Dimension size for the reference dataset */
|
||||||
|
hsize_t start[1]; /* Starting location of hyperslab */
|
||||||
|
hsize_t stride[1]; /* Stride of hyperslab */
|
||||||
|
hsize_t count[1]; /* Element count of hyperslab */
|
||||||
|
hsize_t block[1]; /* Block size of hyperslab */
|
||||||
|
unsigned i; /* Local index variable */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create test file, attribute, group and dataset
|
||||||
|
*/
|
||||||
|
|
||||||
|
if((dwbuf = HDcalloc(sizeof(unsigned), 100)) == NULL)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create the test file */
|
||||||
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create dataspace for the attribute */
|
||||||
|
if((asid = H5Screate(H5S_SCALAR)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create an attribute to the root group */
|
||||||
|
if((aid = H5Acreate2(fid, ATTR, H5T_NATIVE_UINT, asid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create a group */
|
||||||
|
if((gid = H5Gcreate2(fid, GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create dataspace for the dataset */
|
||||||
|
if((sid = H5Screate_simple(1, dims, NULL)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create a dataset in the group */
|
||||||
|
if((did = H5Dcreate2(gid, DATASET, H5T_NATIVE_UINT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Initialize data to write */
|
||||||
|
for(i = 0; i < 100; i++)
|
||||||
|
dwbuf[i] = i * 3;
|
||||||
|
|
||||||
|
/* Write data to disk */
|
||||||
|
if(H5Dwrite(did, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dwbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Closing */
|
||||||
|
if(H5Dclose(did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Sclose(sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Sclose(asid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Aclose(aid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Gclose(gid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Fclose(fid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(dwbuf) {
|
||||||
|
HDfree(dwbuf);
|
||||||
|
dwbuf = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create file access property list */
|
||||||
|
if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) TEST_ERROR;
|
||||||
|
|
||||||
|
/* Set to use the low/high bounds in fapl */
|
||||||
|
if(H5Pset_libver_bounds(fapl, low_bound, high_bound) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Open the file with fapl */
|
||||||
|
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) <0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create the revised and old references in the file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Retrieve dataspace for the existing dataset */
|
||||||
|
if((did = H5Dopen2(fid, "/Group/Dataset", H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if((sid = H5Dget_space(did)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Select 15 2x1 hyperslabs for the dataset region reference */
|
||||||
|
start[0] = 2;
|
||||||
|
stride[0] = 5;
|
||||||
|
count[0] = 15;
|
||||||
|
block[0] = 2;
|
||||||
|
if(H5Sselect_hyperslab(sid, H5S_SELECT_SET, start, stride, count, block) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
|
||||||
|
if(high_bound >= H5F_LIBVER_V112) {
|
||||||
|
|
||||||
|
/* Create dataspace for the reference dataset */
|
||||||
|
if((ref_sid = H5Screate_simple(1, rev_ref_dims, NULL)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create a dataset with the revised reference type */
|
||||||
|
ref_did = H5Dcreate2(fid, REVISED_REFS_DSET, H5T_STD_REF, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||||
|
|
||||||
|
/* Store the reference to "Attr" */
|
||||||
|
if(H5Rcreate_attr(fid, "/", "Attr", H5P_DEFAULT, &rev_ref_wbuf[0]) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Store the reference to /Group */
|
||||||
|
if(H5Rcreate_object(fid, "/Group", H5P_DEFAULT, &rev_ref_wbuf[1]) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Store the dataset region referenced to /Group/Dataset */
|
||||||
|
if(H5Rcreate_region(fid, "/Group/Dataset", sid, H5P_DEFAULT, &rev_ref_wbuf[2]) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write to the reference dataset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF, H5S_ALL, H5S_ALL, H5P_DEFAULT, rev_ref_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Destroy references */
|
||||||
|
for(i = 0; i < 3; i++)
|
||||||
|
if(H5Rdestroy(&rev_ref_wbuf[i]) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Closing */
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Sclose(ref_sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create dataspace for the reference dataset */
|
||||||
|
if((ref_sid = H5Screate_simple(1, old_ref_dims, NULL)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create a dataset with the old object reference type */
|
||||||
|
if((ref_did = H5Dcreate2(fid, OLD_REF_OBJ_DSET, H5T_STD_REF_OBJ, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create reference to /Group */
|
||||||
|
if(H5Rcreate(&old_ref_obj_wbuf[0], fid, "/Group", H5R_OBJECT, -1) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write to the reference dataset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, old_ref_obj_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Close the dataset */
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
|
||||||
|
/* Create a dataset with the old dataset region reference type */
|
||||||
|
if((ref_did = H5Dcreate2(fid, OLD_REF_REG_DSET, H5T_STD_REF_DSETREG, ref_sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Create dataset region reference */
|
||||||
|
if(H5Rcreate(&old_ref_reg_wbuf[0], fid, "/Group/Dataset", H5R_DATASET_REGION, sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Write selection to the reference dataset */
|
||||||
|
if(H5Dwrite(ref_did, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, old_ref_reg_wbuf) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Closing */
|
||||||
|
if(H5Dclose(ref_did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Sclose(ref_sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
if(H5Dclose(did) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Sclose(sid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Pclose(fapl) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
if(H5Fclose(fid) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
return SUCCEED;
|
||||||
|
|
||||||
|
error:
|
||||||
|
H5E_BEGIN_TRY {
|
||||||
|
H5Dclose(ref_did);
|
||||||
|
H5Sclose(ref_sid);
|
||||||
|
H5Dclose(did);
|
||||||
|
H5Sclose(sid);
|
||||||
|
H5Pclose(fapl);
|
||||||
|
H5Fclose(fid);
|
||||||
|
HDfree(dwbuf);
|
||||||
|
} H5E_END_TRY;
|
||||||
|
|
||||||
|
return FAIL;
|
||||||
|
|
||||||
|
} /* gen_ref_files() */
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/* Generate file bounds_earliest_latest.h5 */
|
/* Generate file bounds_earliest_latest.h5 */
|
||||||
@ -611,6 +1119,51 @@ int main(void)
|
|||||||
/* Generate file bounds_v18_v18.h5 */
|
/* Generate file bounds_v18_v18.h5 */
|
||||||
if (gen_v18_v18() < 0) TEST_ERROR;
|
if (gen_v18_v18() < 0) TEST_ERROR;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Files generated via gen_ref_files()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Generate bounds_ref_earliest_latest.h5 */
|
||||||
|
if(gen_ref_files(FILENAME_REF_E_L, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_ref_latest_latest.h5 */
|
||||||
|
if(gen_ref_files(FILENAME_REF_L_L, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_ref_v112_v112.h5 */
|
||||||
|
if(gen_ref_files(FILENAME_REF_V112_V112, H5F_LIBVER_V112, H5F_LIBVER_V112) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_ref_v110_v110.h5 */
|
||||||
|
if(gen_ref_files(FILENAME_REF_V110_V110, H5F_LIBVER_V110, H5F_LIBVER_V110) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_ref_v18_v18.h5 */
|
||||||
|
if(gen_ref_files(FILENAME_REF_V18_V18, H5F_LIBVER_V18, H5F_LIBVER_V18) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Files generated via gen_sel_files()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Generate bounds_sel_earliest_latest.h5 */
|
||||||
|
if(gen_sel_files(FILENAME_SEL_E_L, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_sel_latest_latest.h5 */
|
||||||
|
if(gen_sel_files(FILENAME_SEL_L_L, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_sel_v112_v112.h5 */
|
||||||
|
if(gen_sel_files(FILENAME_SEL_V112_V112, H5F_LIBVER_V112, H5F_LIBVER_V112) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
|
/* Generate bounds_sel_v110_v110.h5 */
|
||||||
|
if(gen_sel_files(FILENAME_SEL_V110_V110, H5F_LIBVER_V110, H5F_LIBVER_V110) < 0)
|
||||||
|
TEST_ERROR;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
Loading…
Reference in New Issue
Block a user