From 32bf83f1cf00df5079d8a5e2f16422a28d1fa53d Mon Sep 17 00:00:00 2001 From: Neil Fortner Date: Fri, 21 Aug 2015 14:57:29 -0500 Subject: [svn-r27546] Add tests for H5O__dset_bh_info (H5Oget_info) and unlimited selections in a region reference. Tested: ummon --- src/H5Doh.c | 4 +--- test/trefer.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ test/tselect.c | 2 -- test/vds.c | 35 +++++++++++++++++++++++++++-------- 4 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/H5Doh.c b/src/H5Doh.c index 388f4cf..2e52102 100644 --- a/src/H5Doh.c +++ b/src/H5Doh.c @@ -401,9 +401,7 @@ H5O__dset_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info) else if(layout.type == H5D_VIRTUAL && (layout.storage.u.virt.serial_list_hobjid.addr != HADDR_UNDEF)) { size_t virtual_heap_size; - /* Need to write a test for this. No assert here for now because the - * code is reached by h5_verify_cached_stabs() but it is not properly - * tested. VDSINC */ + /* Get size of global heap object for virtual dataset */ if(H5HG_get_obj_size(f, dxpl_id, &(layout.storage.u.virt.serial_list_hobjid), &virtual_heap_size) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get global heap size for virtual dataset mapping") diff --git a/test/trefer.c b/test/trefer.c index 203b602..4b1f36b 100644 --- a/test/trefer.c +++ b/test/trefer.c @@ -521,6 +521,8 @@ test_reference_region(void) uint8_t *tu8; /* Temporary pointer to uint8 data */ H5O_type_t obj_type; /* Type of object */ int i, j; /* counting variables */ + hssize_t hssize_ret; /* hssize_t return value */ + htri_t tri_ret; /* htri_t return value */ herr_t ret; /* Generic return value */ haddr_t addr = HADDR_UNDEF; /* test for undefined reference */ hid_t dset_NA; /* Dataset id for undefined reference */ @@ -614,6 +616,24 @@ test_reference_region(void) ret = H5Rcreate(&wbuf[1], fid1, "/Dataset2", H5R_DATASET_REGION, sid2); CHECK(ret, FAIL, "H5Rcreate"); + /* Select unlimited hyperslab for third reference */ + start[0] = 1; start[1] = 8; + stride[0] = 4; stride[1] = 1; + count[0] = H5S_UNLIMITED; count[1] = 1; + block[0] = 2; block[1] = 2; + ret = H5Sselect_hyperslab(sid2, H5S_SELECT_SET, start, stride, count, block); + CHECK(ret, FAIL, "H5Sselect_hyperslab"); + + hssize_ret = H5Sget_select_npoints(sid2); + VERIFY(hssize_ret, (hssize_t)H5S_UNLIMITED, "H5Sget_select_npoints"); + + /* Store third dataset region */ + ret = H5Rcreate(&wbuf[2], fid1, "/Dataset2", H5R_DATASET_REGION, sid2); + CHECK(ret, FAIL, "H5Rcreate"); + ret = H5Rget_obj_type2(dset1, H5R_DATASET_REGION, &wbuf[0], &obj_type); + CHECK(ret, FAIL, "H5Rget_obj_type2"); + VERIFY(obj_type, H5O_TYPE_DATASET, "H5Rget_obj_type2"); + /* Write selection to disk */ ret = H5Dwrite(dset1, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf); CHECK(ret, FAIL, "H5Dwrite"); @@ -805,6 +825,31 @@ test_reference_region(void) ret = H5Sclose(sid2); CHECK(ret, FAIL, "H5Sclose"); + /* Get the unlimited selection */ + sid2 = H5Rget_region(dset1, H5R_DATASET_REGION, &rbuf[2]); + CHECK(sid2, FAIL, "H5Rget_region"); + + /* Verify correct hyperslab selected */ + hssize_ret = H5Sget_select_npoints(sid2); + VERIFY(hssize_ret, (hssize_t)H5S_UNLIMITED, "H5Sget_select_npoints"); + tri_ret = H5Sis_regular_hyperslab(sid2); + CHECK(tri_ret, FAIL, "H5Sis_regular_hyperslab"); + VERIFY(tri_ret, TRUE, "H5Sis_regular_hyperslab Result"); + ret = H5Sget_regular_hyperslab(sid2, start, stride, count, block); + CHECK(ret, FAIL, "H5Sget_regular_hyperslab"); + VERIFY(start[0], (hsize_t)1, "Hyperslab Coordinates"); + VERIFY(start[1], (hsize_t)8, "Hyperslab Coordinates"); + VERIFY(stride[0], (hsize_t)4, "Hyperslab Coordinates"); + VERIFY(stride[1], (hsize_t)1, "Hyperslab Coordinates"); + VERIFY(count[0], H5S_UNLIMITED, "Hyperslab Coordinates"); + VERIFY(count[1], (hsize_t)1, "Hyperslab Coordinates"); + VERIFY(block[0], (hsize_t)2, "Hyperslab Coordinates"); + VERIFY(block[1], (hsize_t)2, "Hyperslab Coordinates"); + + /* Close region space */ + ret = H5Sclose(sid2); + CHECK(ret, FAIL, "H5Sclose"); + /* Close first space */ ret = H5Sclose(sid1); CHECK(ret, FAIL, "H5Sclose"); diff --git a/test/tselect.c b/test/tselect.c index 2a975d0..2062e73 100644 --- a/test/tselect.c +++ b/test/tselect.c @@ -13656,8 +13656,6 @@ test_hyper_unlim(void) VERIFY(count2[1], H5S_UNLIMITED, "H5Sget_select_bounds"); VERIFY(count2[2], start[2] + (stride[2] * (count[2] - (hsize_t)1)) + block[2] - (hsize_t)1, "H5Sget_select_bounds"); - //VDSINC write test saving unlim selection to file as region reference - /* Close the dataspace */ ret = H5Sclose(sid); CHECK(ret, FAIL, "H5Sclose"); diff --git a/test/vds.c b/test/vds.c index 1a86708..5cdcef4 100644 --- a/test/vds.c +++ b/test/vds.c @@ -327,11 +327,12 @@ error: /* Helper function to get DCPL for examination depending on config */ static int test_api_get_ex_dcpl(test_api_config_t config, hid_t fapl, hid_t dcpl, - hid_t *ex_dcpl, hid_t vspace, char *filename) + hid_t *ex_dcpl, hid_t vspace, char *filename, hsize_t exp_meta_size) { hid_t file = -1; /* File */ hid_t dset = -1; /* Virtual dataset */ void *plist_buf = NULL; /* Serialized property list buffer */ + H5O_info_t oinfo; /* Object info struct */ htri_t tri_ret; HDassert((config >= TEST_API_BASIC) && (config < TEST_API_NTESTS)); @@ -379,6 +380,24 @@ test_api_get_ex_dcpl(test_api_config_t config, hid_t fapl, hid_t dcpl, if(HADDR_UNDEF != H5Dget_offset(dset)) TEST_ERROR + /* Test H5Oget_info returns correct metadata size */ + if(H5Oget_info(dset, &oinfo) < 0) + TEST_ERROR + if(oinfo.meta_size.obj.index_size != (hsize_t)0) + TEST_ERROR + if(config == TEST_API_REOPEN_FILE) { + if(oinfo.meta_size.obj.heap_size != exp_meta_size) { printf("%llu\n", (long long unsigned)oinfo.meta_size.obj.heap_size); + TEST_ERROR } + } /* end if */ + else + if((oinfo.meta_size.obj.heap_size != exp_meta_size) + && (oinfo.meta_size.obj.heap_size != (hsize_t)0)) + TEST_ERROR + if(oinfo.meta_size.attr.index_size != (hsize_t)0) + TEST_ERROR + if(oinfo.meta_size.attr.index_size != (hsize_t)0) + TEST_ERROR + /* Close dataset */ if(H5Dclose(dset) < 0) TEST_ERROR @@ -531,7 +550,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)68) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -602,7 +621,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)212) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -676,7 +695,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)0) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -745,7 +764,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)0) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -878,7 +897,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)0) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -1009,7 +1028,7 @@ test_api(test_api_config_t config, hid_t fapl) } /* end if */ /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)696) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ @@ -1063,7 +1082,7 @@ test_api(test_api_config_t config, hid_t fapl) TEST_ERROR /* Get examination DCPL */ - if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename) < 0) + if(test_api_get_ex_dcpl(config, fapl, dcpl, &ex_dcpl, vspace[0], filename, (hsize_t)0) < 0) TEST_ERROR /* Test H5Pget_virtual_count */ -- cgit v0.12