[svn-r9696] Purpose: Clean up tests

Description:
    Replaced cout's with cerr's.
    Replaced macro VERIFY with template function verify_val to
        verify read data/info.
    Cleanup various places in the tests to make them more consistent.

Platforms tested:
    SunOS 5.7 (arabica)
    Linux 2.4 (eirene)
This commit is contained in:
Binh-Minh Ribler 2004-12-20 15:01:46 -05:00
parent e793077523
commit 625e6ad9aa
5 changed files with 364 additions and 220 deletions

View File

@ -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
};
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 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 int H5Z_FILTER_BOGUS = 305;
#define 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 */

View File

@ -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;
}
}

View File

@ -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

View File

@ -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"
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");
#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 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");
#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 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");
#define KB 1024
#define FILE4 "tfile4.h5"
#define FILE5 "tfile5.h5"
#define NAME_LEN 64
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.
@ -353,6 +352,90 @@ test_file_size(void)
} /* test_file_size() */
/*-------------------------------------------------------------------------
* 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
@ -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 */

View File

@ -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());
}