diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2003-07-16 14:56:58 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2003-07-16 14:56:58 (GMT) |
commit | e9cc951e034865fb1f2e9dc0385ed34072675bba (patch) | |
tree | cac0264cea02f3a795d27189dfd6570b2184f119 /test/tmisc.c | |
parent | 046a2e6c0a78ece5ad464af8c506c6ba776eec1d (diff) | |
download | hdf5-e9cc951e034865fb1f2e9dc0385ed34072675bba.zip hdf5-e9cc951e034865fb1f2e9dc0385ed34072675bba.tar.gz hdf5-e9cc951e034865fb1f2e9dc0385ed34072675bba.tar.bz2 |
[svn-r7232] Purpose:
Bug fix
Description:
When a non-default indexed storage B-tree internal 'K' value is set by the
user, the chunked datasets created in that file (until it is closed) use the
user's 'K' value and the data can be accessed correctly, but the 'K' value is
not stored in the file.
However, once the file is closed and re-opened, the non-default 'K' value
is lost and the data in the chunked datasets will not be able to be accessed
correctly.
Solution:
Store the indexed storage B-tree internal 'K' value in the superblock.
Platforms tested:
FreeBSD 4.8 (sleipnir)
h5committest
Diffstat (limited to 'test/tmisc.c')
-rw-r--r-- | test/tmisc.c | 189 |
1 files changed, 177 insertions, 12 deletions
diff --git a/test/tmisc.c b/test/tmisc.c index f039cb6..8667cac 100644 --- a/test/tmisc.c +++ b/test/tmisc.c @@ -147,6 +147,15 @@ typedef struct #define MISC10_FILE_NEW "tmisc10.h5" #define MISC10_DSETNAME "Dataset1" +/* Definitions for misc. test #11 */ +#define MISC11_FILE "tmisc11.h5" +#define MISC11_USERBLOCK 1024 +#define MISC11_SIZEOF_OFF 4 +#define MISC11_SIZEOF_LEN 4 +#define MISC11_SYM_LK 8 +#define MISC11_SYM_IK 32 +#define MISC11_ISTORE_IK 64 + /**************************************************************** ** ** test_misc1(): test unlinking a dataset from a group and immediately @@ -1655,6 +1664,160 @@ test_misc10(void) /**************************************************************** ** +** test_misc11(): Test that all properties in a file creation property +** list are stored correctly in the file and can be retrieved +** when the file is re-opened. +** +****************************************************************/ +static void +test_misc11(void) +{ + hid_t file; /* File IDs for old & new files */ + hid_t fcpl; /* File creation property list */ + hsize_t userblock; /* Userblock size retrieved from FCPL */ + size_t off_size; /* Size of offsets in the file */ + size_t len_size; /* Size of lengths in the file */ +#ifdef H5_WANT_H5_V1_6_COMPAT + int sym_ik; /* Symbol table B-tree initial 'K' value */ + int istore_ik; /* Indexed storage B-tree initial 'K' value */ +#else /* H5_WANT_H5_V1_6_COMPAT */ + unsigned sym_ik; /* Symbol table B-tree internal 'K' value */ + unsigned istore_ik; /* Indexed storage B-tree internal 'K' value */ +#endif /* H5_WANT_H5_V1_6_COMPAT */ + unsigned sym_lk; /* Symbol table B-tree leaf 'K' value */ + int super; /* Superblock version # */ + int freelist; /* Free list version # */ + int stab; /* Symbol table entry version # */ + int shhdr; /* Shared object header version # */ + herr_t ret; /* Generic return value */ + + /* Output message about test being performed */ + MESSAGE(5, ("Testing file creation properties retrieved correctly\n")); + + /* Creating a file with the default file creation property list should + * create a version 0 superblock + */ + + /* Create file with default file creation property list */ + file= H5Fcreate(MISC11_FILE, H5F_ACC_TRUNC , H5P_DEFAULT, H5P_DEFAULT); + CHECK(file, FAIL, "H5Fcreate"); + + /* Get the file's dataset creation property list */ + fcpl = H5Fget_create_plist(file); + CHECK(fcpl, FAIL, "H5Fget_create_plist"); + + /* Get the file's version information */ + ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr); + CHECK(ret, FAIL, "H5Pget_version"); + VERIFY(super,0,"H5Pget_version"); + VERIFY(freelist,0,"H5Pget_version"); + VERIFY(stab,0,"H5Pget_version"); + VERIFY(shhdr,0,"H5Pget_version"); + + /* Close FCPL */ + ret=H5Pclose(fcpl); + CHECK(ret, FAIL, "H5Pclose"); + + /* Close file */ + ret=H5Fclose(file); + CHECK(ret, FAIL, "H5Fclose"); + + + /* Create a file creation property list */ + fcpl = H5Pcreate(H5P_FILE_CREATE); + CHECK(fcpl, FAIL, "H5Pcreate"); + + /* Set all the properties in the FCPL */ + ret=H5Pset_userblock(fcpl,(hsize_t)MISC11_USERBLOCK); + CHECK(ret, FAIL, "H5Pset_userblock"); + + ret=H5Pset_sizes(fcpl,MISC11_SIZEOF_OFF,MISC11_SIZEOF_LEN); + CHECK(ret, FAIL, "H5Pset_sizes"); + + ret=H5Pset_sym_k(fcpl,MISC11_SYM_IK,MISC11_SYM_LK); + CHECK(ret, FAIL, "H5Pset_sym_k"); + + ret=H5Pset_istore_k(fcpl,MISC11_ISTORE_IK); + CHECK(ret, FAIL, "H5Pset_istore_k"); + + /* Creating a file with the non-default file creation property list should + * create a version 1 superblock + */ + + /* Create file with custom file creation property list */ + file= H5Fcreate(MISC11_FILE, H5F_ACC_TRUNC , fcpl, H5P_DEFAULT); + CHECK(file, FAIL, "H5Fcreate"); + + /* Close FCPL */ + ret=H5Pclose(fcpl); + CHECK(ret, FAIL, "H5Pclose"); + + /* Get the file's dataset creation property list */ + fcpl = H5Fget_create_plist(file); + CHECK(fcpl, FAIL, "H5Fget_create_plist"); + + /* Get the file's version information */ + ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr); + CHECK(ret, FAIL, "H5Pget_version"); + VERIFY(super,1,"H5Pget_version"); + VERIFY(freelist,0,"H5Pget_version"); + VERIFY(stab,0,"H5Pget_version"); + VERIFY(shhdr,0,"H5Pget_version"); + + /* Close FCPL */ + ret=H5Pclose(fcpl); + CHECK(ret, FAIL, "H5Pclose"); + + /* Close file */ + ret=H5Fclose(file); + CHECK(ret, FAIL, "H5Fclose"); + + /* Re-open the file */ + file = H5Fopen(MISC11_FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + CHECK(file, FAIL, "H5Fcreate"); + + /* Get the file's dataset creation property list */ + fcpl = H5Fget_create_plist(file); + CHECK(fcpl, FAIL, "H5Fget_create_plist"); + + /* Get the file's version information */ + ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr); + CHECK(ret, FAIL, "H5Pget_version"); + VERIFY(super,1,"H5Pget_version"); + VERIFY(freelist,0,"H5Pget_version"); + VERIFY(stab,0,"H5Pget_version"); + VERIFY(shhdr,0,"H5Pget_version"); + + /* Retrieve all the property values & check them */ + ret=H5Pget_userblock(fcpl,&userblock); + CHECK(ret, FAIL, "H5Pget_userblock"); + VERIFY(userblock, MISC11_USERBLOCK, "H5Pget_userblock"); + + ret=H5Pget_sizes(fcpl,&off_size,&len_size); + CHECK(ret, FAIL, "H5Pget_sizes"); + VERIFY(off_size, MISC11_SIZEOF_OFF, "H5Pget_sizes"); + VERIFY(len_size, MISC11_SIZEOF_LEN, "H5Pget_sizes"); + + ret=H5Pget_sym_k(fcpl,&sym_ik,&sym_lk); + CHECK(ret, FAIL, "H5Pget_sym_k"); + VERIFY(sym_ik, MISC11_SYM_IK, "H5Pget_sym_k"); + VERIFY(sym_lk, MISC11_SYM_LK, "H5Pget_sym_k"); + + ret=H5Pget_istore_k(fcpl,&istore_ik); + CHECK(ret, FAIL, "H5Pget_istore_k"); + VERIFY(istore_ik, MISC11_ISTORE_IK, "H5Pget_istore_k"); + + /* Close file */ + ret=H5Fclose(file); + CHECK(ret, FAIL, "H5Fclose"); + + /* Close FCPL */ + ret=H5Pclose(fcpl); + CHECK(ret, FAIL, "H5Pclose"); +} /* end test_misc11() */ + +/**************************************************************** +** ** test_misc(): Main misc. test routine. ** ****************************************************************/ @@ -1674,6 +1837,7 @@ test_misc(void) test_misc8(); /* Test storage sizes of various types of dataset storage */ test_misc9(); /* Test for opening (not creating) core files */ test_misc10(); /* Test for using dataset creation property lists from old files */ + test_misc11(); /* Test for all properties of a file creation property list being stored */ } /* test_misc() */ @@ -1695,16 +1859,17 @@ test_misc(void) void cleanup_misc(void) { - remove(MISC1_FILE); - remove(MISC2_FILE_1); - remove(MISC2_FILE_2); - remove(MISC3_FILE); - remove(MISC4_FILE_1); - remove(MISC4_FILE_2); - remove(MISC5_FILE); - remove(MISC6_FILE); - remove(MISC7_FILE); - remove(MISC8_FILE); - remove(MISC9_FILE); - remove(MISC10_FILE_NEW); + HDremove(MISC1_FILE); + HDremove(MISC2_FILE_1); + HDremove(MISC2_FILE_2); + HDremove(MISC3_FILE); + HDremove(MISC4_FILE_1); + HDremove(MISC4_FILE_2); + HDremove(MISC5_FILE); + HDremove(MISC6_FILE); + HDremove(MISC7_FILE); + HDremove(MISC8_FILE); + HDremove(MISC9_FILE); + HDremove(MISC10_FILE_NEW); + HDremove(MISC11_FILE); } |