diff options
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 655472c..a66a34c 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; @@ -3126,6 +3129,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. @@ -6532,6 +6661,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(); |