summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2002-06-11 16:03:04 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2002-06-11 16:03:04 (GMT)
commit33a1bc03c43c68a95b301d8315a15fa7775851e4 (patch)
tree0402f78abb06b3d8e7b728ebb0a2f64bdff64fb6 /test
parente4a300b04e0eb4f3c7cfb96b925d5cf9975c8188 (diff)
downloadhdf5-33a1bc03c43c68a95b301d8315a15fa7775851e4.zip
hdf5-33a1bc03c43c68a95b301d8315a15fa7775851e4.tar.gz
hdf5-33a1bc03c43c68a95b301d8315a15fa7775851e4.tar.bz2
[svn-r5586] Purpose:
Bug Fix Description: H5Dcreate and H5Tcommit allow "empty" compound and enumerated types (i.e. ones with no members) to be stored in the file, but this causes an assertion failure and is somewhat vapid. Solution: Check the datatype "makes sense" before using it for H5Dcreate and H5Tcommit. Platforms tested: FreeBSD 4.5 (sleipnir)
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.in2
-rw-r--r--test/tmisc.c111
2 files changed, 111 insertions, 2 deletions
diff --git a/test/Makefile.in b/test/Makefile.in
index a066969..e1e0d73 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -48,7 +48,7 @@ MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \
mount_[0-9].h5 testmeta.h5 ttime.h5 trefer[12].h5 tvltypes.h5 \
tvlstr.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5 tarray1.h5 \
tgenprop.h5 tmisc.h5 tmisc2a.h5 tmisc2b.h5 tmisc3.h5 tmisc4a.h5 \
- tmisc4b.h5 tmisc5.h5 tmisc6.h5 set_extent_read.h5 \
+ tmisc4b.h5 tmisc5.h5 tmisc6.h5 tmisc7.h5 set_extent_read.h5 \
set_extent_create.h5
CLEAN=$(TIMINGS)
diff --git a/test/tmisc.c b/test/tmisc.c
index 6b3caac..0d2ffcd 100644
--- a/test/tmisc.c
+++ b/test/tmisc.c
@@ -112,6 +112,13 @@ typedef struct
#define MISC6_DSETNAME2 "dset2"
#define MISC6_NUMATTR 16
+/* Definitions for misc. test #7 */
+#define MISC7_FILE "tmisc7.h5"
+#define MISC7_DSETNAME1 "Dataset1"
+#define MISC7_DSETNAME2 "Dataset2"
+#define MISC7_TYPENAME1 "Datatype1"
+#define MISC7_TYPENAME2 "Datatype2"
+
/****************************************************************
**
** test_misc1(): test unlinking a dataset from a group and immediately
@@ -905,6 +912,106 @@ test_misc6(void)
/****************************************************************
**
+** test_misc7(): Test that datatypes are sensible to store on
+** disk. (i.e. not partially initialized)
+**
+****************************************************************/
+static void
+test_misc7(void)
+{
+ hid_t fid, did, tid, sid;
+ int enum_value=1;
+ herr_t ret;
+
+ /* Output message about test being performed */
+ MESSAGE(5, ("Testing sensible datatype on disk code \n"));
+
+ /* Attempt to commit a non-sensible datatype */
+
+ /* Create the file */
+ fid=H5Fcreate(MISC7_FILE,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+ CHECK(fid,FAIL,"H5Fcreate");
+
+ /* Create the dataspace */
+ sid=H5Screate(H5S_SCALAR);
+ CHECK(sid,FAIL,"H5Screate");
+
+ /* Create the compound datatype to commit*/
+ tid=H5Tcreate(H5T_COMPOUND,32);
+ CHECK(tid,FAIL,"H5Tcreate");
+
+ /* Attempt to commit an empty compound datatype */
+ ret=H5Tcommit(fid,MISC7_TYPENAME1,tid);
+ VERIFY(ret,FAIL,"H5Tcommit");
+
+ /* Attempt to use empty compound datatype to create dataset */
+ did=H5Dcreate(fid,MISC7_DSETNAME1,tid,sid,H5P_DEFAULT);
+ VERIFY(ret,FAIL,"H5Dcreate");
+
+ /* Add a field to the compound datatype */
+ ret=H5Tinsert(tid,"a",0,H5T_NATIVE_INT);
+ CHECK(ret,FAIL,"H5Tinsert");
+
+ /* Attempt to commit the compound datatype now - should work */
+ ret=H5Tcommit(fid,MISC7_TYPENAME1,tid);
+ CHECK(ret,FAIL,"H5Tcommit");
+
+ /* Attempt to use compound datatype to create dataset now - should work */
+ did=H5Dcreate(fid,MISC7_DSETNAME1,tid,sid,H5P_DEFAULT);
+ CHECK(did,FAIL,"H5Dcreate");
+
+ /* Close dataset */
+ ret=H5Dclose(did);
+ CHECK(ret, FAIL, "H5Dclose");
+
+ /* Close compound datatype */
+ ret=H5Tclose(tid);
+ CHECK(ret, FAIL, "H5Tclose");
+
+ /* Create the enum datatype to commit*/
+ tid=H5Tenum_create(H5T_NATIVE_INT);
+ CHECK(tid,FAIL,"H5Tenum_create");
+
+ /* Attempt to commit an empty enum datatype */
+ ret=H5Tcommit(fid,MISC7_TYPENAME2,tid);
+ VERIFY(ret,FAIL,"H5Tcommit");
+
+ /* Attempt to use empty enum datatype to create dataset */
+ did=H5Dcreate(fid,MISC7_DSETNAME2,tid,sid,H5P_DEFAULT);
+ VERIFY(did,FAIL,"H5Dcreate");
+
+ /* Add a member to the enum datatype */
+ ret=H5Tenum_insert(tid,"a",&enum_value);
+ CHECK(ret,FAIL,"H5Tenum_insert");
+
+ /* Attempt to commit the enum datatype now - should work */
+ ret=H5Tcommit(fid,MISC7_TYPENAME2,tid);
+ CHECK(ret,FAIL,"H5Tcommit");
+
+ /* Attempt to use enum datatype to create dataset now - should work */
+ did=H5Dcreate(fid,MISC7_DSETNAME2,tid,sid,H5P_DEFAULT);
+ CHECK(did,FAIL,"H5Dcreate");
+
+ /* Close dataset */
+ ret=H5Dclose(did);
+ CHECK(ret, FAIL, "H5Dclose");
+
+ /* Close enum datatype */
+ ret=H5Tclose(tid);
+ CHECK(ret, FAIL, "H5Tclose");
+
+ /* Close dataspace */
+ ret=H5Sclose(sid);
+ CHECK(ret, FAIL, "H5Sclose");
+
+ /* Close file */
+ ret=H5Fclose(fid);
+ CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_misc7() */
+
+/****************************************************************
+**
** test_misc(): Main misc. test routine.
**
****************************************************************/
@@ -919,7 +1026,8 @@ test_misc(void)
test_misc3(); /* Test reading from chunked dataset with non-zero fill value */
test_misc4(); /* Test retrieving the fileno for various objects with H5Gget_objinfo() */
test_misc5(); /* Test several level deep nested compound & VL datatypes */
- test_misc6(); /* Test object header continuation code */
+ test_misc6(); /* Test object header continuation code */
+ test_misc7(); /* Test for sensible datatypes stored on disk */
} /* test_misc() */
@@ -949,4 +1057,5 @@ cleanup_misc(void)
remove(MISC4_FILE_2);
remove(MISC5_FILE);
remove(MISC6_FILE);
+ remove(MISC7_FILE);
}