diff options
author | James Laird <jlaird@hdfgroup.org> | 2007-01-16 17:19:11 (GMT) |
---|---|---|
committer | James Laird <jlaird@hdfgroup.org> | 2007-01-16 17:19:11 (GMT) |
commit | 8fa9daa17424a76c715f63afc35cfdcd0c3add32 (patch) | |
tree | bd278f590332535b85d6b3c37d936809717aa171 /test | |
parent | 8e88c834ffaf3904105ff585087a09a69ed1a56f (diff) | |
download | hdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.zip hdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.tar.gz hdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.tar.bz2 |
[svn-r13143] Refactoring.
Added can_share callback for OH messages. This determines whether the
message is allowed to be shared in the heap (committed and immutable datatypes
can't be).
Fixed a bug in the dense attribute storage that tried to open the shared message
heap when it hadn't been created yet.
Made the test to extend shared dataspace messages a bit more robust.
Refactored the code the searches a shared message list index to be a little
more efficient.
A few other minor changes.
Tested on smirom, kagiso, Windows, and juniper.
Diffstat (limited to 'test')
-rw-r--r-- | test/tsohm.c | 149 |
1 files changed, 118 insertions, 31 deletions
diff --git a/test/tsohm.c b/test/tsohm.c index 4fe2d8b..e1a976c 100644 --- a/test/tsohm.c +++ b/test/tsohm.c @@ -142,6 +142,9 @@ typedef struct size2_helper_struct { #define HALF_DELETE_NUM_MESGS 3 #define DELETE_DIMS {1,1,1,1,1,1,1} +/* Number of dimensions in extend_dset test */ +#define EXTEND_NDIMS 2 + /* Helper function prototypes */ static hid_t make_dtype_1(void); static hid_t make_dtype_2(void); @@ -3053,13 +3056,17 @@ test_sohm_extlink(void) static void test_sohm_extend_dset_helper(hid_t fcpl_id) { hid_t file_id = -1; - hid_t space_id = -1; + hid_t orig_space_id = -1; + hid_t space1_id, space2_id; hid_t dcpl_id = -1; - hid_t dset_id = -1; + hid_t dset1_id, dset2_id; hsize_t dims1[] = {1, 2}; - hsize_t max_dims1[] = {H5S_UNLIMITED, 2}; + hsize_t max_dims[] = {H5S_UNLIMITED, 2}; hsize_t dims2[] = {5, 2}; + hsize_t out_dims[2]; + hsize_t out_maxdims[2]; long data[10] = {0}; + int x; herr_t ret; /* Create file */ @@ -3073,62 +3080,142 @@ static void test_sohm_extend_dset_helper(hid_t fcpl_id) CHECK_I(ret, "H5Pset_chunk"); /* Create a dataspace and a dataset*/ - space_id = H5Screate_simple(2, dims1, max_dims1); - CHECK_I(space_id, "H5Screate_simple"); - dset_id = H5Dcreate(file_id, "dataset", H5T_NATIVE_LONG, space_id, dcpl_id); - CHECK_I(dset_id, "H5Dcreate"); + orig_space_id = H5Screate_simple(EXTEND_NDIMS, dims1, max_dims); + CHECK_I(orig_space_id, "H5Screate_simple"); + dset1_id = H5Dcreate(file_id, "dataset", H5T_NATIVE_LONG, orig_space_id, dcpl_id); + CHECK_I(dset1_id, "H5Dcreate"); + + /* Create another dataset with the same dataspace */ + dset2_id = H5Dcreate(file_id, "dataset2", H5T_NATIVE_LONG, orig_space_id, dcpl_id); + CHECK_I(dset2_id, "H5Dcreate"); + + /* Extend the first dataset */ + ret = H5Dextend(dset1_id, dims2); + CHECK_I(ret, "H5Dextend"); + + /* Get the dataspaces from the datasets */ + space1_id = H5Dget_space(dset1_id); + CHECK_I(space1_id, "H5Dget_space"); + space2_id = H5Dget_space(dset2_id); + CHECK_I(space2_id, "H5Dget_space"); + + /* Verify the dataspaces */ + ret = H5Sget_simple_extent_dims(space1_id, out_dims, out_maxdims); + CHECK_I(ret, "H5Sget_simple_extent_dims"); + + for(x=0; x<EXTEND_NDIMS; ++x) { + VERIFY(out_dims[x], dims2[x], "H5Sget_simple_extent_dims"); + VERIFY(out_maxdims[x], max_dims[x], "H5Sget_simple_extent_dims"); + } - /* Extend the dataset */ - ret = H5Dextend(dset_id, dims2); - CHECK_I(ret, "H5Dclose"); + ret = H5Sget_simple_extent_dims(space2_id, out_dims, out_maxdims); + CHECK_I(ret, "H5Sget_simple_extent_dims"); - /* Write some garbage to the dataset */ - ret = H5Dwrite(dset_id, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); - CHECK_I(ret, "H5Dwrite"); + for(x=0; x<EXTEND_NDIMS; ++x) { + VERIFY(out_dims[x], dims1[x], "H5Sget_simple_extent_dims"); + VERIFY(out_maxdims[x], max_dims[x], "H5Sget_simple_extent_dims"); + } - /* Close the dataset and file */ - ret = H5Dclose(dset_id); + /* Close both dataspaces */ + ret = H5Sclose(space1_id); + CHECK_I(ret, "H5Sclose"); + ret = H5Sclose(space2_id); + CHECK_I(ret, "H5Sclose"); + + /* Close the datasets and file */ + ret = H5Dclose(dset1_id); + CHECK_I(ret, "H5Dclose"); + ret = H5Dclose(dset2_id); CHECK_I(ret, "H5Dclose"); ret = H5Fclose(file_id); CHECK_I(ret, "H5Fclose"); - /* Create a new dataset in a new file, but this time close it before - * extending it to make sure that the old dataspace is written to + /* Create new datasets in a new file, but this time close them before + * extending to make sure that the old dataspaces are written to * disk. */ file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, fcpl_id, H5P_DEFAULT); CHECK_I(file_id, "H5Fcreate"); - dset_id = H5Dcreate(file_id, "dataset", H5T_NATIVE_LONG, space_id, dcpl_id); - CHECK_I(dset_id, "H5Dcreate"); + dset1_id = H5Dcreate(file_id, "dataset", H5T_NATIVE_LONG, orig_space_id, dcpl_id); + CHECK_I(dset1_id, "H5Dcreate"); + dset2_id = H5Dcreate(file_id, "dataset2", H5T_NATIVE_LONG, orig_space_id, dcpl_id); + CHECK_I(dset2_id, "H5Dcreate"); - /* Close and re-open file and dataset */ - ret = H5Dclose(dset_id); + /* Close and re-open file and datasets */ + ret = H5Dclose(dset1_id); + CHECK_I(ret, "H5Dclose"); + ret = H5Dclose(dset2_id); CHECK_I(ret, "H5Dclose"); ret = H5Fclose(file_id); CHECK_I(ret, "H5Fclose"); file_id = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT); CHECK_I(file_id, "H5Fopen"); - dset_id = H5Dopen(file_id, "dataset"); - CHECK_I(dset_id, "H5Dopen"); + dset1_id = H5Dopen(file_id, "dataset"); + CHECK_I(dset1_id, "H5Dopen"); + dset2_id = H5Dopen(file_id, "dataset2"); + CHECK_I(dset2_id, "H5Dopen"); + + /* Extend the first dataset */ + ret = H5Dextend(dset1_id, dims2); + CHECK_I(ret, "H5Dextend"); - /* Extend the dataset */ - ret = H5Dextend(dset_id, dims2); + /* Close and re-open file and datasets */ + ret = H5Dclose(dset1_id); CHECK_I(ret, "H5Dclose"); + ret = H5Dclose(dset2_id); + CHECK_I(ret, "H5Dclose"); + ret = H5Fclose(file_id); + CHECK_I(ret, "H5Fclose"); - /* Write some garbage to the dataset */ - ret = H5Dwrite(dset_id, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data); - CHECK_I(ret, "H5Dwrite"); + file_id = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT); + CHECK_I(file_id, "H5Fopen"); + dset1_id = H5Dopen(file_id, "dataset"); + CHECK_I(dset1_id, "H5Dopen"); + dset2_id = H5Dopen(file_id, "dataset2"); + CHECK_I(dset2_id, "H5Dopen"); - /* Close the dataset and file */ - ret = H5Dclose(dset_id); + + /* Get the dataspaces from the datasets */ + space1_id = H5Dget_space(dset1_id); + CHECK_I(space1_id, "H5Dget_space"); + space2_id = H5Dget_space(dset2_id); + CHECK_I(space2_id, "H5Dget_space"); + + /* Verify the dataspaces */ + ret = H5Sget_simple_extent_dims(space1_id, out_dims, out_maxdims); + CHECK_I(ret, "H5Sget_simple_extent_dims"); + + for(x=0; x<EXTEND_NDIMS; ++x) { + VERIFY(out_dims[x], dims2[x], "H5Sget_simple_extent_dims"); + VERIFY(out_maxdims[x], max_dims[x], "H5Sget_simple_extent_dims"); + } + + ret = H5Sget_simple_extent_dims(space2_id, out_dims, out_maxdims); + CHECK_I(ret, "H5Sget_simple_extent_dims"); + + for(x=0; x<EXTEND_NDIMS; ++x) { + VERIFY(out_dims[x], dims1[x], "H5Sget_simple_extent_dims"); + VERIFY(out_maxdims[x], max_dims[x], "H5Sget_simple_extent_dims"); + } + + /* Close both dataspaces */ + ret = H5Sclose(space1_id); + CHECK_I(ret, "H5Sclose"); + ret = H5Sclose(space2_id); + CHECK_I(ret, "H5Sclose"); + + /* Close the datasets and file */ + ret = H5Dclose(dset1_id); + CHECK_I(ret, "H5Dclose"); + ret = H5Dclose(dset2_id); CHECK_I(ret, "H5Dclose"); ret = H5Fclose(file_id); CHECK_I(ret, "H5Fclose"); /* Cleanup */ - ret = H5Sclose(space_id); + ret = H5Sclose(orig_space_id); CHECK_I(ret, "H5Sclose"); ret = H5Pclose(dcpl_id); CHECK_I(ret, "H5Pclose"); |