diff options
author | Neil Fortner <nfortne2@hdfgroup.org> | 2017-05-09 21:14:35 (GMT) |
---|---|---|
committer | Neil Fortner <nfortne2@hdfgroup.org> | 2017-05-09 21:14:35 (GMT) |
commit | 509f1d5060d2d3e2753c2b835102668275dd0a69 (patch) | |
tree | 89aa1c920d84f502f94f670ff755f6073a268062 /examples/h5dsm_attr_open.c | |
parent | 629be66446b769eca48273f615ef67b3dcf434bd (diff) | |
download | hdf5-509f1d5060d2d3e2753c2b835102668275dd0a69.zip hdf5-509f1d5060d2d3e2753c2b835102668275dd0a69.tar.gz hdf5-509f1d5060d2d3e2753c2b835102668275dd0a69.tar.bz2 |
Add support for H5Aget_name, H5Aget_creatE_plist, H5Aget_space, and
H5Aget_type. Update h5dsm_attr_open.c to test these functions. Minor
improvemetns to h5dsm_test.sh.
Diffstat (limited to 'examples/h5dsm_attr_open.c')
-rw-r--r-- | examples/h5dsm_attr_open.c | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/examples/h5dsm_attr_open.c b/examples/h5dsm_attr_open.c index 30eb075..d1a0c80 100644 --- a/examples/h5dsm_attr_open.c +++ b/examples/h5dsm_attr_open.c @@ -3,7 +3,13 @@ int main(int argc, char *argv[]) { uuid_t pool_uuid; char *pool_grp = NULL; - hid_t file = -1, attr = -1, fapl = -1; + hid_t file = -1, attr = -1, fapl = -1, space = -1, type = -1, acpl = -1, def_acpl = -1; + int ndims; + hsize_t dims[2]; + char *name_buf = NULL; + size_t name_buf_size = 0; + ssize_t ssize_ret; + htri_t tri_ret; H5VL_daosm_snap_id_t snap_id; (void)MPI_Init(&argc, &argv); @@ -45,6 +51,55 @@ int main(int argc, char *argv[]) { if((attr = H5Aopen_by_name(file, argv[3], argv[4], H5P_DEFAULT, H5P_DEFAULT)) < 0) ERROR; + /* Check attribute dataspace */ + if((space = H5Aget_space(attr)) < 0) + ERROR; + if((ndims = H5Sget_simple_extent_ndims(space)) < 0) + ERROR; + if(ndims != 2) + PRINTF_ERROR("ndims == %d, expected 2\n", ndims); + if(H5Sget_simple_extent_dims(space, dims, NULL) < 0) + ERROR; + if(dims[0] != 4) + PRINTF_ERROR("dims[0] == %d, expected 4\n", (int)dims[0]); + if(dims[1] != 6) + PRINTF_ERROR("dims[1] == %d, expected 6\n", (int)dims[1]); + + /* Check attribute datatype */ + if((type = H5Aget_type(attr)) < 0) + ERROR; + if((tri_ret = H5Tequal(type, H5T_NATIVE_INT)) < 0) + ERROR; + if(!tri_ret) + PRINTF_ERROR("datatype does not equal H5T_NATIVE_INT\n"); + + /* Check ACPL */ + if((acpl = H5Aget_create_plist(attr)) < 0) + ERROR; + if((def_acpl = H5Pcreate(H5P_ATTRIBUTE_CREATE)) < 0) + ERROR; + if((tri_ret = H5Pequal(acpl, def_acpl)) < 0) + ERROR; + if(!tri_ret) + PRINTF_ERROR("ACPL does not equal default\n"); + + /* Check attribute name */ + if((ssize_ret = H5Aget_name(attr, 0, NULL)) < 0) + ERROR; + name_buf_size = strlen(argv[4]) + 1; + if(ssize_ret != (ssize_t)name_buf_size - 1) + PRINTF_ERROR("unexpected attribute name size"); + if(NULL == (name_buf = malloc(name_buf_size))) + ERROR; + if((ssize_ret = H5Aget_name(attr, name_buf_size, name_buf)) < 0) + ERROR; + if(ssize_ret != (ssize_t)name_buf_size - 1) + PRINTF_ERROR("unexpected attribute name size"); + if(name_buf[name_buf_size - 1] != '\0') + PRINTF_ERROR("attribute name not terminated"); + if(strcmp(name_buf, argv[4])) + PRINTF_ERROR("attribute name does not match"); + /* Close */ if(H5Aclose(attr) < 0) ERROR; @@ -52,6 +107,15 @@ int main(int argc, char *argv[]) { ERROR; if(H5Pclose(fapl) < 0) ERROR; + if(H5Sclose(space) < 0) + ERROR; + if(H5Tclose(type) < 0) + ERROR; + if(H5Pclose(acpl) < 0) + ERROR; + if(H5Pclose(def_acpl) < 0) + ERROR; + free(name_buf); printf("Success\n"); @@ -63,7 +127,12 @@ error: H5Aclose(attr); H5Fclose(file); H5Pclose(fapl); + H5Sclose(space); + H5Tclose(type); + H5Pclose(acpl); + H5Pclose(def_acpl); } H5E_END_TRY; + free(name_buf); (void)MPI_Finalize(); return 1; |