diff options
Diffstat (limited to 'c++')
-rw-r--r-- | c++/test/dsets.cpp | 109 | ||||
-rw-r--r-- | c++/test/h5cpputil.cpp | 31 | ||||
-rw-r--r-- | c++/test/h5cpputil.h | 21 | ||||
-rw-r--r-- | c++/test/tfile.cpp | 270 | ||||
-rw-r--r-- | c++/test/th5s.cpp | 159 |
5 files changed, 367 insertions, 223 deletions
diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp index 08ce98e..7b3600f 100644 --- a/c++/test/dsets.cpp +++ b/c++/test/dsets.cpp @@ -32,9 +32,9 @@ #include <iostream> #endif -#include "H5Cpp.h" -#include "h5test.h" #include "testhdf5.h" +#include "h5test.h" +#include "H5Cpp.h" #ifndef H5_NO_NAMESPACE using namespace H5; @@ -42,23 +42,20 @@ using namespace H5; #include "h5cpputil.h" -const char *FILENAME[] = { - "dataset", - NULL -}; - -#define DSET_DEFAULT_NAME "default" -#define DSET_CHUNKED_NAME "chunked" -#define DSET_SIMPLE_IO_NAME "simple_io" -#define DSET_TCONV_NAME "tconv" -#define DSET_COMPRESS_NAME "compressed" -#define DSET_BOGUS_NAME "bogus" +const string FILE1("dataset.h5"); +const string DSET_DEFAULT_NAME("default"); +const string DSET_CHUNKED_NAME("chunked"); +const string DSET_SIMPLE_IO_NAME("simple_io"); +const string DSET_TCONV_NAME ("tconv"); +const string DSET_COMPRESS_NA("compressed"); +const string DSET_BOGUS_NAME ("bogus"); -#define H5Z_FILTER_BOGUS 305 +const int H5Z_FILTER_BOGUS = 305; -/* Local prototypes for filter functions */ +// Local prototypes static size_t bogus(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); +void cleanup_dsets(void); /*------------------------------------------------------------------------- @@ -113,7 +110,7 @@ test_create( H5File& file) (DSET_DEFAULT_NAME, PredType::NATIVE_DOUBLE, space)); // continuation here, that means no exception has been thrown H5_FAILED(); - cout << " Library allowed overwrite of existing dataset." << endl; + cerr << " Library allowed overwrite of existing dataset." << endl; goto error; } catch (FileIException E ) // catching invalid creating dataset @@ -136,7 +133,7 @@ test_create( H5File& file) dataset = new DataSet (file.openDataSet( "does_not_exist" )); // continuation here, that means no exception has been thrown H5_FAILED(); - cout << " Opened a non-existent dataset." << endl; + cerr << " Opened a non-existent dataset." << endl; goto error; } catch (FileIException E ) // catching creating non-existent dataset @@ -203,8 +200,8 @@ check_values (hsize_t i, hsize_t j, int apoint, int acheck) if (apoint != acheck) { H5_FAILED(); - cout << " Read different values than written.\n" << endl; - cout << " At index " << (unsigned long)i << "," << + cerr << " Read different values than written.\n" << endl; + cerr << " At index " << (unsigned long)i << "," << (unsigned long)j << endl; return -1; } @@ -353,14 +350,14 @@ test_tconv( H5File& file) in[4*i+3]!=out[4*i+0]) { H5_FAILED(); - cout << " Read with byte order conversion failed." << endl; + cerr << " Read with byte order conversion failed." << endl; goto error; } } delete [] out; delete [] in; - cout << " PASSED" << endl; + cerr << " PASSED" << endl; return 0; } // end try @@ -375,9 +372,9 @@ test_tconv( H5File& file) /* This message derives from H5Z */ const H5Z_class_t H5Z_BOGUS[1] = {{ - H5Z_CLASS_T_VERS, /* H5Z_class_t version number */ + H5Z_CLASS_T_VERS, /* H5Z_class_t version number */ H5Z_FILTER_BOGUS, /* Filter id number */ - 1, 1, /* Encode and decode enabled */ + 1, 1, /* Encode and decode enabled */ "bogus", /* Filter name for debugging */ NULL, /* The "can apply" callback */ NULL, /* The "set local" callback */ @@ -495,8 +492,8 @@ test_compression(H5File& file) for (j=0; j<size[1]; j++) { if (0!=check[i][j]) { H5_FAILED(); - cout << " Read a non-zero value." << endl; - cout << " At index " << (unsigned long)i << "," << + cerr << " Read a non-zero value." << endl; + cerr << " At index " << (unsigned long)i << "," << (unsigned long)j << endl; goto error; } @@ -622,12 +619,12 @@ test_compression(H5File& file) if (points[hs_offset[0]+i][hs_offset[1]+j] != check[hs_offset[0]+i][hs_offset[1]+j]) { H5_FAILED(); - cout << " Read different values than written.\n" << endl; - cout << " At index " << (unsigned long)(hs_offset[0]+i) << + cerr << " Read different values than written.\n" << endl; + cerr << " At index " << (unsigned long)(hs_offset[0]+i) << "," << (unsigned long)(hs_offset[1]+j) << endl; - cout << " At original: " << (int)points[hs_offset[0]+i][hs_offset[1]+j] << endl; - cout << " At returned: " << (int)check[hs_offset[0]+i][hs_offset[1]+j] << endl; + cerr << " At original: " << (int)points[hs_offset[0]+i][hs_offset[1]+j] << endl; + cerr << " At returned: " << (int)check[hs_offset[0]+i][hs_offset[1]+j] << endl; goto error; } } @@ -640,7 +637,7 @@ test_compression(H5File& file) #else TESTING("deflate filter"); SKIPPED(); - cout << not_supported << endl; + cerr << not_supported << endl; #endif /*---------------------------------------------------------------------- @@ -748,7 +745,7 @@ test_multiopen (H5File& file) if (cur_size[0]!=tmp_size[0]) { H5_FAILED(); - cout << " Got " << (int)tmp_size[0] << " instead of " + cerr << " Got " << (int)tmp_size[0] << " instead of " << (int)cur_size[0] << "!" << endl; delete space; goto error; @@ -843,7 +840,7 @@ test_types(H5File& file) // catch exceptions thrown in try block of bitfield_1 catch (Exception E) { - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } @@ -864,7 +861,7 @@ test_types(H5File& file) try { dset->write (buf, type); } catch(DataSetIException E) { - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; delete dset; goto error; @@ -874,7 +871,7 @@ test_types(H5File& file) // catch exceptions thrown in try block of bitfield_2 catch (Exception E) { - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } @@ -906,12 +903,12 @@ test_types(H5File& file) // catch exceptions thrown in try block of opaque_1 catch (DataSetIException E) { delete optype; - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } catch (Exception E) { - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } @@ -941,12 +938,12 @@ test_types(H5File& file) } //end try block of opaque_2 catch (DataSetIException E) { delete optype; - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } catch (Exception E) { - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } @@ -956,7 +953,7 @@ test_types(H5File& file) } // end top try block catch (Exception E) { // Group and DataType exceptions - cout << "Failure in " << E.getFuncName() << " - " + cerr << "Failure in " << E.getFuncName() << " - " << E.getDetailMsg() << endl; goto error; } @@ -993,9 +990,6 @@ main(void) hid_t fapl_id; fapl_id = h5_fileaccess(); // in h5test.c, returns a file access template - char filename[1024]; - h5_fixname(FILENAME[0], fapl_id, filename, sizeof filename); - int nerrors=0; // keep track of number of failures occurr try { @@ -1008,9 +1002,9 @@ main(void) // list object to pass in H5File::H5File FileAccPropList fapl(fapl_id); - H5File file( filename, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl); + H5File file(FILE1, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl); - /* Cause the library to emit initial messages */ + // Cause the library to emit initial messages Group grp = file.createGroup( "emit diagnostics", 0); grp.setComment( ".", "Causes diagnostic messages to be emitted"); @@ -1030,10 +1024,31 @@ main(void) { return(test_report(nerrors, string(" Dataset"))); } - /* use C test utility routine to clean up data files */ - h5_cleanup(FILENAME, fapl_id); - /* print out dsets test results */ + // Clean up data file + cleanup_dsets(); + + // Print out dsets test results cerr << endl << endl; return(test_report(nerrors, string(" Dataset"))); } + +/*------------------------------------------------------------------------- + * Function: cleanup_dsets + * + * Purpose: Cleanup temporary test files + * + * Return: none + * + * Programmer: (use C version) + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +cleanup_dsets(void) +{ + remove(FILE1.c_str()); +} /* cleanup_dsets */ + diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp index 85ba2d2..020bab0 100644 --- a/c++/test/h5cpputil.cpp +++ b/c++/test/h5cpputil.cpp @@ -31,8 +31,8 @@ using namespace std; #endif -#include "h5cpputil.h" #include "h5test.h" +#include "h5cpputil.h" /*------------------------------------------------------------------------- * Function: test_report @@ -58,16 +58,39 @@ int test_report( int nerrors, const string& testname ) { nerrors = MAX(1, nerrors); if (1 == nerrors) - cout << "***** " << nerrors << testname + cerr << "***** " << nerrors << testname << " TEST FAILED! *****" << endl; else - cout << "***** " << nerrors << testname + cerr << "***** " << nerrors << testname << " TESTS FAILED! *****" << endl; return 1; } else { - cout << "All" << testname << " tests passed." << endl; + cerr << "All" << testname << " tests passed." << endl; return 0; } } + +/*------------------------------------------------------------------------- + * Function: issue_fail_msg + * + * Purpose: Displays that a function has failed with its location. + * + * Return: None + * + * Programmer: Binh-Minh Ribler (copied and modified macro CHECK from C) + * Monday, December 20, 2004 + * + *------------------------------------------------------------------------- + */ +void issue_fail_msg(const char* where, int line, const char* file_name) +{ + if (GetTestVerbosity()>=VERBO_HI) + { + cerr << " Call to routine: " << where << " at line " << line + << " in " << file_name << "has failed" << endl; + } +} + + diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h index b3d7a1b..d67c459 100644 --- a/c++/test/h5cpputil.h +++ b/c++/test/h5cpputil.h @@ -25,8 +25,29 @@ #ifndef H5_NO_STD int test_report (int, const std::string&); +using std::cerr; +using std::endl; #else int test_report (int, const string&); #endif +void issue_fail_msg(const char* where, int line, const char* file_name); + +template <class Type1, class Type2> + void verify_val(Type1 x, Type2 value, const char* where, int line, const char* file_name) +{ + if (GetTestVerbosity()>=VERBO_HI) + { + cerr << " Call to routine: " << where << " at line " << line + << " in " << file_name << " had value " << x << endl; + } + if (x != value) + { + cerr << "*** UNEXPECTED VALUE from " << where << " should be " + << value << ", but is " << x << " at line " << line + << " in " << file_name << endl; + H5Eprint (stdout); + } +} + #endif diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp index f5484eb..1e859bc 100644 --- a/c++/test/tfile.cpp +++ b/c++/test/tfile.cpp @@ -18,13 +18,12 @@ EXTERNAL ROUTINES/VARIABLES: These routines are in the test directory of the C library: - h5_reset() -- in h5test.c, resets the library by closing it h5_fileaccess() -- in h5test.c, returns a file access template - h5_fixname() -- in h5test.c, create a file name from a file base name - h5_cleanup() -- in h5test.c, cleanup temporary test files ***************************************************************************/ +#include <string> + #ifdef OLD_HEADER_FILENAME #include <iostream.h> #else @@ -33,37 +32,35 @@ #include "H5Cpp.h" #include "testhdf5.h" +#include "h5cpputil.h" #ifndef H5_NO_NAMESPACE using namespace H5; #endif -#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" - -#define KB 1024 -#define FILE4 "tfile4.h5" - -#define FILE5 "tfile5.h5" -#define NAME_LEN 64 +const int F1_USERBLOCK_SIZE = (hsize_t)0; +const int F1_OFFSET_SIZE = sizeof(haddr_t); +const int F1_LENGTH_SIZE = sizeof(hsize_t); +const int F1_SYM_LEAF_K = 4; +const int F1_SYM_INTERN_K = 16; +const string FILE1("tfile1.h5"); + +const int F2_USERBLOCK_SIZE = (hsize_t)512; +const int F2_OFFSET_SIZE = 8; +const int F2_LENGTH_SIZE = 8; +const int F2_SYM_LEAF_K = 8; +const int F2_SYM_INTERN_K = 32; +const string FILE2("tfile2.h5"); + +const int F3_USERBLOCK_SIZE = (hsize_t)0; +const int F3_OFFSET_SIZE = F2_OFFSET_SIZE; +const int F3_LENGTH_SIZE = F2_LENGTH_SIZE; +const int F3_SYM_LEAF_K = F2_SYM_LEAF_K; +const int F3_SYM_INTERN_K = F2_SYM_INTERN_K; +const string FILE3("tfile3.h5"); + +const int KB = 1024; +const string FILE4("tfile4.h5"); /*------------------------------------------------------------------------- @@ -91,49 +88,50 @@ test_file_create(void) /* Create with H5F_ACC_EXCL */ /* First ensure the file does not exist */ - remove(FILE1); + remove(FILE1.c_str()); try { - H5File* fid1 = new H5File (FILE1, H5F_ACC_EXCL); + H5File* file1 = 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. + * because file1 is the same file and is currently open. */ try { - H5File fid2 (FILE1, H5F_ACC_TRUNC); // should throw E + H5File file2 (FILE1, H5F_ACC_TRUNC); // should throw E // Should FAIL but didn't - BMR (Note 1): a macro, with a diff // name, that skips the comparison b/w the 1st & 2nd args would - // be more appropriate, but VERIFY can be used for now - Mar 13, 01 + // be more appropriate, but verify_val can be used for now; // also, more text about what is testing would be better. - VERIFY(fid2.getId(), FAIL, "H5File constructor"); + verify_val(file2.getId(), FAIL, "H5File constructor", __LINE__, __FILE__); } catch( FileIException E ) {} // do nothing, FAIL expected - // Close file fid1 - delete fid1; + // Close file file1 + + delete file1; /* * 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 ); // should throw E - VERIFY(fid1->getId(), FAIL, "H5File constructor"); + file1 = new H5File( FILE1, H5F_ACC_EXCL ); // should throw E + verify_val(file1->getId(), FAIL, "H5File constructor", __LINE__, __FILE__); } catch( FileIException E ) {} // do nothing, FAIL expected // Test create with H5F_ACC_TRUNC. This will truncate the existing file. - fid1 = new H5File (FILE1, H5F_ACC_TRUNC); + file1 = new H5File (FILE1, H5F_ACC_TRUNC); /* - * Try to truncate first file again. This should fail because fid1 is the + * Try to truncate first file again. This should fail because file1 is the * same file and is currently open. */ try { - H5File fid2 (FILE1, H5F_ACC_TRUNC); // should throw E - VERIFY(fid2.getId(), FAIL, "H5File constructor"); + H5File file2 (FILE1, H5F_ACC_TRUNC); // should throw E + verify_val(file2.getId(), FAIL, "H5File constructor", __LINE__, __FILE__); } catch( FileIException E ) {} // do nothing, FAIL expected @@ -142,38 +140,38 @@ test_file_create(void) * exists. */ try { - H5File fid3 (FILE1, H5F_ACC_EXCL); // should throw E - VERIFY(fid3.getId(), FAIL, "H5File constructor"); + H5File file3 (FILE1, H5F_ACC_EXCL); // should throw E + verify_val(file3.getId(), FAIL, "H5File constructor", __LINE__, __FILE__); } catch( FileIException E ) {} // do nothing, FAIL expected /* Get the file-creation template */ - FileCreatPropList tmpl1 = fid1->getCreatePlist(); + FileCreatPropList tmpl1 = file1->getCreatePlist(); hsize_t ublock = tmpl1.getUserblock(); - VERIFY(ublock, F1_USERBLOCK_SIZE, "FileCreatPropList::getUserblock"); + verify_val(ublock, F1_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__); 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"); + verify_val(parm1, F1_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); + verify_val(parm2, F1_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); - unsigned 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"); + unsigned iparm1,iparm2; /*file-creation parameters */ + tmpl1.getSymk( iparm1, iparm2); + verify_val(iparm1, F1_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); + verify_val(iparm2, F1_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); // tmpl1 is automatically closed; if error occurs, it'll be // caught in the catch block /* Close first file */ - delete fid1; + delete file1; } catch( PropListIException E ) { - CHECK(FAIL, FAIL, E.getCFuncName()); + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); } catch( FileIException E ) { - CHECK(FAIL, FAIL, E.getCFuncName()); + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); } try @@ -190,27 +188,27 @@ test_file_create(void) * Try to create second file, with non-standard file-creation template * params. */ - H5File fid2( FILE2, H5F_ACC_TRUNC, *tmpl1 ); + H5File file2( FILE2, H5F_ACC_TRUNC, *tmpl1 ); /* Release file-creation template */ delete tmpl1; /* Get the file-creation template */ - tmpl1 = new FileCreatPropList (fid2.getCreatePlist()); + tmpl1 = new FileCreatPropList (file2.getCreatePlist()); /* Get the file-creation parameters */ hsize_t ublock = tmpl1->getUserblock(); - VERIFY(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock"); + verify_val(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__); 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"); + verify_val(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); + verify_val(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); - unsigned 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"); + unsigned iparm1,iparm2; /*file-creation parameters */ + tmpl1->getSymk( iparm1, iparm2); + verify_val(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); + verify_val(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); /* Clone the file-creation template */ FileCreatPropList tmpl2; @@ -226,28 +224,28 @@ test_file_create(void) * Try to create second file, with non-standard file-creation template * params */ - H5File fid3( FILE3, H5F_ACC_TRUNC, tmpl2 ); + H5File file3( FILE3, H5F_ACC_TRUNC, tmpl2 ); /* Get the file-creation template */ - tmpl1 = new FileCreatPropList (fid3.getCreatePlist()); + tmpl1 = new FileCreatPropList (file3.getCreatePlist()); /* Get the file-creation parameters */ ublock = tmpl1->getUserblock(); - VERIFY(ublock, F3_USERBLOCK_SIZE, "FileCreatPropList::getUserblock"); + verify_val(ublock, F3_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__); tmpl1->getSizes( parm1, parm2); - VERIFY(parm1, F3_OFFSET_SIZE, "FileCreatPropList::getSizes"); - VERIFY(parm2, F3_LENGTH_SIZE, "FileCreatPropList::getSizes"); + verify_val(parm1, F3_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); + verify_val(parm2, F3_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); tmpl1->getSymk( iparm1, iparm2); - VERIFY(iparm1, F3_SYM_INTERN_K, "FileCreatPropList::getSymk"); - VERIFY(iparm2, F3_SYM_LEAF_K, "FileCreatPropList::getSymk"); + verify_val(iparm1, F3_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); + verify_val(iparm2, F3_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); /* Dynamically release file-creation template */ delete tmpl1; } catch( PropListIException E ) { - CHECK(FAIL, FAIL, E.getCFuncName()); + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); } } /* test_file_create() */ @@ -275,28 +273,28 @@ test_file_open(void) try { /* Open first file */ - H5File fid1 (FILE2, H5F_ACC_RDWR ); + H5File file1 (FILE2, H5F_ACC_RDWR ); /* Get the file-creation template */ - FileCreatPropList tmpl1 = fid1.getCreatePlist(); + FileCreatPropList tmpl1 = file1.getCreatePlist(); /* Get the file-creation parameters */ hsize_t ublock = tmpl1.getUserblock(); - VERIFY(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock"); + verify_val(ublock, F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__); 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"); + verify_val(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); + verify_val(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__); - unsigned 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"); + unsigned iparm1,iparm2; /*file-creation parameters */ + tmpl1.getSymk( iparm1, iparm2); + verify_val(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); + verify_val(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__); } // end of try block catch( Exception E ) { - CHECK(FAIL, FAIL, E.getCFuncName()); + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); } } /* test_file_open() */ @@ -329,23 +327,24 @@ test_file_size(void) // list object to pass in H5File::H5File FileAccPropList fapl(fapl_id); - // Set to sec2 driver. Do we want to test other file drivers. + // Set to sec2 driver. Do we want to test other file drivers? // They're not tested in C++. - fapl.setSec2(); + // File drivers seem not implemented. + //fapl.setSec2(); // Create a file - H5File fid( FILE4, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl); + H5File file4( FILE4, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl); // Get file size - hsize_t file_size = fid.getFileSize(); + hsize_t file_size = file4.getFileSize(); // Check if file size is reasonable. It's supposed to be 2KB now. if(file_size<1*KB || file_size>4*KB) - CHECK(FAIL, FAIL, "H5File::getFileSize"); + issue_fail_msg("H5File::getFileSize", __LINE__, __FILE__); } // end of try block catch( Exception E ) { - CHECK(FAIL, FAIL, E.getCFuncName()); + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); } // use C test utility routine to close property list. @@ -355,6 +354,90 @@ test_file_size(void) /*------------------------------------------------------------------------- + * Function: test_file_name + * + * Purpose: Test getting file's name. + * + * Return: None + * + * Programmer: Binh-Minh Ribler + * July, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +const int RANK = 2; +const int NX = 4; +const int NY = 5; +const string GROUPNAME ("group"); +const string DSETNAME ("dataset"); +const string ATTRNAME ("attribute"); +const string DTYPENAME ("compound"); + +/* Compound datatype */ +typedef struct s1_t { + unsigned int a; + float b; +} s1_t; + +static void +test_file_name() +{ + /* Output message about test being performed */ + MESSAGE(5, ("Testing File Name\n")); + + string file_name; + try { + // Create a file using default properties. + H5File file4(FILE4, H5F_ACC_TRUNC); + + // Get file name from the file instance. + file_name = file4.getFileName(); + + /* Create a group in the root group */ + Group group(file4.createGroup(GROUPNAME, 0)); + + /* Get and verify file name */ + file_name = group.getFileName(); + + /* Create the data space */ + hsize_t dims[RANK] = {NX, NY}; + DataSpace space(RANK, dims); + + /* Create a new dataset */ + DataSet dataset(file4.createDataSet (DSETNAME, PredType::NATIVE_INT, space)); + + /* Get and verify file name */ + file_name = dataset.getFileName(); + + /* Create an attribute for the dataset */ + Attribute attr(dataset.createAttribute(ATTRNAME, PredType::NATIVE_INT, space)); + + /* Get and verify file name */ + file_name = attr.getFileName(); + + /* Create a compound datatype */ + CompType comp_type (sizeof(s1_t)); + + /* Insert fields */ + comp_type.insertMember("a", HOFFSET(s1_t, a), PredType::NATIVE_INT); + comp_type.insertMember("b", HOFFSET(s1_t, b), PredType::NATIVE_FLOAT); + + /* Save it on file */ + comp_type.commit(file4, DTYPENAME); + + /* Get and verify file name */ + comp_type.getFileName(); + } // end of try block + catch (Exception E) { + issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__); + } + +} /* test_file_name() */ + + +/*------------------------------------------------------------------------- * Function: test_file * * Purpose: Main program @@ -377,6 +460,7 @@ test_file(void) test_file_create(); /* Test file creation (also creation templates) */ test_file_open(); /* Test file opening */ test_file_size(); /* Test file size */ + test_file_name(); /* Test getting file's name */ } /* test_file() */ @@ -396,8 +480,8 @@ test_file(void) void cleanup_file(void) { - remove(FILE1); - remove(FILE2); - remove(FILE3); - remove(FILE4); + remove(FILE1.c_str()); + remove(FILE2.c_str()); + remove(FILE3.c_str()); + remove(FILE4.c_str()); } /* cleanup_file */ diff --git a/c++/test/th5s.cpp b/c++/test/th5s.cpp index eac6703..dacd1ef 100644 --- a/c++/test/th5s.cpp +++ b/c++/test/th5s.cpp @@ -29,45 +29,46 @@ #include "H5Cpp.h" #include "testhdf5.h" +#include "h5cpputil.h" #ifndef H5_NO_NAMESPACE using namespace H5; #endif /* !H5_NO_NAMESPACE */ -#define TESTFILE "th5s.h5" -#define DATAFILE "th5s1.h5" +const string TESTFILE("th5s.h5"); +const string DATAFILE("th5s1.h5"); /* 3-D dataset with fixed dimensions */ -#define SPACE1_NAME "Space1" -#define SPACE1_RANK 3 -#define SPACE1_DIM1 3 -#define SPACE1_DIM2 15 -#define SPACE1_DIM3 13 +const string SPACE1_NAME("Space1"); +const int SPACE1_RANK = 3; +const int SPACE1_DIM1 = 3; +const int SPACE1_DIM2 = 15; +const int SPACE1_DIM3 = 13; /* 4-D dataset with one unlimited dimension */ -#define SPACE2_NAME "Space2" -#define SPACE2_RANK 4 -#define SPACE2_DIM1 0 -#define SPACE2_DIM2 15 -#define SPACE2_DIM3 13 -#define SPACE2_DIM4 23 -#define SPACE2_MAX1 H5S_UNLIMITED -#define SPACE2_MAX2 15 -#define SPACE2_MAX3 13 -#define SPACE2_MAX4 23 +const string SPACE2_NAME("Space2"); +const int SPACE2_RANK = 4; +const int SPACE2_DIM1 = 0; +const int SPACE2_DIM2 = 15; +const int SPACE2_DIM3 = 13; +const int SPACE2_DIM4 = 23; +const hsize_t SPACE2_MAX1 = H5S_UNLIMITED; +const hsize_t SPACE2_MAX2 = 15; +const hsize_t SPACE2_MAX3 = 13; +const hsize_t SPACE2_MAX4 = 23; /* Scalar dataset with simple datatype */ -#define SPACE3_NAME "Scalar1" -#define SPACE3_RANK 0 +const string SPACE3_NAME("Scalar1"); +const int SPACE3_RANK = 0; unsigned space3_data=65; /* Scalar dataset with compound datatype */ -#define SPACE4_NAME "Scalar2" -#define SPACE4_RANK 0 -#define SPACE4_FIELDNAME1 "c1" -#define SPACE4_FIELDNAME2 "u" -#define SPACE4_FIELDNAME3 "f" -#define SPACE4_FIELDNAME4 "c2" +const string SPACE4_NAME("Scalar2"); +const int SPACE4_RANK = 0; +const string SPACE4_FIELDNAME1("c1"); +const string SPACE4_FIELDNAME2("u"); +const string SPACE4_FIELDNAME3("f"); +const string SPACE4_FIELDNAME4("c2"); size_t space4_field1_off=0; size_t space4_field2_off=0; size_t space4_field3_off=0; @@ -120,20 +121,20 @@ test_h5s_basic(void) // Get simple extent npoints of the dataspace sid1 and verify it hssize_t n; /* Number of dataspace elements */ n = sid1.getSimpleExtentNpoints(); - VERIFY(n, SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3, - "H5Sget_simple_extent_npoints"); + verify_val(n, SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3, + "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Get the logical rank of dataspace sid1 and verify it int rank; /* Logical rank of dataspace */ rank = sid1.getSimpleExtentNdims(); - VERIFY(rank, SPACE1_RANK, "H5Sget_simple_extent_ndims"); + verify_val(rank, SPACE1_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); // Retrieves dimension size of dataspace sid1 and verify it int ndims; /* Number of dimensions */ hsize_t tdims[4]; /* Dimension array to test with */ ndims = sid1.getSimpleExtentDims( tdims ); - VERIFY(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(unsigned)), 0, - "H5Sget_simple_extent_dims"); + verify_val(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(unsigned)), 0, + "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); // Create simple dataspace sid2 hsize_t max2[] = {SPACE2_MAX1, SPACE2_MAX2, SPACE2_MAX3, SPACE2_MAX4}; @@ -141,24 +142,24 @@ test_h5s_basic(void) // Get simple extent npoints of dataspace sid2 and verify it n = sid2.getSimpleExtentNpoints(); - VERIFY(n, SPACE2_DIM1 * SPACE2_DIM2 * SPACE2_DIM3 * SPACE2_DIM4, - "H5Sget_simple_extent_npoints"); + verify_val(n, SPACE2_DIM1 * SPACE2_DIM2 * SPACE2_DIM3 * SPACE2_DIM4, + "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Get the logical rank of dataspace sid2 and verify it rank = sid2.getSimpleExtentNdims(); - VERIFY(rank, SPACE2_RANK, "H5Sget_simple_extent_ndims"); + verify_val(rank, SPACE2_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); // Retrieves dimension size and max size of dataspace sid2 and // verify them ndims = sid2.getSimpleExtentDims( tdims, tmax ); - VERIFY(HDmemcmp(tdims, dims2, SPACE2_RANK * sizeof(unsigned)), 0, - "H5Sget_simple_extent_dims"); - VERIFY(HDmemcmp(tmax, max2, SPACE2_RANK * sizeof(unsigned)), 0, - "H5Sget_simple_extent_dims"); + verify_val(HDmemcmp(tdims, dims2, SPACE2_RANK * sizeof(unsigned)), 0, + "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); + verify_val(HDmemcmp(tmax, max2, SPACE2_RANK * sizeof(unsigned)), 0, + "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); } // end of first try block catch( DataSpaceIException error ) { - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } /* @@ -168,10 +169,8 @@ test_h5s_basic(void) try { DataSpace manydims_ds(H5S_MAX_RANK+1, dims3, NULL); - // Should FAIL but didn't - BMR (Note 1): a new macro that skips - // the comparison b/w the 1st & 2nd args would be more appropriate, - // but VERIFY will still do - Mar 12, 01 - VERIFY(manydims_ds.getId(), FAIL, "DataSpace constructor"); + // Should FAIL but didn't, so issue an error message + issue_fail_msg("DataSpace constructor", __LINE__, __FILE__); } catch( DataSpaceIException error ) {} // do nothing, FAIL expected @@ -184,11 +183,11 @@ test_h5s_basic(void) */ char testfile[512]=""; char *srcdir = getenv("srcdir"); - if (srcdir && ((strlen(srcdir) + strlen(TESTFILE) + 1) < sizeof(testfile))){ + if (srcdir && ((strlen(srcdir) + strlen(TESTFILE.c_str()) + 1) < sizeof(testfile))){ strcpy(testfile, srcdir); strcat(testfile, "/"); } - strcat(testfile, TESTFILE); + strcat(testfile, TESTFILE.c_str()); try { // try block for testing higher dimensionality // Create file @@ -198,15 +197,17 @@ test_h5s_basic(void) // what the library can handle and this operation should fail. try { DataSet dset1 = fid1.openDataSet( "dset" ); - VERIFY( dset1.getId(), FAIL, "H5File::openDataSet"); + + // but didn't, issue an error message + issue_fail_msg("H5File::openDataSet", __LINE__, __FILE__); } catch( FileIException error ) { } // do nothing, FAIL expected } // end of try block for testing higher dimensionality // catch exception thrown by H5File constructor catch( FileIException error ) { - CHECK_I(FAIL, error.getCFuncName()); - cout << "***cannot open the pre-created H5S_MAX_RANK test file" << + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); + cerr << "***cannot open the pre-created H5S_MAX_RANK test file" << testfile << endl; } @@ -217,7 +218,7 @@ test_h5s_basic(void) dims1[0] = 0; try { DataSpace wrongdim_ds (SPACE1_RANK, dims1); - VERIFY(wrongdim_ds.getId(), FAIL, "DataSpace constructor"); + verify_val(wrongdim_ds.getId(), FAIL, "DataSpace constructor", __LINE__, __FILE__); } catch( DataSpaceIException error ) {} // do nothing; FAIL expected @@ -225,13 +226,13 @@ test_h5s_basic(void) DataSpace sid3 (H5S_SIMPLE); // Attempts to use incorrect dimensions, should fail - try { sid3.setExtentSimple( SPACE1_RANK, dims1 ); } - catch( DataSpaceIException error ) - { - // ret value is already < 0 for an exception to be thrown; - // also see Note 1 above - VERIFY(FAIL, FAIL, error.getCFuncName()); + try { + sid3.setExtentSimple( SPACE1_RANK, dims1 ); + + // but didn't, issue an error message + issue_fail_msg("DataSpace::setExtentSimple", __LINE__, __FILE__); } + catch (DataSpaceIException error) {} // do nothing, FAIL expected } /* test_h5s_basic() */ /*------------------------------------------------------------------------- @@ -266,22 +267,22 @@ test_h5s_scalar_write(void) //n = H5Sget_simple_extent_npoints(sid1); hssize_t n; /* Number of dataspace elements */ n = sid1.getSimpleExtentNpoints(); - VERIFY(n, 1, "DataSpace::getSimpleExtentNpoints"); + verify_val(n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); int rank; /* Logical rank of dataspace */ rank = sid1.getSimpleExtentNdims(); - VERIFY(rank, SPACE3_RANK, "DataSpace::getSimpleExtentNdims"); + verify_val(rank, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); // Retrieves dimension size of dataspace sid1 and verify it int ndims; /* Number of dimensions */ hsize_t tdims[4]; /* Dimension array to test with */ ndims = sid1.getSimpleExtentDims( tdims ); - VERIFY(ndims, 0, "DataSpace::getSimpleExtentDims"); + verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); /* Verify extent type */ H5S_class_t ext_type; /* Extent type */ ext_type = sid1.getSimpleExtentType(); - VERIFY(ext_type, H5S_SCALAR, "DataSpace::getSimpleExtentType"); + verify_val(ext_type, H5S_SCALAR, "DataSpace::getSimpleExtentType", __LINE__, __FILE__); /* Create a dataset */ DataSet dataset = fid1.createDataSet("Dataset1", PredType::NATIVE_UINT,sid1); @@ -290,7 +291,7 @@ test_h5s_scalar_write(void) } // end of try block catch (Exception error) { - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } } /* test_h5s_scalar_write() */ @@ -328,23 +329,23 @@ test_h5s_scalar_read(void) // Get the number of dataspace elements hssize_t n = sid1.getSimpleExtentNpoints(); - VERIFY(n, 1, "H5Sget_simple_extent_npoints"); + verify_val(n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Get the logical rank of the dataspace int ndims = sid1.getSimpleExtentNdims(); - VERIFY(ndims, SPACE3_RANK, "H5Sget_simple_extent_ndims"); + verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); ndims = sid1.getSimpleExtentDims(tdims); - VERIFY(ndims, 0, "H5Sget_simple_extent_dims"); + verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); unsigned rdata; /* Scalar data read in */ dataset.read(&rdata, PredType::NATIVE_UINT); - VERIFY(rdata, space3_data, "H5Dread"); + verify_val(rdata, space3_data, "DataSet::read", __LINE__, __FILE__); } // end of try block catch (Exception error) { // all the exceptions caused by negative returned values by C APIs - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } } /* test_h5s_scalar_read() */ @@ -381,7 +382,7 @@ test_h5s_null(void) //n = H5Sget_simple_extent_npoints(sid1); hssize_t n; /* Number of dataspace elements */ n = sid1.getSimpleExtentNpoints(); - VERIFY(n, 0, "DataSpace::getSimpleExtentNpoints"); + verify_val(n, 0, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Create a dataset DataSet dataset = fid1.createDataSet("Dataset1", PredType::NATIVE_UINT,sid1); @@ -391,11 +392,11 @@ test_h5s_null(void) // Read the data. Make sure no change to the buffer dataset.read(&space5_data, PredType::NATIVE_INT); - VERIFY(space5_data, 7, "H5Dread"); + verify_val(space5_data, 7, "DataSet::read", __LINE__, __FILE__); } // end of try block catch (Exception error) { - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } } /* test_h5s_null() */ @@ -446,15 +447,15 @@ test_h5s_compound_scalar_write(void) // Get the number of dataspace elements hssize_t n = sid1.getSimpleExtentNpoints(); - VERIFY(n, 1, "H5Sget_simple_extent_npoints"); + verify_val(n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Get the logical rank of the dataspace int ndims = sid1.getSimpleExtentNdims(); - VERIFY(ndims, SPACE3_RANK, "H5Sget_simple_extent_ndims"); + verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); hsize_t tdims[4]; /* Dimension array to test with */ ndims = sid1.getSimpleExtentDims(tdims); - VERIFY(ndims, 0, "H5Sget_simple_extent_dims"); + verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); /* Create a dataset */ DataSet dataset = fid1.createDataSet("Dataset1", tid1, sid1); @@ -464,7 +465,7 @@ test_h5s_compound_scalar_write(void) catch (Exception error) { // all the exceptions caused by negative returned values by C APIs - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } } /* test_h5s_compound_scalar_write() */ @@ -503,14 +504,14 @@ test_h5s_compound_scalar_read(void) // Get the number of dataspace elements hssize_t n = sid1.getSimpleExtentNpoints(); - VERIFY(n, 1, "H5Sget_simple_extent_npoints"); + verify_val(n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__); // Get the logical rank of the dataspace int ndims = sid1.getSimpleExtentNdims(); - VERIFY(ndims, SPACE3_RANK, "H5Sget_simple_extent_ndims"); + verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__); ndims = sid1.getSimpleExtentDims(tdims); - VERIFY(ndims, 0, "H5Sget_simple_extent_dims"); + verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__); // Get the datatype of this dataset. CompType type(dataset); @@ -521,11 +522,11 @@ test_h5s_compound_scalar_read(void) // Verify read data if(HDmemcmp(&space4_data,&rdata,sizeof(struct space4_struct))) { - cout << "scalar data different: space4_data.c1=" + cerr << "scalar data different: space4_data.c1=" << space4_data.c1 << ", read_data4.c1=" << rdata.c1 << endl; - cout << "scalar data different: space4_data.u=" + cerr << "scalar data different: space4_data.u=" << space4_data.u << ", read_data4.u=" << rdata.u << endl; - cout << "scalar data different: space4_data.f=" + cerr << "scalar data different: space4_data.f=" << space4_data.f << ", read_data4.f=" << rdata.f << endl; TestErrPrintf("scalar data different: space4_data.c1=%c, read_data4.c1=%c\n", space4_data.c1, rdata.c2); @@ -534,7 +535,7 @@ test_h5s_compound_scalar_read(void) catch (Exception error) { // all the exceptions caused by negative returned values by C APIs - CHECK(FAIL, FAIL, error.getCFuncName()); + issue_fail_msg(error.getCFuncName(), __LINE__, __FILE__); } } /* test_h5s_compound_scalar_read() */ @@ -584,6 +585,6 @@ test_h5s(void) void cleanup_h5s(void) { - remove(DATAFILE); + remove(DATAFILE.c_str()); } |