summaryrefslogtreecommitdiffstats
path: root/test/th5o.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/th5o.c')
-rw-r--r--test/th5o.c165
1 files changed, 153 insertions, 12 deletions
diff --git a/test/th5o.c b/test/th5o.c
index cd1fc77..d913e47 100644
--- a/test/th5o.c
+++ b/test/th5o.c
@@ -23,17 +23,15 @@
#include "testhdf5.h"
-/*#include "H5private.h"
-#include "H5Bprivate.h"
-#include "H5Sprivate.h"
-#include "H5Pprivate.h"
-*/
-
#define TEST_FILENAME "th5o_file"
#define RANK 2
#define DIM0 5
#define DIM1 10
+
+#define TEST6_DIM1 100
+#define TEST6_DIM2 100
+
/****************************************************************
**
@@ -632,16 +630,16 @@ test_h5o_plist(void)
/* Create the group anonymously and link it in */
grp = H5Gcreate_anon(fid, gcpl, H5P_DEFAULT);
CHECK(grp, FAIL, "H5Gcreate_anon");
- ret = H5Llink(fid, "group", grp, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Llink");
+ ret = H5Olink(grp, fid, "group", H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
/* Commit the type inside the group anonymously and link it in */
dtype = H5Tcopy(H5T_NATIVE_INT);
CHECK(dtype, FAIL, "H5Tcopy");
ret = H5Tcommit_anon(fid, dtype, tcpl, H5P_DEFAULT);
CHECK(ret, FAIL, "H5Tcommit_anon");
- ret = H5Llink(fid, "datatype", dtype, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Llink");
+ ret = H5Olink(dtype, fid, "datatype", H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
/* Create the dataspace for the dataset. */
dspace = H5Screate(H5S_SCALAR);
@@ -650,8 +648,8 @@ test_h5o_plist(void)
/* Create the dataset anonymously and link it in */
dset = H5Dcreate_anon(fid, H5T_NATIVE_INT, dspace, dcpl, H5P_DEFAULT);
CHECK(dset, FAIL, "H5Dcreate_anon");
- ret = H5Llink(fid, "dataset", dset, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Llink");
+ ret = H5Olink(dset, fid, "dataset", H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
ret = H5Sclose(dspace);
CHECK(ret, FAIL, "H5Sclose");
@@ -759,6 +757,147 @@ test_h5o_plist(void)
/****************************************************************
**
+** test_h5o_link(): Test creating link to object
+**
+****************************************************************/
+static void
+test_h5o_link(void)
+{
+ hid_t file_id=-1;
+ hid_t group_id=-1;
+ hid_t space_id=-1;
+ hid_t dset_id=-1;
+ hid_t type_id=-1;
+ hid_t fapl_id=-1;
+ hid_t lcpl_id=-1;
+ hsize_t dims[2] = {TEST6_DIM1, TEST6_DIM2};
+ htri_t committed; /* Whether the named datatype is committed */
+ hbool_t new_format; /* Whether to use the new format or not */
+ int wdata[TEST6_DIM1][TEST6_DIM2];
+ int rdata[TEST6_DIM1][TEST6_DIM2];
+ int i, n, j;
+ herr_t ret; /* Value returned from API calls */
+
+ /* Initialize the raw data */
+ for(i = n = 0; i < TEST6_DIM1; i++)
+ for(j = 0; j < TEST6_DIM2; j++)
+ wdata[i][j] = n++;
+
+ /* Create the dataspace */
+ space_id = H5Screate_simple(2 ,dims, NULL);
+ CHECK(space_id, FAIL, "H5Screate_simple");
+
+ /* Create LCPL with intermediate group creation flag set */
+ lcpl_id = H5Pcreate(H5P_LINK_CREATE);
+ CHECK(lcpl_id, FAIL, "H5Pcreate");
+ ret = H5Pset_create_intermediate_group(lcpl_id, TRUE);
+ CHECK(ret, FAIL, "H5Pset_create_intermediate_group");
+
+ /* Loop over using new group format */
+ for(new_format = FALSE; new_format <= TRUE; new_format++) {
+
+ /* Make a FAPL that uses the "use the latest version of the format" flag */
+ fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+ CHECK(fapl_id, FAIL, "H5Pcreate");
+
+ /* Set the "use the latest version of the format" flag for creating objects in the file */
+ ret = H5Pset_latest_format(fapl_id, new_format);
+ CHECK(ret, FAIL, "H5Pset_latest_format");
+
+ /* Create a new HDF5 file */
+ file_id = H5Fcreate(TEST_FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+ CHECK(file_id, FAIL, "H5Fcreate");
+
+ /* Close the FAPL */
+ ret = H5Pclose(fapl_id);
+ CHECK(ret, FAIL, "H5Pclose");
+
+
+ /* Create and commit a datatype with no name */
+ type_id = H5Tcopy(H5T_NATIVE_INT);
+ CHECK(type_id, FAIL, "H5Fcreate");
+ ret = H5Tcommit_anon(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Tcommit_anon");
+ committed = H5Tcommitted(type_id);
+ VERIFY(committed, TRUE, "H5Tcommitted");
+
+ /* Create a dataset with no name using the committed datatype*/
+ dset_id = H5Dcreate_anon(file_id, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(dset_id, FAIL, "H5Dcreate_anon");
+
+ /* Verify that we can write to and read from the dataset */
+
+ /* Write the data to the dataset */
+ ret = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+ CHECK(ret, FAIL, "H5Dwrite");
+
+ /* Read the data back */
+ ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+ CHECK(ret, FAIL, "H5Dread");
+
+ /* Verify the data */
+ for(i = 0; i < TEST6_DIM1; i++)
+ for(j = 0; j < TEST6_DIM2; j++)
+ VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
+
+ /* Create a group with no name*/
+ group_id = H5Gcreate_anon(file_id, H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(group_id, FAIL, "H5Gcreate_anon");
+
+ /* Link nameless datatype into nameless group */
+ ret = H5Olink(type_id, group_id, "datatype", H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
+
+ /* Link nameless dataset into nameless group with intermediate group */
+ ret = H5Olink(dset_id, group_id, "inter_group/dataset", lcpl_id, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
+
+ /* Close IDs for dataset and datatype */
+ ret = H5Dclose(dset_id);
+ CHECK(ret, FAIL, "H5Dclose");
+ ret = H5Tclose(type_id);
+ CHECK(ret, FAIL, "H5Tclose");
+
+ /* Re-open datatype using new link */
+ type_id = H5Topen2(group_id, "datatype", H5P_DEFAULT);
+ CHECK(type_id, FAIL, "H5Topen2");
+
+ /* Link nameless group to root group and close the group ID*/
+ ret = H5Olink(group_id, file_id, "/group", H5P_DEFAULT, H5P_DEFAULT);
+ CHECK(ret, FAIL, "H5Olink");
+ ret = H5Gclose(group_id);
+ CHECK(ret, FAIL, "H5Gclose");
+
+ /* Open dataset through root group and verify its data */
+ dset_id = H5Dopen2(file_id, "/group/inter_group/dataset", H5P_DEFAULT);
+ CHECK(dset_id, FAIL, "H5Dopen2");
+
+ /* Read data from dataset */
+ ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+ CHECK(ret, FAIL, "H5Dread");
+ for(i = 0; i < TEST6_DIM1; i++)
+ for(j = 0; j < TEST6_DIM2; j++)
+ VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
+
+ /* Close open IDs */
+ ret = H5Dclose(dset_id);
+ CHECK(ret, FAIL, "H5Dclose");
+ ret = H5Tclose(type_id);
+ CHECK(ret, FAIL, "H5Tclose");
+ ret = H5Fclose(file_id);
+ CHECK(ret, FAIL, "H5Fclose");
+ } /* end for */
+
+ /* Close remaining IDs */
+ ret = H5Sclose(space_id);
+ CHECK(ret, FAIL, "H5Sclose");
+ ret = H5Pclose(lcpl_id);
+ CHECK(ret, FAIL, "H5Pclose");
+} /* end test_h5o_link() */
+
+
+/****************************************************************
+**
** test_h5o(): Main H5O (generic object) testing routine.
**
****************************************************************/
@@ -773,6 +912,7 @@ test_h5o(void)
test_h5o_close(); /* Test generic close function */
test_h5o_refcount(); /* Test incrementing and decrementing reference count */
test_h5o_plist(); /* Test object creation properties */
+ test_h5o_link(); /* Test object link routine */
} /* test_h5o() */
@@ -793,3 +933,4 @@ cleanup_h5o(void)
{
remove(TEST_FILENAME);
}
+