summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am5
-rw-r--r--test/Makefile.in30
-rw-r--r--test/vds.c452
3 files changed, 478 insertions, 9 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index b5ebcf3..f698282 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -46,7 +46,7 @@ TEST_PROG= testhdf5 lheap ohdr stab gheap cache cache_api cache_tagging \
big mtime fillval mount flush1 flush2 app_ref enum \
set_extent ttsafe enc_dec_plist enc_dec_plist_with_endianess\
getname vfd ntypes dangle dtransform reserved cross_read \
- freespace mf farray earray btree2 fheap file_image unregister
+ freespace mf vds farray earray btree2 fheap file_image unregister
# List programs to be built when testing here. error_test and err_compat are
# built at the same time as the other tests, but executed by testerror.sh.
@@ -150,7 +150,8 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offse
earray.h5 efc[0-5].h5 log_vfd_out.log \
new_multi_file_v16-r.h5 new_multi_file_v16-s.h5 \
split_get_file_image_test-m.h5 split_get_file_image_test-r.h5 \
- file_image_core_test.h5.copy unregister_filter_1.h5 unregister_filter_2.h5
+ file_image_core_test.h5.copy unregister_filter_1.h5 unregister_filter_2.h5 \
+ vds_[1-4].h5
# Sources for testhdf5 executable
testhdf5_SOURCES=testhdf5.c tarray.c tattr.c tchecksum.c tconfig.c tfile.c \
diff --git a/test/Makefile.in b/test/Makefile.in
index 2a43aaf..3e4fd38 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -193,9 +193,9 @@ am__EXEEXT_1 = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \
enc_dec_plist_with_endianess$(EXEEXT) getname$(EXEEXT) \
vfd$(EXEEXT) ntypes$(EXEEXT) dangle$(EXEEXT) \
dtransform$(EXEEXT) reserved$(EXEEXT) cross_read$(EXEEXT) \
- freespace$(EXEEXT) mf$(EXEEXT) farray$(EXEEXT) earray$(EXEEXT) \
- btree2$(EXEEXT) fheap$(EXEEXT) file_image$(EXEEXT) \
- unregister$(EXEEXT)
+ freespace$(EXEEXT) mf$(EXEEXT) vds$(EXEEXT) farray$(EXEEXT) \
+ earray$(EXEEXT) btree2$(EXEEXT) fheap$(EXEEXT) \
+ file_image$(EXEEXT) unregister$(EXEEXT)
@HAVE_SHARED_CONDITIONAL_TRUE@am__EXEEXT_2 = plugin$(EXEEXT)
am__EXEEXT_3 = gen_bad_ohdr$(EXEEXT) gen_bogus$(EXEEXT) \
gen_cross$(EXEEXT) gen_deflate$(EXEEXT) gen_filters$(EXEEXT) \
@@ -518,6 +518,10 @@ unregister_SOURCES = unregister.c
unregister_OBJECTS = unregister.$(OBJEXT)
unregister_LDADD = $(LDADD)
unregister_DEPENDENCIES = libh5test.la $(LIBHDF5)
+vds_SOURCES = vds.c
+vds_OBJECTS = vds.$(OBJEXT)
+vds_LDADD = $(LDADD)
+vds_DEPENDENCIES = libh5test.la $(LIBHDF5)
vfd_SOURCES = vfd.c
vfd_OBJECTS = vfd.$(OBJEXT)
vfd_LDADD = $(LDADD)
@@ -573,7 +577,7 @@ SOURCES = $(libdynlib1_la_SOURCES) $(libdynlib2_la_SOURCES) \
mount.c mtime.c ntypes.c objcopy.c ohdr.c plugin.c pool.c \
reserved.c set_extent.c space_overflow.c stab.c \
tcheck_version.c $(testhdf5_SOURCES) testmeta.c \
- $(ttsafe_SOURCES) unlink.c unregister.c vfd.c
+ $(ttsafe_SOURCES) unlink.c unregister.c vds.c vfd.c
DIST_SOURCES = $(am__libdynlib1_la_SOURCES_DIST) \
$(am__libdynlib2_la_SOURCES_DIST) \
$(am__libdynlib3_la_SOURCES_DIST) $(libh5test_la_SOURCES) \
@@ -592,7 +596,7 @@ DIST_SOURCES = $(am__libdynlib1_la_SOURCES_DIST) \
mount.c mtime.c ntypes.c objcopy.c ohdr.c plugin.c pool.c \
reserved.c set_extent.c space_overflow.c stab.c \
tcheck_version.c $(testhdf5_SOURCES) testmeta.c \
- $(ttsafe_SOURCES) unlink.c unregister.c vfd.c
+ $(ttsafe_SOURCES) unlink.c unregister.c vds.c vfd.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -1101,7 +1105,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog accum.h5 cmpd_dset.h5 \
earray.h5 efc[0-5].h5 log_vfd_out.log new_multi_file_v16-r.h5 \
new_multi_file_v16-s.h5 split_get_file_image_test-m.h5 \
split_get_file_image_test-r.h5 file_image_core_test.h5.copy \
- unregister_filter_1.h5 unregister_filter_2.h5
+ unregister_filter_1.h5 unregister_filter_2.h5 vds_[1-4].h5
# Test script for error_test and err_compat
TEST_SCRIPT = testerror.sh testlibinfo.sh testcheck_version.sh \
@@ -1123,7 +1127,7 @@ TEST_PROG = testhdf5 lheap ohdr stab gheap cache cache_api cache_tagging \
big mtime fillval mount flush1 flush2 app_ref enum \
set_extent ttsafe enc_dec_plist enc_dec_plist_with_endianess\
getname vfd ntypes dangle dtransform reserved cross_read \
- freespace mf farray earray btree2 fheap file_image unregister
+ freespace mf vds farray earray btree2 fheap file_image unregister
# These programs generate test files for the tests. They don't need to be
@@ -1609,6 +1613,10 @@ unregister$(EXEEXT): $(unregister_OBJECTS) $(unregister_DEPENDENCIES) $(EXTRA_un
@rm -f unregister$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unregister_OBJECTS) $(unregister_LDADD) $(LIBS)
+vds$(EXEEXT): $(vds_OBJECTS) $(vds_DEPENDENCIES) $(EXTRA_vds_DEPENDENCIES)
+ @rm -f vds$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vds_OBJECTS) $(vds_LDADD) $(LIBS)
+
vfd$(EXEEXT): $(vfd_OBJECTS) $(vfd_DEPENDENCIES) $(EXTRA_vfd_DEPENDENCIES)
@rm -f vfd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(vfd_OBJECTS) $(vfd_LDADD) $(LIBS)
@@ -1728,6 +1736,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvltypes.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unregister.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vds.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfd.Po@am__quote@
.c.o:
@@ -2254,6 +2263,13 @@ mf.log: mf$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+vds.log: vds$(EXEEXT)
+ @p='vds$(EXEEXT)'; \
+ b='vds'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
farray.log: farray$(EXEEXT)
@p='farray$(EXEEXT)'; \
b='farray'; \
diff --git a/test/vds.c b/test/vds.c
new file mode 100644
index 0000000..0e4997e
--- /dev/null
+++ b/test/vds.c
@@ -0,0 +1,452 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Neil Fortner <nfortne2@hdfgroup.org>
+ * Monday, February 16, 2015
+ *
+ * Purpose: Tests datasets with virtual layout.
+ */
+#include "h5test.h"
+#include "H5srcdir.h"
+
+const char *FILENAME[] = {
+ "vds_1",
+ "vds_2",
+ "vds_3",
+ "vds_4",
+ NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_api
+ *
+ * Purpose: Tests API functions related to virtual datasets.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Neil Fortner
+ * Monday, February 16, 2015
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_api(void)
+{
+ hid_t dcpl = -1; /* Dataset creation property list */
+ hid_t src_space[4] = {-1, -1, -1, -1}; /* Source dataspaces */
+ hid_t vspace[4] = {-1, -1, -1, -1}; /* Virtual dset dataspaces */
+ char *src_file[4] = {"src_file1", "src_file2.", "src_file3..", "src_file4..."}; /* Source file names (different lengths) */
+ char *src_dset[4] = {"src_dset1....", "src_dset2.....", "src_dset3......", "src_dset4......."}; /* Source dataset names (different lengths) */
+ hsize_t dims[2] = {10, 20}; /* Data space current size */
+ hsize_t start[2]; /* Hyperslab start */
+ hsize_t stride[2]; /* Hyperslab stride */
+ hsize_t count[2]; /* Hyperslab count */
+ hsize_t block[2]; /* Hyperslab block */
+ size_t size_out;
+ ssize_t ssize_out;
+ hid_t space_out = -1;
+ char name_out[32];
+ unsigned i;
+
+ TESTING("virtual dataset API functions");
+
+ /* Create DCPL */
+ if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR
+
+ /*
+ * Test 1: All - all selection
+ */
+ /* Create source dataspace */
+ if((src_space[0] = H5Screate_simple(2, dims, NULL)) < 0)
+ TEST_ERROR
+
+ /* Create virtual dataspace */
+ if((vspace[0] = H5Screate_simple(2, dims, NULL)) < 0)
+ TEST_ERROR
+
+ /* Select all (should not be necessary, but just to be sure) */
+ if(H5Sselect_all(src_space[0]) < 0)
+ TEST_ERROR
+ if(H5Sselect_all(vspace[0]) < 0)
+ TEST_ERROR
+
+ /* Add virtual layout mapping */
+ if(H5Pset_virtual(dcpl, vspace[0], src_file[0], src_dset[0], src_space[0]) < 0)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_count */
+ if(H5Pget_virtual_count(dcpl, &size_out) < 0)
+ TEST_ERROR
+ if(size_out != 1)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_vspace */
+ if((space_out = H5Pget_virtual_vspace(dcpl, 0)) < 0)
+ TEST_ERROR
+ if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
+ TEST_ERROR
+ if(H5Sclose(space_out) < 0)
+ TEST_ERROR
+ space_out = -1;
+
+ /* Test H5Pget_virtual_srcspace */
+ if((space_out = H5Pget_virtual_srcspace(dcpl, 0)) < 0)
+ TEST_ERROR
+ if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
+ TEST_ERROR
+ if(H5Sclose(space_out) < 0)
+ TEST_ERROR
+ space_out = -1;
+
+ /* Test H5Pget_virtual_filename */
+ if((ssize_out = H5Pget_virtual_filename(dcpl, 0, NULL, 0)) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_file[0]))
+ TEST_ERROR
+ HDassert((size_t)ssize_out < sizeof(name_out));
+ if((ssize_out = H5Pget_virtual_filename(dcpl, 0, name_out, sizeof(name_out))) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_file[0]))
+ TEST_ERROR
+ if(HDstrncmp(name_out, src_file[0], (size_t)ssize_out + 1) != 0)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_dsetname */
+ if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, NULL, 0)) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_dset[0]))
+ TEST_ERROR
+ HDassert((size_t)ssize_out < sizeof(name_out));
+ if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, name_out, sizeof(name_out))) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_dset[0]))
+ TEST_ERROR
+ if(HDstrncmp(name_out, src_dset[0], (size_t)ssize_out + 1) != 0)
+ TEST_ERROR
+
+ /* Close */
+ if(H5Sclose(src_space[0]) < 0)
+ TEST_ERROR
+ src_space[0] = -1;
+ if(H5Sclose(vspace[0]) < 0)
+ TEST_ERROR
+ vspace[0] = -1;
+
+
+ /* Close */
+ if(H5Pclose(dcpl) < 0)
+ TEST_ERROR
+ dcpl = -1;
+
+ PASSED();
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ for(i = 0; i < (sizeof(src_space) / sizeof(src_space[0])); i++) {
+ if(src_space[i] >= 0)
+ (void)H5Sclose(src_space[i]);
+ if(vspace[i] >= 0)
+ (void)H5Sclose(vspace[i]);
+ } /* end for */
+ if(space_out >= 0)
+ (void)H5Sclose(space_out);
+ if(dcpl >= 0)
+ (void)H5Pclose(dcpl);
+ } H5E_END_TRY;
+
+ return 1;
+} /* end test_api() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Tests datasets with virtual layout
+ *
+ * Return: Success: exit(0)
+ *
+ * Failure: exit(1)
+ *
+ * Programmer: Neil Fortner
+ * Tuesday, February 17, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ char filename[FILENAME_BUF_SIZE];
+ hid_t file, grp, fapl;
+ int nerrors = 0;
+
+ /* Testing setup */
+ h5_reset();
+ fapl = h5_fileaccess();
+
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+ nerrors += test_api();
+
+ /* Verify symbol table messages are cached */
+ //nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); VDSINC
+
+ if(nerrors)
+ goto error;
+ printf("All virtual dataset tests passed.\n");
+ //h5_cleanup(FILENAME, fapl); VDSINC
+
+ return 0;
+
+error:
+ nerrors = MAX(1, nerrors);
+ printf("***** %d VIRTUAL DATASET TEST%s FAILED! *****\n",
+ nerrors, 1 == nerrors ? "" : "S");
+ return 1;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Neil Fortner <nfortne2@hdfgroup.org>
+ * Monday, February 16, 2015
+ *
+ * Purpose: Tests datasets with virtual layout.
+ */
+#include "h5test.h"
+#include "H5srcdir.h"
+
+const char *FILENAME[] = {
+ "vds_1",
+ "vds_2",
+ "vds_3",
+ "vds_4",
+ NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_api
+ *
+ * Purpose: Tests API functions related to virtual datasets.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Neil Fortner
+ * Monday, February 16, 2015
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_api(void)
+{
+ hid_t dcpl = -1; /* Dataset creation property list */
+ hid_t src_space[4] = {-1, -1, -1, -1}; /* Source dataspaces */
+ hid_t vspace[4] = {-1, -1, -1, -1}; /* Virtual dset dataspaces */
+ char *src_file[4] = {"src_file1", "src_file2.", "src_file3..", "src_file4..."}; /* Source file names (different lengths) */
+ char *src_dset[4] = {"src_dset1....", "src_dset2.....", "src_dset3......", "src_dset4......."}; /* Source dataset names (different lengths) */
+ hsize_t dims[2] = {10, 20}; /* Data space current size */
+ hsize_t start[2]; /* Hyperslab start */
+ hsize_t stride[2]; /* Hyperslab stride */
+ hsize_t count[2]; /* Hyperslab count */
+ hsize_t block[2]; /* Hyperslab block */
+ size_t size_out;
+ ssize_t ssize_out;
+ hid_t space_out = -1;
+ char name_out[32];
+ unsigned i;
+
+ TESTING("virtual dataset API functions");
+
+ /* Create DCPL */
+ if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ TEST_ERROR
+
+ /*
+ * Test 1: All - all selection
+ */
+ /* Create source dataspace */
+ if((src_space[0] = H5Screate_simple(2, dims, NULL)) < 0)
+ TEST_ERROR
+
+ /* Create virtual dataspace */
+ if((vspace[0] = H5Screate_simple(2, dims, NULL)) < 0)
+ TEST_ERROR
+
+ /* Select all (should not be necessary, but just to be sure) */
+ if(H5Sselect_all(src_space[0]) < 0)
+ TEST_ERROR
+ if(H5Sselect_all(vspace[0]) < 0)
+ TEST_ERROR
+
+ /* Add virtual layout mapping */
+ if(H5Pset_virtual(dcpl, vspace[0], src_file[0], src_dset[0], src_space[0]) < 0)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_count */
+ if(H5Pget_virtual_count(dcpl, &size_out) < 0)
+ TEST_ERROR
+ if(size_out != 1)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_vspace */
+ if((space_out = H5Pget_virtual_vspace(dcpl, 0)) < 0)
+ TEST_ERROR
+ if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
+ TEST_ERROR
+ if(H5Sclose(space_out) < 0)
+ TEST_ERROR
+ space_out = -1;
+
+ /* Test H5Pget_virtual_srcspace */
+ if((space_out = H5Pget_virtual_srcspace(dcpl, 0)) < 0)
+ TEST_ERROR
+ if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
+ TEST_ERROR
+ if(H5Sclose(space_out) < 0)
+ TEST_ERROR
+ space_out = -1;
+
+ /* Test H5Pget_virtual_filename */
+ if((ssize_out = H5Pget_virtual_filename(dcpl, 0, NULL, 0)) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_file[0]))
+ TEST_ERROR
+ HDassert((size_t)ssize_out < sizeof(name_out));
+ if((ssize_out = H5Pget_virtual_filename(dcpl, 0, name_out, sizeof(name_out))) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_file[0]))
+ TEST_ERROR
+ if(HDstrncmp(name_out, src_file[0], (size_t)ssize_out + 1) != 0)
+ TEST_ERROR
+
+ /* Test H5Pget_virtual_dsetname */
+ if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, NULL, 0)) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_dset[0]))
+ TEST_ERROR
+ HDassert((size_t)ssize_out < sizeof(name_out));
+ if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, name_out, sizeof(name_out))) < 0)
+ TEST_ERROR
+ if((size_t)ssize_out != HDstrlen(src_dset[0]))
+ TEST_ERROR
+ if(HDstrncmp(name_out, src_dset[0], (size_t)ssize_out + 1) != 0)
+ TEST_ERROR
+
+ /* Close */
+ if(H5Sclose(src_space[0]) < 0)
+ TEST_ERROR
+ src_space[0] = -1;
+ if(H5Sclose(vspace[0]) < 0)
+ TEST_ERROR
+ vspace[0] = -1;
+
+
+ /* Close */
+ if(H5Pclose(dcpl) < 0)
+ TEST_ERROR
+ dcpl = -1;
+
+ PASSED();
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ for(i = 0; i < (sizeof(src_space) / sizeof(src_space[0])); i++) {
+ if(src_space[i] >= 0)
+ (void)H5Sclose(src_space[i]);
+ if(vspace[i] >= 0)
+ (void)H5Sclose(vspace[i]);
+ } /* end for */
+ if(space_out >= 0)
+ (void)H5Sclose(space_out);
+ if(dcpl >= 0)
+ (void)H5Pclose(dcpl);
+ } H5E_END_TRY;
+
+ return 1;
+} /* end test_api() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Tests datasets with virtual layout
+ *
+ * Return: Success: exit(0)
+ *
+ * Failure: exit(1)
+ *
+ * Programmer: Neil Fortner
+ * Tuesday, February 17, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ char filename[FILENAME_BUF_SIZE];
+ hid_t file, grp, fapl;
+ int nerrors = 0;
+
+ /* Testing setup */
+ h5_reset();
+ fapl = h5_fileaccess();
+
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+ nerrors += test_api();
+
+ /* Verify symbol table messages are cached */
+ //nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); VDSINC
+
+ if(nerrors)
+ goto error;
+ printf("All virtual dataset tests passed.\n");
+ //h5_cleanup(FILENAME, fapl); VDSINC
+
+ return 0;
+
+error:
+ nerrors = MAX(1, nerrors);
+ printf("***** %d VIRTUAL DATASET TEST%s FAILED! *****\n",
+ nerrors, 1 == nerrors ? "" : "S");
+ return 1;
+}
+