summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/Makefile.am44
-rwxr-xr-xexamples/h5dsm_test.sh8
-rw-r--r--examples/h5dsm_ttconv.c2
-rw-r--r--examples/h5dsm_tvlen.c342
4 files changed, 390 insertions, 6 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am
index f83145a..3f28819 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -42,9 +42,16 @@ EXAMPLE_PROG = h5_write h5_read h5_extend_write h5_chunk_read h5_compound \
h5_vds h5_vds-exc \
h5_vds-exclim h5_vds-eiger h5_vds-simpleIO h5_vds-percival \
h5_vds-percival-unlim h5_vds-percival-unlim-maxmin \
- h5dsm_file_create h5dsm_file_open h5dsm_dset_create h5dsm_dset_open \
- h5dsm_dset_write h5dsm_dset_read h5dsm_map
-TEST_SCRIPT=testh5cc.sh
+ h5dsm_file_create h5dsm_file_open h5dsm_group_create \
+ h5dsm_group_open h5dsm_dset_create h5dsm_dset_open \
+ h5dsm_dset_write h5dsm_dset_read
+ h5dsm_dset_wpartial h5dsm_dset_rpartial h5dsm_dset_w1m \
+ h5dsm_dset_r1m h5dsm_link_exists h5dsm_link_iter \
+ h5dsm_attr_create h5dsm_attr_open h5dsm_attr_write \
+ h5dsm_attr_read h5dsm_attr_iter h5dsm_slink_create \
+ h5dsm_obj_open h5dsm_obj_open_addr h5dsm_obj_info h5dsm_map \
+ h5dsm_ttconv h5dsm_tvlen
+TEST_SCRIPT=testh5cc.sh h5dsm_test.sh
TEST_EXAMPLES_SCRIPT=$(INSTALL_SCRIPT_FILES)
# Install files
@@ -59,8 +66,15 @@ INSTALL_FILES = h5_write.c h5_read.c h5_extend_write.c h5_chunk_read.c \
h5_vds.c h5_vds-exc.c \
h5_vds-exclim.c h5_vds-eiger.c h5_vds-simpleIO.c h5_vds-percival.c \
h5_vds-percival-unlim.c h5_vds-percival-unlim-maxmin.c \
- h5dsm_file_create.c h5dsm_file_open.c h5dsm_dset_create.c \
- h5dsm_dset_open.c h5dsm_dset_write.c h5dsm_dset_read.c
+ h5dsm_file_create.c h5dsm_file_open.c h5dsm_group_create.c \
+ h5dsm_group_open.c h5dsm_dset_create.c \
+ h5dsm_dset_open.c h5dsm_dset_write.c h5dsm_dset_read.c \
+ h5dsm_dset_wpartial.c h5dsm_dset_rpartial.c h5dsm_dset_w1m.c \
+ h5dsm_dset_r1m.c h5dsm_link_exists.c h5dsm_link_iter.c \
+ h5dsm_attr_create.c h5dsm_attr_open.c h5dsm_attr_write.c \
+ h5dsm_attr_read.c h5dsm_attr_iter.c h5dsm_slink_create.c \
+ h5dsm_obj_open.c h5dsm_obj_open_addr.c h5dsm_obj_info.c h5dsm_map.c \
+ h5dsm_ttconv.c h5dsm_tvlen.c
@@ -140,10 +154,30 @@ h5_vds-percival-unlim: $(srcdir)/h5_vds-percival-unlim.c
h5_vds-percival-unlim-maxmin: $(srcdir)/h5_vds-percival-unlim-maxmin.c
h5dsm_file_create: $(srcdir)/h5dsm_file_create.c
h5dsm_file_open: $(srcdir)/h5dsm_file_open.c
+h5dsm_group_create: $(srcdir)/h5dsm_group_create.c
+h5dsm_group_open: $(srcdir)/h5dsm_group_open.c
h5dsm_dset_create: $(srcdir)/h5dsm_dset_create.c
h5dsm_dset_open: $(srcdir)/h5dsm_dset_open.c
h5dsm_dset_write: $(srcdir)/h5dsm_dset_write.c
h5dsm_dset_read: $(srcdir)/h5dsm_dset_read.c
+h5dsm_dset_wpartial: $(srcdir)/h5dsm_dset_wpartial.c
+h5dsm_dset_rpartial: $(srcdir)/h5dsm_dset_rpartial.c
+h5dsm_dset_w1m: $(srcdir)/h5dsm_dset_w1m.c
+h5dsm_dset_r1m: $(srcdir)/h5dsm_dset_r1m.c
+h5dsm_link_exists: $(srcdir)/h5dsm_link_exists.c
+h5dsm_link_iter: $(srcdir)/h5dsm_link_iter.c
+h5dsm_attr_create: $(srcdir)/h5dsm_attr_create.c
+h5dsm_attr_open: $(srcdir)/h5dsm_attr_open.c
+h5dsm_attr_write: $(srcdir)/h5dsm_attr_write.c
+h5dsm_attr_read: $(srcdir)/h5dsm_attr_read.c
+h5dsm_attr_iter: $(srcdir)/h5dsm_attr_iter.c
+h5dsm_slink_create: $(srcdir)/h5dsm_slink_create.c
+h5dsm_obj_open: $(srcdir)/h5dsm_obj_open.c
+h5dsm_obj_open_addr: $(srcdir)/h5dsm_obj_open_addr.c
+h5dsm_obj_info: $(srcdir)/h5dsm_obj_info.c
+h5dsm_map: $(srcdir)/h5dsm_map.c
+h5dsm_ttconv: $(srcdir)/h5dsm_ttconv.c
+h5dsm_tvlen: $(srcdir)/h5dsm_tvlen.c
if BUILD_SHARED_SZIP_CONDITIONAL
LD_LIBRARY_PATH=$(LL_PATH)
diff --git a/examples/h5dsm_test.sh b/examples/h5dsm_test.sh
index 5b7eda6..c38e2ca 100755
--- a/examples/h5dsm_test.sh
+++ b/examples/h5dsm_test.sh
@@ -552,6 +552,14 @@ if test $? -ne 0; then
exit 1
fi
+# --------------- Variable Length types --------------- #
+echo h5dsm_tvlen
+orterun -np 1 $EXEC_ARGS ./h5dsm_tvlen $POOL_UUID -q
+if test $? -ne 0; then
+ echo FAILED
+ exit 1
+fi
+
# --------------- Output Comparison --------------- #
sed -i -e 's/#.*//' -e 's/[ ^I]*$//' -e '/^$/ d' h5dsm_test.out
echo cmp h5dsm_test.out h5dsm_test.out.exp
diff --git a/examples/h5dsm_ttconv.c b/examples/h5dsm_ttconv.c
index 731573c..6b10d53 100644
--- a/examples/h5dsm_ttconv.c
+++ b/examples/h5dsm_ttconv.c
@@ -20,7 +20,7 @@ hbool_t verbose_g = 1;
int main(int argc, char *argv[]) {
uuid_t pool_uuid;
char *pool_grp = NULL;
- hid_t file = -1, dset = -1, dset_a = -1, dset_b = -1, dset_c = -1, dset2 = -1, attr = -1, attr_a = -1, attr_b = -1 , attr_c = -1, space = -1, space2 = -1, space2_contig, fapl = -1;
+ hid_t file = -1, dset = -1, dset_a = -1, dset_b = -1, dset_c = -1, dset2 = -1, attr = -1, attr_a = -1, attr_b = -1 , attr_c = -1, space = -1, space2 = -1, space2_contig = -1, fapl = -1;
hid_t file_type = -1, file_type_a = -1, file_type_b = -1, file_type_c = -1;
hid_t mem_type = -1, mem_type_conv = -1, mem_type_a = -1, mem_type_b = -1, mem_type_c = -1;
hsize_t dims[2] = {4, 2};
diff --git a/examples/h5dsm_tvlen.c b/examples/h5dsm_tvlen.c
new file mode 100644
index 0000000..ffe4933
--- /dev/null
+++ b/examples/h5dsm_tvlen.c
@@ -0,0 +1,342 @@
+#include "h5dsm_example.h"
+#include <time.h>
+
+#define FILE_NAME "tvlen.h5"
+#define NITER 10
+
+hbool_t verbose_g = 1;
+
+static void print_vla(const hvl_t *vla) {
+ int i, j, k;
+
+ for(i = 0; i < 4; i++) {
+ for(j = 0; j < 2; j++) {
+ if(j > 0)
+ printf(", ");
+ printf("{");
+ for(k = 0; k < (int)vla[2 * i + j].len; k++) {
+ if(k > 0)
+ printf(", ");
+ printf("%d", ((int *)vla[2 * i + j].p)[k]);
+ } /* end for */
+ printf("}");
+ } /* end for */
+ printf("\n");
+ } /* end for */
+
+ return;
+} /* end print_vla() */
+
+static int check_vla(const hvl_t *vla1, const hvl_t *vla2) {
+ int i, j, k;
+
+ for(i = 0; i < 4; i++)
+ for(j = 0; j < 2; j++) {
+ if(vla1[2 * i + j].len != vla2[2 * i + j].len)
+ PRINTF_ERROR("vlen array length at location %d, %d does not match", i, j);
+ for(k = 0; k < (int)vla1[2 * i + j].len; k++)
+ if(((int *)vla1[2 * i + j].p)[k] != ((int *)vla2[2 * i + j].p)[k])
+ PRINTF_ERROR("vlen array data at location %d, %d, %d does not match", i, j, k);
+ } /* end for */
+
+ return 0;
+
+error:
+ return -1;
+} /* end check_vla() */
+
+static void print_vls(char **vls) {
+ int i, j;
+
+ for(i = 0; i < 4; i++) {
+ for(j = 0; j < 2; j++) {
+ if(j > 0)
+ printf(", ");
+ if(vls[2 * i + j])
+ printf("\"%s\"", vls[2 * i + j]);
+ else
+ printf("NULL");
+ } /* end for */
+ printf("\n");
+ } /* end for */
+
+ return;
+} /* end print_vls() */
+
+static int check_vls(char **vls1, char **vls2) {
+ int i, j;
+
+ for(i = 0; i < 4; i++)
+ for(j = 0; j < 2; j++) {
+ if((vls1[2 * i + j] == NULL) != (vls2[2 * i + j] == NULL))
+ PRINTF_ERROR("one vlen string at location %d, %d is NULL and the other is not", i, j);
+ if(vls1[2 * i + j] && strcmp(vls1[2 * i + j], vls2[2 * i + j]))
+ PRINTF_ERROR("vlen strings at location %d, %d do not match", i, j);
+ } /* end for */
+
+ return 0;
+
+error:
+ return -1;
+} /* end check_vls() */
+
+int main(int argc, char *argv[]) {
+ uuid_t pool_uuid;
+ char *pool_grp = NULL;
+ hid_t file = -1, dset_vla = -1, dset_vls = -1, attr_vla = -1, attr_vls = -1, space = -1, fapl = -1;
+ hid_t type_vla = -1, type_vls = -1;
+ hsize_t dims[2] = {4, 2};
+ int static_buf_vla[4][2][8];
+ char static_buf_vls[4][2][8];
+ hvl_t rbuf_vla[4][2];
+ char *rbuf_vls[4][2];
+ hvl_t wbuf_vla[4][2];
+ char *wbuf_vls[4][2];
+ int bogus_int = -1;
+ char bogus_str[3] = {'-', '1', '\0'};
+ const hvl_t rbuf_vla_init[4][2] = {{{1, &bogus_int}, {1, &bogus_int}},
+ {{1, &bogus_int}, {1, &bogus_int}},
+ {{1, &bogus_int}, {1, &bogus_int}},
+ {{1, &bogus_int}, {1, &bogus_int}}};
+ char * const rbuf_vls_init[4][2] = {{bogus_str, bogus_str},
+ {bogus_str, bogus_str},
+ {bogus_str, bogus_str},
+ {bogus_str, bogus_str}};
+ const hvl_t wbuf_vla_init[4][2] = {{{0, &static_buf_vla[0][0][0]}, {0, &static_buf_vla[0][1][0]}},
+ {{0, &static_buf_vla[1][0][0]}, {0, &static_buf_vla[1][1][0]}},
+ {{0, &static_buf_vla[2][0][0]}, {0, &static_buf_vla[2][1][0]}},
+ {{0, &static_buf_vla[3][0][0]}, {1, &static_buf_vla[3][1][0]}}};
+ char * const wbuf_vls_init[4][2] = {{&static_buf_vls[0][0][0], &static_buf_vls[0][1][0]},
+ {&static_buf_vls[1][0][0], &static_buf_vls[1][1][0]},
+ {&static_buf_vls[2][0][0], &static_buf_vls[2][1][0]},
+ {&static_buf_vls[3][0][0], &static_buf_vls[3][1][0]}};
+ int i, j, k, l;
+
+ (void)MPI_Init(&argc, &argv);
+
+ /* Seed random number generator */
+ srand(time(NULL));
+
+ if((argc != 2) && (argc != 3))
+ PRINTF_ERROR("argc must be 2 or 3\n");
+
+ if(argc == 3)
+ verbose_g = 0;
+
+ /* Parse UUID */
+ if(0 != uuid_parse(argv[1], pool_uuid))
+ ERROR;
+
+ /* Initialize VOL */
+ if(H5VLdaosm_init(MPI_COMM_WORLD, pool_uuid, pool_grp) < 0)
+ ERROR;
+
+ /* Set up FAPL */
+ if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+ ERROR;
+ if(H5Pset_fapl_daosm(fapl, MPI_COMM_WORLD, MPI_INFO_NULL) < 0)
+ ERROR;
+ if(H5Pset_all_coll_metadata_ops(fapl, true) < 0)
+ ERROR;
+
+ /* Create file */
+ if((file = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ ERROR;
+
+ /* Set up dataspace */
+ if((space = H5Screate_simple(2, dims, NULL)) < 0)
+ ERROR;
+
+ /*
+ * Set up types
+ */
+ /* Create variable length array */
+ /* Set up file "all" type */
+ if((type_vla = H5Tvlen_create(H5T_NATIVE_INT)) < 0)
+ ERROR;
+
+ /* Set up variable length string type */
+ if((type_vls = H5Tcopy(H5T_C_S1)) < 0)
+ ERROR;
+ if(H5Tset_size(type_vls, H5T_VARIABLE) < 0)
+ ERROR;
+
+ /*
+ * Create objects
+ */
+ /* Create vla dataset */
+ if((dset_vla = H5Dcreate2(file, "vla_dset", type_vla, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ ERROR;
+
+ /* Create vls dataset */
+ if((dset_vls = H5Dcreate2(file, "vls_dset", type_vls, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ ERROR;
+
+ /* Create vla attribute */
+ if((attr_vla = H5Acreate2(dset_vla, "vla_attr", type_vla, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ ERROR;
+
+ /* Create vls attribute */
+ if((attr_vls = H5Acreate2(dset_vla, "vls_attr", type_vls, space, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+ ERROR;
+
+ /*
+ * Test attribute
+ */
+ /* Loop over iterations */
+ for(i = 0; i < NITER; i++) {
+ /*
+ * Variable length array attribute test
+ */
+ /* Fill write data buffer */
+ for(j = 0; j < dims[0]; j++)
+ for(k = 0; k < dims[1]; k++)
+ for(l = 0; l < (sizeof(static_buf_vla[0][0]) / sizeof(static_buf_vla[0][0][0])); l++)
+ static_buf_vla[j][k][l] = rand() % 100;
+
+ /* Fill write buffer */
+ memcpy(wbuf_vla, wbuf_vla_init, sizeof(wbuf_vla));
+ for(j = 0; j < dims[0]; j++)
+ for(k = 0; k < dims[1]; k++) {
+ /* 10% chance of having a NULL sequence */
+ if(rand() % 10)
+ wbuf_vla[j][k].len = rand() % 9;
+ else {
+ wbuf_vla[j][k].len = 0;
+ wbuf_vla[j][k].p = NULL;
+ } /* end if */
+ } /* end for */
+
+ /* Print message */
+ if(verbose_g) {
+ printf("Writing attribute with variable length arrays. buf =\n");
+ print_vla(wbuf_vla[0]);
+ } /* end if */
+
+ /* Write data */
+ if(H5Awrite(attr_vla, type_vla, wbuf_vla) < 0)
+ ERROR;
+
+ /* Read data */
+ memcpy(rbuf_vla, rbuf_vla_init, sizeof(rbuf_vla));
+ if(H5Aread(attr_vla, type_vla, rbuf_vla) < 0)
+ ERROR;
+
+ /* Print message */
+ if(verbose_g) {
+ printf("Read attribute with variable length arrays. buf =\n");
+ print_vla(rbuf_vla[0]);
+ } /* end if */
+
+ /* Check buffer */
+ if(check_vla(wbuf_vla[0], rbuf_vla[0]) < 0) {
+ (void)H5Dvlen_reclaim(type_vla, space, H5P_DEFAULT, rbuf_vla);
+ ERROR;
+ } /* end if */
+
+ /* Reclaim read buffer */
+ if(H5Dvlen_reclaim(type_vla, space, H5P_DEFAULT, rbuf_vla) < 0)
+ ERROR;
+
+ if(verbose_g)
+ printf("\n");
+
+ /*
+ * Variable length string attribute test
+ */
+ /* Fill write data buffer */
+ for(j = 0; j < dims[0]; j++)
+ for(k = 0; k < dims[1]; k++)
+ for(l = 0; l < (sizeof(static_buf_vls[0][0]) / sizeof(static_buf_vls[0][0][0])); l++)
+ static_buf_vls[j][k][l] = 'a' + rand() % 26;
+
+ /* Fill write buffer */
+ memcpy(wbuf_vls, wbuf_vls_init, sizeof(wbuf_vls));
+ for(j = 0; j < dims[0]; j++)
+ for(k = 0; k < dims[1]; k++) {
+ /* 10% chance of having a NULL sequence */
+ if(rand() % 10)
+ static_buf_vls[j][k][rand() % 8] = '\0';
+ else
+ wbuf_vls[j][k] = NULL;
+ } /* end for */
+
+ /* Print message */
+ if(verbose_g) {
+ printf("Writing attribute with variable length strings. buf =\n");
+ print_vls(wbuf_vls[0]);
+ } /* end if */
+
+ /* Write data */
+ if(H5Awrite(attr_vls, type_vls, wbuf_vls) < 0)
+ ERROR;
+
+ /* Read data */
+ memcpy(rbuf_vls, rbuf_vls_init, sizeof(rbuf_vls));
+ if(H5Aread(attr_vls, type_vls, rbuf_vls) < 0)
+ ERROR;
+
+ /* Print message */
+ if(verbose_g) {
+ printf("Read attribute with variable length strings. buf =\n");
+ print_vls(rbuf_vls[0]);
+ } /* end if */
+
+ /* Check buffer */
+ if(check_vls(wbuf_vls[0], rbuf_vls[0]) < 0) {
+ (void)H5Dvlen_reclaim(type_vls, space, H5P_DEFAULT, rbuf_vls);
+ ERROR;
+ } /* end if */
+
+ /* Reclaim read buffer */
+ if(H5Dvlen_reclaim(type_vls, space, H5P_DEFAULT, rbuf_vls) < 0)
+ ERROR;
+
+ if(verbose_g)
+ printf("\n");
+ } /* end for */
+
+ /*
+ * Close
+ */
+ if(H5Aclose(attr_vla) < 0)
+ ERROR;
+ if(H5Aclose(attr_vls) < 0)
+ ERROR;
+ if(H5Dclose(dset_vla) < 0)
+ ERROR;
+ if(H5Dclose(dset_vls) < 0)
+ ERROR;
+ if(H5Fclose(file) < 0)
+ ERROR;
+ if(H5Tclose(type_vla) < 0)
+ ERROR;
+ if(H5Tclose(type_vls) < 0)
+ ERROR;
+ if(H5Sclose(space) < 0)
+ ERROR;
+ if(H5Pclose(fapl) < 0)
+ ERROR;
+
+ printf("Success\n");
+
+ (void)MPI_Finalize();
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Aclose(attr_vla);
+ H5Aclose(attr_vls);
+ H5Dclose(dset_vla);
+ H5Dclose(dset_vls);
+ H5Fclose(file);
+ H5Tclose(type_vla);
+ H5Tclose(type_vls);
+ H5Sclose(space);
+ H5Pclose(fapl);
+ } H5E_END_TRY;
+
+ (void)MPI_Finalize();
+ return 1;
+}
+