summaryrefslogtreecommitdiffstats
path: root/c++/test/tfile.cpp
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2001-03-01 18:07:25 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2001-03-01 18:07:25 (GMT)
commit6e7877db5e4f05e8f64dda968eb4c69d0d83d599 (patch)
tree9782d22433da73479ae53b42de9bcfc75184e8c5 /c++/test/tfile.cpp
parent0cb43aefd9fd58dbe2ae9b72dda305e0c10496ab (diff)
downloadhdf5-6e7877db5e4f05e8f64dda968eb4c69d0d83d599.zip
hdf5-6e7877db5e4f05e8f64dda968eb4c69d0d83d599.tar.gz
hdf5-6e7877db5e4f05e8f64dda968eb4c69d0d83d599.tar.bz2
[svn-r3532] Purpose:
Adding tests to the C++ API Description: The C++ API has no formal testing yet. Solution: Added tests for file and dataset interfaces. I'm still working on other tests. Platforms tested: Linux (gcc version egcs-2.91.66) I temporarily modified the Makefile on my local Linux machine and these tests work. I need Bill to help adding them permanently before I can test on an NCSA machine. I checked the files in now so Bill can do that.
Diffstat (limited to 'c++/test/tfile.cpp')
-rw-r--r--c++/test/tfile.cpp332
1 files changed, 332 insertions, 0 deletions
diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp
new file mode 100644
index 0000000..f359eb7
--- /dev/null
+++ b/c++/test/tfile.cpp
@@ -0,0 +1,332 @@
+/****************************************************************************
+ * NCSA HDF *
+ * Software Development Group *
+ * National Center for Supercomputing Applications *
+ * University of Illinois at Urbana-Champaign *
+ * 605 E. Springfield, Champaign IL 61820 *
+ * *
+ * For conditions of distribution and use, see the accompanying *
+ * hdf/COPYING file. *
+ * *
+ ****************************************************************************/
+
+/***********************************************************
+*
+* Test program: tfile
+*
+* Test the low-level file I/O features.
+*
+*************************************************************/
+
+#include <testhdf5.h>
+#include <H5Cpp.h>
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+#include <H5private.h>
+#include <H5Bprivate.h>
+#include <H5Pprivate.h>
+
+#define F1_USERBLOCK_SIZE (hsize_t)0
+#define F1_OFFSET_SIZE sizeof(haddr_t)
+#define F1_LENGTH_SIZE sizeof(hsize_t)
+#define F1_SYM_LEAF_K 4
+#define F1_SYM_INTERN_K 16
+#define FILE1 "tfile1.h5"
+
+#define F2_USERBLOCK_SIZE (hsize_t)512
+#define F2_OFFSET_SIZE 8
+#define F2_LENGTH_SIZE 8
+#define F2_SYM_LEAF_K 8
+#define F2_SYM_INTERN_K 32
+#define FILE2 "tfile2.h5"
+
+#define F3_USERBLOCK_SIZE (hsize_t)0
+#define F3_OFFSET_SIZE F2_OFFSET_SIZE
+#define F3_LENGTH_SIZE F2_LENGTH_SIZE
+#define F3_SYM_LEAF_K F2_SYM_LEAF_K
+#define F3_SYM_INTERN_K F2_SYM_INTERN_K
+#define FILE3 "tfile3.h5"
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_file_create
+ *
+ * Purpose: Test file and template creations
+ *
+ * Return: None
+ *
+ * Programmer: Binh-Minh Ribler
+ * January, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+test_file_create(void)
+{
+ hid_t tmpl1, tmpl2; /*file creation templates */
+ int iparm, iparm2;
+ herr_t ret; /*generic return value */
+
+ /* Output message about test being performed */
+ MESSAGE(5, ("Testing Low-Level File Creation I/O\n"));
+
+ /* Test create with various sequences of H5F_ACC_EXCL and */
+ /* H5F_ACC_TRUNC flags */
+
+ /* Create with H5F_ACC_EXCL */
+ /* First ensure the file does not exist */
+ //remove(FILE1);
+
+ try {
+ H5File* fid1 = new H5File (FILE1, H5F_ACC_EXCL);
+
+ /*
+ * try to create the same file with H5F_ACC_TRUNC. This should fail
+ * because fid1 is the same file and is currently open.
+ */
+ try { H5File fid2 (FILE1, H5F_ACC_TRUNC); }
+ catch( FileIException error ) {
+ // cannot use fid2 here (out of scope), but the exception was
+ // thrown only if file id was < 0, so -1 is used to verify - 1/15/01
+ VERIFY(-1, FAIL, "H5File constructor");
+ }
+ // Close file fid1
+ delete fid1;
+
+ /*
+ * Try again with H5F_ACC_EXCL. This should fail because the file already
+ * exists from the previous steps.
+ */
+ try { fid1 = new H5File( FILE1, H5F_ACC_EXCL ); }
+ catch( FileIException error ){ VERIFY(-1, FAIL, "H5File constructor"); }
+
+ // Test create with H5F_ACC_TRUNC. This will truncate the existing file.
+ fid1 = new H5File (FILE1, H5F_ACC_TRUNC);
+
+ /*
+ * Try to truncate first file again. This should fail because fid1 is the
+ * same file and is currently open.
+ */
+ try { H5File fid2 (FILE1, H5F_ACC_TRUNC); }
+ catch( FileIException error ) { VERIFY(-1, FAIL, "H5File constructor"); }
+
+ /*
+ * Try with H5F_ACC_EXCL. This should fail too because the file already
+ * exists.
+ */
+ try { H5File fid3 (FILE1, H5F_ACC_EXCL); }
+ catch( FileIException error ) { VERIFY(-1, FAIL, "H5File constructor"); }
+
+ /* Get the file-creation template */
+ FileCreatPropList tmpl1 = fid1->getCreatePlist();
+
+ hsize_t ublock = tmpl1.getUserblock();
+ VERIFY(ublock, F1_USERBLOCK_SIZE, "FileCreatPropList::H5Pget_userblock");
+
+ size_t parm1, parm2; /*file-creation parameters */
+ tmpl1.getSizes( parm1, parm2);
+ VERIFY(parm1, F1_OFFSET_SIZE, "FileCreatPropList::getSizes");
+ VERIFY(parm2, F1_LENGTH_SIZE, "FileCreatPropList::getSizes");
+
+ int iparm1, iparm2; /*file-creation parameters */
+ tmpl1.getSymk( iparm1, iparm2);
+ VERIFY(iparm1, F1_SYM_INTERN_K, "FileCreatPropList::getSymk");
+ VERIFY(iparm2, F1_SYM_LEAF_K, "FileCreatPropList::getSymk");
+
+ // tmpl1 is automatically closed; if error occurs, it'll be
+ // caught in the catch block
+
+ /* Close first file */
+ delete fid1;
+ }
+ catch( PropListIException error ) {
+ CHECK(-1, FAIL, error.getCDetailMesg());
+ }
+ catch( FileIException error ) {
+ CHECK(-1, FAIL, error.getCDetailMesg());
+ }
+
+ try
+ {
+ /* Create a new file with a non-standard file-creation template */
+ FileCreatPropList* tmpl1 = new FileCreatPropList;
+
+ /* Set the new file-creation parameters */
+ tmpl1->setUserblock (F2_USERBLOCK_SIZE);
+ tmpl1->setSizes( F2_OFFSET_SIZE, F2_LENGTH_SIZE );
+ tmpl1->setSymk( F2_SYM_INTERN_K, F2_SYM_LEAF_K );
+
+ /*
+ * Try to create second file, with non-standard file-creation template
+ * params.
+ */
+ H5File fid2( FILE2, H5F_ACC_TRUNC, *tmpl1 );
+
+ /* Release file-creation template */
+ delete tmpl1;
+
+ /* Get the file-creation template */
+ tmpl1 = new FileCreatPropList (fid2.getCreatePlist());
+
+ /* Get the file-creation parameters */
+ hsize_t ublock = tmpl1->getUserblock();
+ VERIFY(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock");
+
+ size_t parm1, parm2; /*file-creation parameters */
+ tmpl1->getSizes( parm1, parm2);
+ VERIFY(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes");
+ VERIFY(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes");
+
+ int iparm1, iparm2; /*file-creation parameters */
+ tmpl1->getSymk( iparm1, iparm2);
+ VERIFY(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk");
+ VERIFY(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk");
+
+ /* Clone the file-creation template */
+ FileCreatPropList tmpl2;
+ tmpl2.copy (*tmpl1);
+
+ /* Dynamically release file-creation template */
+ delete tmpl1;
+
+ /* Set the new file-creation parameter */
+ tmpl2.setUserblock( F3_USERBLOCK_SIZE );
+
+ /*
+ * Try to create second file, with non-standard file-creation template
+ * params
+ */
+ H5File fid3( FILE3, H5F_ACC_TRUNC, tmpl2 );
+
+ /* Get the file-creation template */
+ tmpl1 = new FileCreatPropList (fid3.getCreatePlist());
+
+ /* Get the file-creation parameters */
+ ublock = tmpl1->getUserblock();
+ VERIFY(ublock, F3_USERBLOCK_SIZE, "FileCreatPropList::getUserblock");
+
+ tmpl1->getSizes( parm1, parm2);
+ VERIFY(parm1, F3_OFFSET_SIZE, "FileCreatPropList::getSizes");
+ VERIFY(parm2, F3_LENGTH_SIZE, "FileCreatPropList::getSizes");
+
+ tmpl1->getSymk( iparm1, iparm2);
+ VERIFY(iparm1, F3_SYM_INTERN_K, "FileCreatPropList::getSymk");
+ VERIFY(iparm2, F3_SYM_LEAF_K, "FileCreatPropList::getSymk");
+
+ /* Dynamically release file-creation template */
+ delete tmpl1;
+ }
+ catch( PropListIException error ) {
+ CHECK(-1, FAIL, error.getCDetailMesg());
+ }
+ catch( FileIException error ) {
+ CHECK(-1, FAIL, error.getCDetailMesg());
+ }
+} /* test_file_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_file_open
+ *
+ * Purpose: Test file accesses
+ *
+ * Return: None
+ *
+ * Programmer: Binh-Minh Ribler
+ * January, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+test_file_open(void)
+{
+ /* Output message about test being performed */
+ MESSAGE(5, ("Testing Low-Level File Opening I/O\n"));
+
+ try {
+
+ /* Open first file */
+ H5File fid1 (FILE2, H5F_ACC_RDWR );
+
+ /* Get the file-creation template */
+ //FileCreatPropList tmpl1;
+ FileCreatPropList tmpl1 = fid1.getCreatePlist();
+
+ /* Get the file-creation parameters */
+ hsize_t ublock = tmpl1.getUserblock();
+ VERIFY(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock");
+
+ size_t parm1, parm2; /*file-creation parameters */
+ tmpl1.getSizes( parm1, parm2);
+ VERIFY(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes");
+ VERIFY(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes");
+
+ int iparm1, iparm2; /*file-creation parameters */
+ tmpl1.getSymk( iparm1, iparm2);
+ VERIFY(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk");
+ VERIFY(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk");
+ } // end of try block
+
+ catch( FileIException error ) {
+ CHECK(FAIL, FAIL, error.getCDetailMesg());
+ }
+ catch( PropListIException error ) {
+ CHECK(FAIL, FAIL, error.getCDetailMesg());
+ }
+} /* test_file_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_file
+ *
+ * Purpose: Main program
+ *
+ * Return: None
+ *
+ * Programmer: Binh-Minh Ribler
+ * January, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+test_file(void)
+{
+ /* Output message about test being performed */
+ MESSAGE(5, ("Testing Low-Level File I/O\n"));
+
+ test_file_create(); /* Test file creation (also creation templates) */
+ test_file_open(); /* Test file opening */
+} /* test_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: cleanup_file
+ *
+ * Purpose: Cleanup temporary test files
+ *
+ * Return: none
+ *
+ * Programmer: Albert Cheng
+ * July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_file(void)
+{
+ remove(FILE1);
+ remove(FILE2);
+ remove(FILE3);
+}
+