diff options
Diffstat (limited to 'c++/test/tfile.cpp')
-rw-r--r-- | c++/test/tfile.cpp | 270 |
1 files changed, 177 insertions, 93 deletions
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 */ |