diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2011-04-15 19:25:36 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2011-04-15 19:25:36 (GMT) |
commit | 531f24926c362c5f091ccc511c1c0e55dea391c8 (patch) | |
tree | ad1ba2a11d79de1846006380c25cd9fa6f210598 /test/dtypes.c | |
parent | a3a0794eb34e4b0464fa8fbce4ed2b3c8338825b (diff) | |
download | hdf5-531f24926c362c5f091ccc511c1c0e55dea391c8.zip hdf5-531f24926c362c5f091ccc511c1c0e55dea391c8.tar.gz hdf5-531f24926c362c5f091ccc511c1c0e55dea391c8.tar.bz2 |
[svn-r20517] Description:
Bring r20513 from trunk to 1.8 branch:
Correct several problems with compound datatypes that don't have any
fields added:
- Change assertion to error report when a file is encountered which has this
situation.
- Added check to attribute creation to avoid creating attributes with a
datatype like this (datasets and named datatypes already have the check)
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
w/C++ & FORTRAN, w/threadsafe, in debug mode
Linux/64-amd64 2.6 (amani) w/Intel compilers, w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, w/threadsafe, in production mode
Linux/PPC 2.6 (heiwa) w/C++ & FORTRAN, w/threadsafe, in debug mode
Diffstat (limited to 'test/dtypes.c')
-rw-r--r-- | test/dtypes.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/test/dtypes.c b/test/dtypes.c index c4871d1..8ceb252 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -23,6 +23,7 @@ #include <math.h> #include <time.h> #include "h5test.h" +#include "H5srcdir.h" #include "H5Iprivate.h" /* For checking that datatype id's don't leak */ /* Number of elements in each test */ @@ -81,6 +82,8 @@ const char *FILENAME[] = { NULL }; +#define TESTFILE "bad_compound.h5" + typedef struct complex_t { double re; double im; @@ -3127,6 +3130,132 @@ error: /*------------------------------------------------------------------------- + * Function: test_compound_18 + * + * Purpose: Tests that library fails correctly when opening a dataset + * a compound datatype with zero fields. + * + * Return: Success: 0 + * Failure: number of errors + * + * Programmer: Quincey Koziol + * Thursday, April 14, 2011 + * + *------------------------------------------------------------------------- + */ +static int +test_compound_18(void) +{ + hid_t file = -1; + hid_t gid = -1; + hid_t did = -1; + hid_t aid = -1; + hid_t tid = -1; + hid_t sid = -1; + hsize_t dim = 1; + const char *testfile = H5_get_srcdir_filename(TESTFILE); /* Corrected test file name */ + char filename[1024]; + herr_t ret; + + TESTING("accessing objects with compound datatypes that have no fields"); + + /* Create compound datatype, but don't insert fields */ + tid = H5Tcreate(H5T_COMPOUND, (size_t)8); + assert(tid > 0); + + /* Attempt to create file with compound datatype that has no fields */ + /* Create File */ + h5_fixname(FILENAME[3], H5P_DEFAULT, filename, sizeof filename); + if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR + + /* Create a dataspace to use */ + sid = H5Screate_simple(1, &dim, NULL); + assert(sid > 0); + + /* Create a dataset with the bad compound datatype */ + H5E_BEGIN_TRY { + did = H5Dcreate2(file, "dataset", tid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + } H5E_END_TRY; + if(did > 0) { + H5Dclose(did); + FAIL_PUTS_ERROR("created dataset with bad compound datatype") + } /* end if */ + + /* Create a group */ + gid = H5Gcreate2(file, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + assert(gid > 0); + + /* Create an attribute with the bad compound datatype */ + H5E_BEGIN_TRY { + aid = H5Acreate2(gid, "attr", tid, sid, H5P_DEFAULT, H5P_DEFAULT); + } H5E_END_TRY; + if(aid > 0) { + H5Aclose(aid); + FAIL_PUTS_ERROR("created attribute with bad compound datatype") + } /* end if */ + + /* Commit the datatype */ + H5E_BEGIN_TRY { + ret = H5Tcommit2(file, "cmpnd", tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + } H5E_END_TRY; + if(ret >= 0) { + FAIL_PUTS_ERROR("committed named datatype with bad compound datatype") + } /* end if */ + + /* Close IDs */ + if(H5Tclose(tid) < 0) FAIL_STACK_ERROR + if(H5Sclose(sid) < 0) FAIL_STACK_ERROR + if(H5Gclose(gid) < 0) FAIL_STACK_ERROR + if(H5Fclose(file) < 0) FAIL_STACK_ERROR + + + /* Open Generated File */ + /* (generated with gen_bad_compound.c) */ + if((file = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR + + /* Try to open the datatype */ + H5E_BEGIN_TRY { + tid = H5Topen2(file, "cmpnd", H5P_DEFAULT); + } H5E_END_TRY; + if(tid > 0) { + H5Tclose(tid); + FAIL_PUTS_ERROR("opened named datatype with bad compound datatype") + } /* end if */ + + /* Try to open the dataset */ + H5E_BEGIN_TRY { + did = H5Dopen2(file, "dataset", H5P_DEFAULT); + } H5E_END_TRY; + if(did > 0) { + H5Dclose(did); + FAIL_PUTS_ERROR("opened dataset with bad compound datatype") + } /* end if */ + + /* Open the group with the attribute */ + if((gid = H5Gopen2(file, "group", H5P_DEFAULT)) < 0) TEST_ERROR + + /* Try to open the dataset */ + H5E_BEGIN_TRY { + aid = H5Aopen(gid, "attr", H5P_DEFAULT); + } H5E_END_TRY; + if(aid > 0) { + H5Aclose(aid); + FAIL_PUTS_ERROR("opened attribute with bad compound datatype") + } /* end if */ + + /* Close IDs */ + if(H5Gclose(gid) < 0) FAIL_STACK_ERROR + if(H5Fclose(file) < 0) FAIL_STACK_ERROR + + PASSED(); + return 0; + +error: + return 1; +} /* end test_compound_18() */ + + +/*------------------------------------------------------------------------- * Function: test_query * * Purpose: Tests query functions of compound and enumeration types. @@ -6533,6 +6662,7 @@ main(void) nerrors += test_compound_15(); nerrors += test_compound_16(); nerrors += test_compound_17(); + nerrors += test_compound_18(); nerrors += test_conv_enum_1(); nerrors += test_conv_enum_2(); nerrors += test_conv_bitfield(); |