From b67740452b0c2ed1e287449ae3a871cb1ebccec7 Mon Sep 17 00:00:00 2001 From: Binh-Minh Ribler Date: Wed, 14 Jul 2004 00:16:16 -0500 Subject: [svn-r8873] Purpose: Adding test for new wrappers Description: Added test_file_name for new wrappers H5File::getFileName H5Object::getFileName Also, replaced macro VERIFY with template function verify_val to verify read data/info and did some minor cleanup. Platforms tested: SunOS 5.7 (arabica) Linux 2.4 (eirene) Windows XP --- c++/test/h5cpputil.cpp | 17 +++++ c++/test/h5cpputil.h | 17 +++++ c++/test/tfile.cpp | 173 +++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 174 insertions(+), 33 deletions(-) diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp index 85ba2d2..e9baf67 100644 --- a/c++/test/h5cpputil.cpp +++ b/c++/test/h5cpputil.cpp @@ -71,3 +71,20 @@ int test_report( int nerrors, const string& testname ) return 0; } } + +template + void verify_val1(Type1 x, Type2 value, const char* message) +{ + if (GetTestVerbosity()>=VERBO_HI) + { + print_func(" Call to routine: %15s at line %4d in %s had value \ + %ld \n", (where), (int)__LINE__, __FILE__, (long)(x)); + } + if (x != value) + { + TestErrPrintf("*** UNEXPECTED VALUE from %s should be %s, but is %s \ + at line %4d in %s\n", where, val, x, (int)__LINE__, __FILE__); + H5Eprint (stdout); + } +} + diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h index b3d7a1b..4131abf 100644 --- a/c++/test/h5cpputil.h +++ b/c++/test/h5cpputil.h @@ -29,4 +29,21 @@ int test_report (int, const std::string&); int test_report (int, const string&); #endif +template + void verify_val(Type x, Type value, const char* where, int line, const char* file_name) +{ + if (GetTestVerbosity()>=VERBO_HI) + { + cout << " Call to routine: " << where << " at line " << line + << " in " << file_name << " had value " << x << endl; + } + if (x != value) + { + cout << "*** 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 d6f9bc4..afbbb40 100644 --- a/c++/test/tfile.cpp +++ b/c++/test/tfile.cpp @@ -20,11 +20,12 @@ 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 + #ifdef OLD_HEADER_FILENAME #include #else @@ -33,6 +34,7 @@ #include "H5Cpp.h" #include "testhdf5.h" +#include "h5cpputil.h" #ifndef H5_NO_NAMESPACE using namespace H5; @@ -43,24 +45,33 @@ using namespace H5; #define F1_LENGTH_SIZE sizeof(hsize_t) #define F1_SYM_LEAF_K 4 #define F1_SYM_INTERN_K 16 -#define FILE1 "tfile1.h5" +const string 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" +const string 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" +const string FILE3("tfile3.h5"); #define KB 1024 -#define FILE4 "tfile4.h5" +//#define FILE4 "tfile4.h5" +const string FILE4("tfile4.h5"); + +const char *FILENAME[] = { + "tfile1.h5", + "tfile2.h5", + "tfile3.h5", + "tfile4.h5", + NULL +}; /*------------------------------------------------------------------------- @@ -88,49 +99,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 // also, more text about what is testing would be better. - VERIFY(fid2.getId(), FAIL, "H5File constructor"); + VERIFY(file2.getId(), FAIL, "H5File constructor"); } 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(file1->getId(), FAIL, "H5File constructor"); } 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(file2.getId(), FAIL, "H5File constructor"); } catch( FileIException E ) {} // do nothing, FAIL expected @@ -139,13 +151,13 @@ 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(file3.getId(), FAIL, "H5File constructor"); } 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"); @@ -169,7 +181,7 @@ test_file_create(void) // caught in the catch block /* Close first file */ - delete fid1; + delete file1; } catch( PropListIException E ) { CHECK(FAIL, FAIL, E.getCFuncName()); @@ -192,13 +204,13 @@ 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(); @@ -233,10 +245,10 @@ 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(); @@ -282,10 +294,10 @@ 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(); @@ -347,10 +359,10 @@ test_file_size(void) //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) @@ -368,6 +380,95 @@ 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(); + verify_val(file_name, FILE4, "H5File::getFileName", __LINE__, __FILE__); + + /* Create a group in the root group */ + Group group(file4.createGroup(GROUPNAME, 0)); + + /* Get and verify file name */ + file_name = group.getFileName(); + verify_val(file_name, FILE4, "Group::getFileName", __LINE__, __FILE__); + + /* 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(); + verify_val(file_name, FILE4, "DataSet::getFileName", __LINE__, __FILE__); + + /* Create an attribute for the dataset */ + Attribute attr(dataset.createAttribute(ATTRNAME, PredType::NATIVE_INT, space)); + + /* Get and verify file name */ + file_name = attr.getFileName(); + verify_val(file_name, FILE4, "Attribute::getFileName", __LINE__, __FILE__); + + /* 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(); + verify_val(file_name, FILE4, "CompType::getFileName", __LINE__, __FILE__); + } // end of try block + catch (Exception E) { + CHECK(FAIL, FAIL, E.getCFuncName()); + } + +} /* test_file_name() */ + + +/*------------------------------------------------------------------------- * Function: test_file * * Purpose: Main program @@ -390,6 +491,11 @@ 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 */ + + /* use C test utility routine to clean up data files */ + // h5_cleanup(FILENAME, fapl_id); already called by AddTest + } /* test_file() */ @@ -409,7 +515,8 @@ test_file(void) void cleanup_file(void) { - remove(FILE1); - remove(FILE2); - remove(FILE3); + remove(FILE1.c_str()); + remove(FILE2.c_str()); + remove(FILE3.c_str()); + remove(FILE4.c_str()); } /* cleanup_file */ -- cgit v0.12