diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2006-10-02 10:24:03 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2006-10-02 10:24:03 (GMT) |
commit | a6f6462541cc57364586f770131e2ea074d63492 (patch) | |
tree | 0debf502fb7d66f9f470edb935a62223945960d4 /test/stab.c | |
parent | 9bc29ea538b9ce2013a8cde5be230c18cf052009 (diff) | |
download | hdf5-a6f6462541cc57364586f770131e2ea074d63492.zip hdf5-a6f6462541cc57364586f770131e2ea074d63492.tar.gz hdf5-a6f6462541cc57364586f770131e2ea074d63492.tar.bz2 |
[svn-r12700] Alert:
File format is not stable, don't keep files produced!
Description:
First stage of checkins modifying the format of groups to support creation
order. Implement "dense" storage for links in groups.
Try to clarify some of the symbols for the H5L API.
Add the H5Pset_latest_format() flag for FAPLs, to choose to use the newest
file format options (including "dense" link storage in groups)
Add the H5Pset_track_creation_order() flag for GCPLs, to enable creation
order tracking in groups (although no index on creation order yet).
Remove --enable-group-revision configure flag, as file format issues are
now handled in a backwardly/forwardly compatible way.
Clean up lots of compiler warnings and other minor formatting issues.
Tested on:
FreeBSD/32 4.11 (sleipnir) w/threadsafe
Linux/32 2.4 (heping) w/FORTRAN & C++
Linux/64 2.4 (mir) w/enable-v1.6 compa
Mac OSX/32 10.4.8 (amazon)
AIX 5.3 (copper) w/parallel & FORTRAN
Diffstat (limited to 'test/stab.c')
-rw-r--r-- | test/stab.c | 577 |
1 files changed, 323 insertions, 254 deletions
diff --git a/test/stab.c b/test/stab.c index b684f9e..59e2436 100644 --- a/test/stab.c +++ b/test/stab.c @@ -27,13 +27,18 @@ #include "H5HLprivate.h" /* Local Heaps */ const char *FILENAME[] = { - "stab1", - "stab2", + "stab", NULL }; #define NAME_BUF_SIZE 1024 +/* Definitions for 'long' test */ +#define LONG_NAME_LEN 40960 + +/* Definitions for 'large' test */ +#define LARGE_NOBJS 5000 + /* Definitions for 'lifecycle' test */ #define LIFECYCLE_TOP_GROUP "top" #define LIFECYCLE_BOTTOM_GROUP "bottom %u" @@ -80,54 +85,62 @@ const char *FILENAME[] = { * Programmer: Robb Matzke * Tuesday, November 24, 1998 * - * Modifications: - * Robb Matzke, 2002-03-28 - * File is opened by parent instead of here. *------------------------------------------------------------------------- */ static int -test_misc(hid_t file) +test_misc(hid_t fapl, hbool_t new_format) { - hid_t g1=-1, g2=-1, g3=-1; + hid_t fid = (-1); /* File ID */ + hid_t g1 = (-1), g2 = (-1), g3 = (-1); + char filename[NAME_BUF_SIZE]; char comment[64]; - /* Test current working groups */ - TESTING("miscellaneous group tests"); + if(new_format) + TESTING("miscellaneous group tests (w/new group format)") + else + TESTING("miscellaneous group tests") + + /* Create file */ + h5_fixname(FILENAME[0], fapl, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Create initial groups for testing, then close */ - if ((g1=H5Gcreate(file, "test_1a", 0))<0) goto error; - if ((g2=H5Gcreate(g1, "sub_1", 0))<0) goto error; - if ((g3=H5Gcreate(file, "test_1b", 0))<0) goto error; - if (H5Gset_comment(g3, ".", "hello world")<0) goto error; - if (H5Gclose(g1)<0) goto error; - if (H5Gclose(g2)<0) goto error; - if (H5Gclose(g3)<0) goto error; + if((g1 = H5Gcreate(fid, "test_1a", (size_t)0)) < 0) TEST_ERROR + if((g2 = H5Gcreate(g1, "sub_1", (size_t)0)) < 0) TEST_ERROR + if((g3 = H5Gcreate(fid, "test_1b", (size_t)0)) < 0) TEST_ERROR + if(H5Gset_comment(g3, ".", "hello world") < 0) TEST_ERROR + if(H5Gclose(g1) < 0) TEST_ERROR + if(H5Gclose(g2) < 0) TEST_ERROR + if(H5Gclose(g3) < 0) TEST_ERROR /* Open all groups with absolute names to check for exsistence */ - if ((g1=H5Gopen(file, "/test_1a"))<0) goto error; - if ((g2=H5Gopen(file, "/test_1a/sub_1"))<0) goto error; - if ((g3=H5Gopen(file, "/test_1b"))<0) goto error; - if (H5Gget_comment(g3, "././.", sizeof comment, comment)<0) goto error; - if (strcmp(comment, "hello world")) { + if((g1 = H5Gopen(fid, "/test_1a")) < 0) TEST_ERROR + if((g2 = H5Gopen(fid, "/test_1a/sub_1")) < 0) TEST_ERROR + if((g3 = H5Gopen(fid, "/test_1b")) < 0) TEST_ERROR + if(H5Gget_comment(g3, "././.", sizeof comment, comment) < 0) TEST_ERROR + if(HDstrcmp(comment, "hello world")) { H5_FAILED(); puts(" Read the wrong comment string from the group."); printf(" got: \"%s\"\n ans: \"hello world\"\n", comment); - goto error; + TEST_ERROR } - if (H5Gclose(g1)<0) goto error; - if (H5Gclose(g2)<0) goto error; - if (H5Gclose(g3)<0) goto error; + if(H5Gclose(g1) < 0) TEST_ERROR + if(H5Gclose(g2) < 0) TEST_ERROR + if(H5Gclose(g3) < 0) TEST_ERROR /* Check that creating groups with no-op names isn't allowed */ H5E_BEGIN_TRY { - g1=H5Gcreate(file, "/", 0); + g1 = H5Gcreate(fid, "/", (size_t)0); } H5E_END_TRY - if(g1 >= 0) goto error; + if(g1 >= 0) TEST_ERROR H5E_BEGIN_TRY { - g1=H5Gcreate(file, "./././", 0); + g1 = H5Gcreate(fid, "./././", (size_t)0); } H5E_END_TRY - if(g1 >= 0) goto error; + if(g1 >= 0) TEST_ERROR + + /* Close file */ + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -137,6 +150,7 @@ test_misc(hid_t file) H5Gclose(g1); H5Gclose(g2); H5Gclose(g3); + H5Fclose(fid); } H5E_END_TRY; return 1; } @@ -155,33 +169,45 @@ test_misc(hid_t file) *------------------------------------------------------------------------- */ static int -test_long(hid_t file) +test_long(hid_t fapl, hbool_t new_format) { - hid_t g1=-1, g2=-1; - char *name1=NULL, *name2=NULL; - size_t namesize=40960, i; + hid_t fid = (-1); /* File ID */ + hid_t g1 = (-1), g2 = (-1); + char *name1 = NULL, *name2 = NULL; + char filename[NAME_BUF_SIZE]; + size_t i; - TESTING("long names"); + if(new_format) + TESTING("long names (w/new group format)") + else + TESTING("long names") + + /* Create file */ + h5_fixname(FILENAME[0], fapl, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* Group names */ - name1 = HDmalloc(namesize); - for (i=0; i<namesize; i++) + name1 = HDmalloc(LONG_NAME_LEN); + for(i = 0; i < LONG_NAME_LEN; i++) name1[i] = (char)('A' + i%26); - name1[namesize-1] = '\0'; - name2 = HDmalloc(2*namesize + 2); + name1[LONG_NAME_LEN - 1] = '\0'; + name2 = HDmalloc((2 * LONG_NAME_LEN) + 2); sprintf(name2, "%s/%s", name1, name1); /* Create groups */ - if ((g1=H5Gcreate(file, name1, 0))<0) goto error; - if ((g2=H5Gcreate(g1, name1, 0))<0) goto error; - H5Gclose(g1); - H5Gclose(g2); + if((g1 = H5Gcreate(fid, name1, (size_t)0)) < 0) TEST_ERROR + if((g2 = H5Gcreate(g1, name1, (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(g1) < 0) TEST_ERROR + if(H5Gclose(g2) < 0) TEST_ERROR /* Open groups */ - if ((g1=H5Gopen(file, name1))<0) goto error; - if ((g2=H5Gopen(file, name2))<0) goto error; - H5Gclose(g1); - H5Gclose(g2); + if((g1 = H5Gopen(fid, name1)) < 0) TEST_ERROR + if((g2 = H5Gopen(fid, name2)) < 0) TEST_ERROR + if(H5Gclose(g1) < 0) TEST_ERROR + if(H5Gclose(g2) < 0) TEST_ERROR + + /* Close file */ + if(H5Fclose(fid) < 0) TEST_ERROR /* Release name buffers */ HDfree(name2); @@ -190,17 +216,16 @@ test_long(hid_t file) PASSED(); return 0; - error: +error: H5E_BEGIN_TRY { H5Gclose(g1); H5Gclose(g2); - if(name2) - free(name2); - if(name1) - free(name1); + H5Fclose(fid); + H5MM_xfree(name2); + H5MM_xfree(name1); } H5E_END_TRY; return 1; -} +} /* end test_long() */ /*------------------------------------------------------------------------- @@ -222,29 +247,41 @@ test_long(hid_t file) *------------------------------------------------------------------------- */ static int -test_large(hid_t file) +test_large(hid_t fapl, hbool_t new_format) { - hid_t cwg=-1, dir=-1; - int i; - char name[1024]; - int nsyms = 5000; + hid_t fid = (-1); /* File ID */ + hid_t cwg = (-1), dir = (-1); /* Group IDs */ + char filename[NAME_BUF_SIZE]; + char name[NAME_BUF_SIZE]; + int i; - TESTING("large directories"); + if(new_format) + TESTING("large directories (w/new group format)") + else + TESTING("large directories") + + /* Create file */ + h5_fixname(FILENAME[0], fapl, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR /* * Create a directory that has so many entries that the root * of the B-tree ends up splitting. */ - if ((cwg=H5Gcreate(file, "/big", (size_t)nsyms*16+2))<0) goto error; - for (i=0; i<nsyms; i++) { - sprintf(name, "%05d%05d", rand()%100000, i); -#if 0 - fprintf(stderr, "%s\n", name); -#endif - if ((dir=H5Gcreate(cwg, name, 0))<0) goto error; - if (H5Gclose(dir)<0) goto error; + if((cwg = H5Gcreate(fid, "/big", (size_t)(LARGE_NOBJS * 16 + 2))) < 0) TEST_ERROR + if(new_format) + if(H5G_has_stab_test(cwg) != FALSE) TEST_ERROR + for(i = 0; i < LARGE_NOBJS; i++) { + sprintf(name, "%05d%05d", (HDrandom() % 100000), i); + if((dir = H5Gcreate(cwg, name, (size_t)0)) < 0) TEST_ERROR + if(H5Gclose(dir) < 0) TEST_ERROR } - if (H5Gclose(cwg)<0) goto error; + if(new_format) + if(H5G_is_new_dense_test(cwg) != TRUE) TEST_ERROR + if(H5Gclose(cwg) < 0) TEST_ERROR + + /* Close file */ + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); return 0; @@ -253,11 +290,11 @@ test_large(hid_t file) H5E_BEGIN_TRY { H5Gclose(dir); H5Gclose(cwg); + H5Fclose(fid); } H5E_END_TRY; return 1; -} +} /* end test_large() */ -#ifdef H5_GROUP_REVISION /*------------------------------------------------------------------------- * Function: lifecycle @@ -282,6 +319,7 @@ lifecycle(hid_t fapl) hid_t gid = (-1); /* Group ID */ hid_t gid2 = (-1); /* Datatype ID */ hid_t gcpl = (-1); /* Group creation property list ID */ + hid_t fapl2 = (-1); /* File access property list ID */ size_t lheap_size_hint; /* Local heap size hint */ unsigned max_compact; /* Maximum # of links to store in group compactly */ unsigned min_dense; /* Minimum # of links to store in group "densely" */ @@ -297,68 +335,74 @@ lifecycle(hid_t fapl) TESTING("group lifecycle"); + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + /* Create file */ - h5_fixname(FILENAME[1], fapl, filename, sizeof(filename)); - if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR; + h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Get size of file as empty */ - if((empty_size = h5_get_file_size(filename)) == 0) TEST_ERROR; + if((empty_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Re-open file */ - if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR; + if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR /* Set up group creation property list */ - if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR; + if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR /* Query default group creation property settings */ - if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR; - if(lheap_size_hint != H5G_CRT_GINFO_LHEAP_SIZE_HINT) TEST_ERROR; - if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR; - if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR; - if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR; - if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR; - if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR; + if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR + if(lheap_size_hint != H5G_CRT_GINFO_LHEAP_SIZE_HINT) TEST_ERROR + if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR + if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR + if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR + if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR + if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR /* Set GCPL parameters */ - if(H5Pset_local_heap_size_hint(gcpl, LIFECYCLE_LOCAL_HEAP_SIZE_HINT) < 0) TEST_ERROR; - if(H5Pset_link_phase_change(gcpl, LIFECYCLE_MAX_COMPACT, LIFECYCLE_MIN_DENSE) < 0) TEST_ERROR; - if(H5Pset_est_link_info(gcpl, LIFECYCLE_EST_NUM_ENTRIES, LIFECYCLE_EST_NAME_LEN) < 0) TEST_ERROR; + if(H5Pset_local_heap_size_hint(gcpl, (size_t)LIFECYCLE_LOCAL_HEAP_SIZE_HINT) < 0) TEST_ERROR + if(H5Pset_link_phase_change(gcpl, LIFECYCLE_MAX_COMPACT, LIFECYCLE_MIN_DENSE) < 0) TEST_ERROR + if(H5Pset_est_link_info(gcpl, LIFECYCLE_EST_NUM_ENTRIES, LIFECYCLE_EST_NAME_LEN) < 0) TEST_ERROR /* Create group for testing lifecycle */ if((gid = H5Gcreate_expand(fid, gcpl, H5P_DEFAULT)) < 0) TEST_ERROR if((H5Llink(fid, LIFECYCLE_TOP_GROUP, gid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR /* Query group creation property settings */ - if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR; - if(lheap_size_hint != LIFECYCLE_LOCAL_HEAP_SIZE_HINT) TEST_ERROR; - if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != LIFECYCLE_MAX_COMPACT) TEST_ERROR; - if(min_dense != LIFECYCLE_MIN_DENSE) TEST_ERROR; - if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR; - if(est_num_entries != LIFECYCLE_EST_NUM_ENTRIES) TEST_ERROR; - if(est_name_len != LIFECYCLE_EST_NAME_LEN) TEST_ERROR; + if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR + if(lheap_size_hint != LIFECYCLE_LOCAL_HEAP_SIZE_HINT) TEST_ERROR + if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != LIFECYCLE_MAX_COMPACT) TEST_ERROR + if(min_dense != LIFECYCLE_MIN_DENSE) TEST_ERROR + if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR + if(est_num_entries != LIFECYCLE_EST_NUM_ENTRIES) TEST_ERROR + if(est_name_len != LIFECYCLE_EST_NAME_LEN) TEST_ERROR /* Use internal testing routine to check that the group has no links or symbol table */ - if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Create first "bottom" group */ sprintf(objname, LIFECYCLE_BOTTOM_GROUP, (unsigned)0); if((gid2 = H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Check on bottom group's status */ - if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR /* Close bottom group */ if(H5Gclose(gid2) < 0) TEST_ERROR /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != 1) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != 1) TEST_ERROR /* Create several more bottom groups, to push the top group almost to a symbol table */ /* (Start counting at '1', since we've already created one bottom group */ @@ -367,55 +411,54 @@ lifecycle(hid_t fapl) if((gid2 = H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Check on bottom group's status */ - if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR /* Close bottom group */ if(H5Gclose(gid2) < 0) TEST_ERROR } /* end for */ /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != LIFECYCLE_MAX_COMPACT) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != LIFECYCLE_MAX_COMPACT) TEST_ERROR + if(H5G_is_new_dense_test(gid) != FALSE) TEST_ERROR /* Check that the object header is only one chunk and the space has been allocated correctly */ - if(H5Gget_objinfo(gid, ".", FALSE, &obj_stat) < 0) TEST_ERROR; + if(H5Gget_objinfo(gid, ".", FALSE, &obj_stat) < 0) TEST_ERROR #ifdef H5_HAVE_LARGE_HSIZET - if(obj_stat.ohdr.size != 232) TEST_ERROR; + if(obj_stat.ohdr.size != 240) TEST_ERROR #else /* H5_HAVE_LARGE_HSIZET */ - if(obj_stat.ohdr.size != 224) TEST_ERROR; + if(obj_stat.ohdr.size != 232) TEST_ERROR #endif /* H5_HAVE_LARGE_HSIZET */ - if(obj_stat.ohdr.free != 0) TEST_ERROR; - if(obj_stat.ohdr.nmesgs != 6) TEST_ERROR; - if(obj_stat.ohdr.nchunks != 1) TEST_ERROR; + if(obj_stat.ohdr.free != 0) TEST_ERROR + if(obj_stat.ohdr.nmesgs != 6) TEST_ERROR + if(obj_stat.ohdr.nchunks != 1) TEST_ERROR /* Create one more "bottom" group, which should push top group into using a symbol table */ sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u); if((gid2 = H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Check on bottom group's status */ - if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR /* Close bottom group */ if(H5Gclose(gid2) < 0) TEST_ERROR /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; - if(H5G_lheap_size_test(gid, &lheap_size_hint) < 0) TEST_ERROR; - if(lheap_size_hint != LIFECYCLE_LOCAL_HEAP_SIZE_HINT) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Check that the object header is still one chunk and the space has been allocated correctly */ - if(H5Gget_objinfo(gid, ".", FALSE, &obj_stat) < 0) TEST_ERROR; + if(H5Gget_objinfo(gid, ".", FALSE, &obj_stat) < 0) TEST_ERROR #ifdef H5_HAVE_LARGE_HSIZET - if(obj_stat.ohdr.size != 232) TEST_ERROR; + if(obj_stat.ohdr.size != 240) TEST_ERROR #else /* H5_HAVE_LARGE_HSIZET */ - if(obj_stat.ohdr.size != 224) TEST_ERROR; + if(obj_stat.ohdr.size != 232) TEST_ERROR #endif /* H5_HAVE_LARGE_HSIZET */ - if(obj_stat.ohdr.free != 136) TEST_ERROR; - if(obj_stat.ohdr.nmesgs != 4) TEST_ERROR; - if(obj_stat.ohdr.nchunks != 1) TEST_ERROR; + if(obj_stat.ohdr.free != 128) TEST_ERROR + if(obj_stat.ohdr.nmesgs != 3) TEST_ERROR + if(obj_stat.ohdr.nchunks != 1) TEST_ERROR /* Unlink objects from top group */ while(u >= LIFECYCLE_MIN_DENSE) { @@ -427,9 +470,9 @@ lifecycle(hid_t fapl) } /* end while */ /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Unlink one more object from the group, which should transform back to using links */ sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u); @@ -437,9 +480,9 @@ lifecycle(hid_t fapl) u--; /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR; - if(nmsgs != (LIFECYCLE_MIN_DENSE - 1)) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR + if(nmsgs != (LIFECYCLE_MIN_DENSE - 1)) TEST_ERROR /* Unlink last two objects from top group */ sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u); @@ -449,25 +492,28 @@ lifecycle(hid_t fapl) if(H5Gunlink(gid, objname) < 0) TEST_ERROR /* Check on top group's status */ - if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Close top group */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Unlink top group */ if(H5Gunlink(fid, LIFECYCLE_TOP_GROUP) < 0) TEST_ERROR /* Close GCPL */ - if(H5Pclose(gcpl) < 0) TEST_ERROR; + if(H5Pclose(gcpl) < 0) TEST_ERROR + + /* Close FAPL copy */ + if(H5Pclose(fapl2) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Get size of file as empty */ - if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR; + if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Verify that file is correct size */ - if(file_size != empty_size) TEST_ERROR; + if(file_size != empty_size) TEST_ERROR PASSED(); @@ -475,6 +521,7 @@ lifecycle(hid_t fapl) error: H5E_BEGIN_TRY { + H5Pclose(fapl2); H5Gclose(gcpl); H5Gclose(gid2); H5Gclose(gid); @@ -505,6 +552,7 @@ long_compact(hid_t fapl) hid_t fid = (-1); /* File ID */ hid_t gid = (-1); /* Group ID */ hid_t gid2 = (-1); /* Group ID */ + hid_t fapl2 = (-1); /* File access property list ID */ char *objname; /* Object name */ char filename[NAME_BUF_SIZE]; off_t empty_size; /* Size of an empty file */ @@ -512,9 +560,15 @@ long_compact(hid_t fapl) TESTING("long link names in compact groups"); + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + /* Create file */ - h5_fixname(FILENAME[1], fapl, filename, sizeof(filename)); - if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR + h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR /* Close file */ if(H5Fclose(fid) < 0) TEST_ERROR @@ -523,17 +577,17 @@ long_compact(hid_t fapl) if((empty_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Construct very long object name template */ - if((objname = HDmalloc(LONG_COMPACT_LENGTH+1)) == NULL) TEST_ERROR - HDmemset(objname, 'a', LONG_COMPACT_LENGTH); + if((objname = HDmalloc((size_t)(LONG_COMPACT_LENGTH + 1))) == NULL) TEST_ERROR + HDmemset(objname, 'a', (size_t)LONG_COMPACT_LENGTH); objname[LONG_COMPACT_LENGTH] = '\0'; /* Re-open file */ - if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR + if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR /* Create top group */ if((gid = H5Gcreate(fid, "top", (size_t)0)) < 0) TEST_ERROR - /* Use internal testing routine to check that the group has no links or symbol table */ + /* Use internal testing routine to check that the group has no links or dense storage */ if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Create first group with "long" name */ @@ -546,43 +600,43 @@ long_compact(hid_t fapl) if(H5Gclose(gid2) < 0) TEST_ERROR /* Check on top group's status */ - /* (Should have symbol table to hold links, since name is too long for object header message) */ + /* (Should have dense storage to hold links, since name is too long for object header message) */ if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Create second group with "long" name */ objname[0] = 'b'; if((gid2 = H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Check on bottom group's status */ - if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR /* Close bottom group */ if(H5Gclose(gid2) < 0) TEST_ERROR /* Check on top group's status */ - /* (Should have symbol table to hold links, since name is too long for object header message) */ + /* (Should have dense storage to hold links, since name is too long for object header message) */ if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Unlink second object from top group */ if(H5Gunlink(gid, objname) < 0) TEST_ERROR /* Check on top group's status */ - /* (Should still be symbol table to hold links, since name is too long for object header message) */ + /* (Should still be dense storage to hold links, since name is too long for object header message) */ if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Unlink first object from top group */ objname[0] = 'a'; if(H5Gunlink(gid, objname) < 0) TEST_ERROR /* Check on top group's status */ - /* (Should have deleted the symbol table now) */ - if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR; + /* (Should have deleted the dense storage now) */ + if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Free object name */ HDfree(objname); @@ -593,20 +647,24 @@ long_compact(hid_t fapl) /* Unlink top group */ if(H5Gunlink(fid, "top") < 0) TEST_ERROR + /* Close FAPL copy */ + if(H5Pclose(fapl2) < 0) TEST_ERROR + /* Close file */ if(H5Fclose(fid) < 0) TEST_ERROR /* Get size of file as empty */ - if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR; + if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Verify that file is correct size */ - if(file_size != empty_size) TEST_ERROR; + if(file_size != empty_size) TEST_ERROR PASSED(); return 0; error: H5E_BEGIN_TRY { + H5Pclose(fapl2); H5Gclose(gid2); H5Gclose(gid); H5Fclose(fid); @@ -641,7 +699,7 @@ read_old(hid_t fapl) char objname[NAME_BUF_SIZE]; /* Object name */ unsigned u; /* Local index variable */ char *srcdir = HDgetenv("srcdir"); /* where the src code is located */ - char filename[512]=""; /* old test file name */ + char filename[512] = ""; /* old test file name */ char filename2[NAME_BUF_SIZE]; /* copy of old test file */ TESTING("reading old groups"); @@ -654,7 +712,7 @@ read_old(hid_t fapl) HDstrcat(filename, FILE_OLD_GROUPS); /* Create filename */ - h5_fixname(FILENAME[1], fapl, filename2, sizeof(filename2)); + h5_fixname(FILENAME[0], fapl, filename2, sizeof(filename2)); /* Copy old file into temporary file */ if((fd_old = HDopen(filename, O_RDONLY, 0666)) < 0) TEST_ERROR @@ -676,7 +734,7 @@ read_old(hid_t fapl) if((gid = H5Gopen(fid, "old")) < 0) TEST_ERROR /* Check on old group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_is_empty_test(gid) == FALSE) TEST_ERROR if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR @@ -705,16 +763,16 @@ read_old(hid_t fapl) } /* end for */ /* Check on old group's status */ - /* (Should stay in old "symbol table" form) */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + /* (Should stay in old "symbol table" form, but have no links) */ + if(H5G_is_empty_test(gid) == FALSE) TEST_ERROR if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR /* Close old group */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Close first file */ - if(H5Fclose(fid)<0) TEST_ERROR; + if(H5Fclose(fid)<0) TEST_ERROR PASSED(); return 0; @@ -750,93 +808,95 @@ no_compact(hid_t fapl) hid_t gid = (-1); /* Group ID */ hid_t gid2 = (-1); /* Datatype ID */ hid_t gcpl = (-1); /* Group creation property list ID */ + hid_t fapl2 = (-1); /* File access property list ID */ char objname[NAME_BUF_SIZE]; /* Object name */ char filename[NAME_BUF_SIZE]; off_t empty_size; /* Size of an empty file */ off_t file_size; /* Size of each file created */ - size_t lheap_size_hint; /* Local heap size */ - size_t def_lheap_size; /* Default local heap size */ unsigned est_num_entries; /* Estimated # of entries in group */ unsigned est_name_len; /* Estimated length of entry name */ TESTING("group without compact form"); + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + /* Create file */ - h5_fixname(FILENAME[1], fapl, filename, sizeof(filename)); - if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR; + h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename)); + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Get size of file as empty */ - if((empty_size = h5_get_file_size(filename)) == 0) TEST_ERROR; + if((empty_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Re-open file */ - if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR; + if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR /* Set up group creation property list */ - if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR; + if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR /* Set GCPL parameters */ - if(H5Pset_link_phase_change(gcpl, NO_COMPACT_MAX_COMPACT, NO_COMPACT_MIN_DENSE) < 0) TEST_ERROR; + if(H5Pset_link_phase_change(gcpl, NO_COMPACT_MAX_COMPACT, NO_COMPACT_MIN_DENSE) < 0) TEST_ERROR - /* Check information for default local heap creation */ - if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR; - if(lheap_size_hint != H5G_CRT_GINFO_LHEAP_SIZE_HINT) TEST_ERROR; - if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR; - if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR; - if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR; + /* Check information for default group creation */ + if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR + if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR + if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR - /* Create group for testing lifecycle */ + /* Create group for testing no compact form */ if((gid = H5Gcreate_expand(fid, gcpl, H5P_DEFAULT)) < 0) TEST_ERROR if((H5Llink(fid, NO_COMPACT_TOP_GROUP, gid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR /* Close GCPL */ - if(H5Pclose(gcpl) < 0) TEST_ERROR; + if(H5Pclose(gcpl) < 0) TEST_ERROR - /* Use internal testing routine to check that the group has no links or symbol table */ - if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR; + /* Use internal testing routine to check that the group has no links or dense storage */ + if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Create first "bottom" group */ sprintf(objname, NO_COMPACT_BOTTOM_GROUP, (unsigned)0); if((gid2 = H5Gcreate(gid, objname, (size_t)0)) < 0) TEST_ERROR /* Check on bottom group's status */ - if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid2) != TRUE) TEST_ERROR /* Close bottom group */ if(H5Gclose(gid2) < 0) TEST_ERROR /* Check on top group's status */ - if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR; - if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR; - if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR; - if(H5G_lheap_size_test(gid, &lheap_size_hint) < 0) TEST_ERROR; - def_lheap_size = est_num_entries * (est_name_len + 1); - def_lheap_size = H5HL_ALIGN(def_lheap_size); - if(lheap_size_hint != def_lheap_size) TEST_ERROR; + if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR + if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR + if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR /* Unlink object from top group */ sprintf(objname, NO_COMPACT_BOTTOM_GROUP, (unsigned)0); if(H5Gunlink(gid, objname) < 0) TEST_ERROR /* Check on top group's status */ - if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR; + if(H5G_is_empty_test(gid) != TRUE) TEST_ERROR /* Close top group */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR /* Unlink top group */ if(H5Gunlink(fid, NO_COMPACT_TOP_GROUP) < 0) TEST_ERROR + /* Close FAPL copy */ + if(H5Pclose(fapl2) < 0) TEST_ERROR + /* Close file */ - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR /* Get size of file as empty */ - if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR; + if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR /* Verify that file is correct size */ - if(file_size != empty_size) TEST_ERROR; + if(file_size != empty_size) TEST_ERROR PASSED(); @@ -844,6 +904,7 @@ no_compact(hid_t fapl) error: H5E_BEGIN_TRY { + H5Pclose(fapl2); H5Gclose(gcpl); H5Gclose(gid2); H5Gclose(gid); @@ -874,6 +935,7 @@ gcpl_on_root(hid_t fapl) hid_t gid = (-1); /* Group ID */ hid_t gid2 = (-1); /* Datatype ID */ hid_t fcpl = (-1); /* File creation property list ID */ + hid_t fapl2 = (-1); /* File access property list ID */ hid_t gcpl = (-1); /* Group creation property list ID */ hid_t lcpl = (-1); /* Link creation property list ID */ unsigned max_compact; /* Maximum # of links to store in group compactly */ @@ -882,40 +944,46 @@ gcpl_on_root(hid_t fapl) TESTING("setting root group creation properties"); + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + /* Create file */ - h5_fixname(FILENAME[1], fapl, filename, sizeof(filename)); + h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename)); /* Set up file creation property list */ - if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) TEST_ERROR; + if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) TEST_ERROR /* Set GCPL parameters */ - if(H5Pset_link_phase_change(fcpl, GCPL_ON_ROOT_MAX_COMPACT, GCPL_ON_ROOT_MIN_DENSE) < 0) TEST_ERROR; + if(H5Pset_link_phase_change(fcpl, GCPL_ON_ROOT_MAX_COMPACT, GCPL_ON_ROOT_MIN_DENSE) < 0) TEST_ERROR /* Query the group creation properties from the FCPL */ - if(H5Pget_link_phase_change(fcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR; - if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR; + if(H5Pget_link_phase_change(fcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR + if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR /* Create file with modified root group creation properties */ - if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0) TEST_ERROR; + if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl2)) < 0) TEST_ERROR /* Close FCPL */ - if(H5Pclose(fcpl) < 0) TEST_ERROR; + if(H5Pclose(fcpl) < 0) TEST_ERROR /* Open the root group */ - if((gid = H5Gopen(fid, "/")) < 0) TEST_ERROR; + if((gid = H5Gopen(fid, "/")) < 0) TEST_ERROR /* Query the group creation properties */ - if((gcpl = H5Gget_create_plist(gid)) < 0) TEST_ERROR; - if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR; - if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR; + if((gcpl = H5Gget_create_plist(gid)) < 0) TEST_ERROR + if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR + if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR /* Close GCPL */ - if(H5Pclose(gcpl) < 0) TEST_ERROR; + if(H5Pclose(gcpl) < 0) TEST_ERROR /* Create a link creation property list, with intermediate group creation set */ - if((lcpl = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR; + if((lcpl = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR if(H5Pset_create_intermediate_group(lcpl, TRUE) < 0) TEST_ERROR /* Create a group and intermediate groups, to check if root group settings are inherited */ @@ -923,40 +991,43 @@ gcpl_on_root(hid_t fapl) if((H5Llink(fid, GCPL_ON_ROOT_BOTTOM_GROUP, gid2, lcpl, H5P_DEFAULT)) < 0) TEST_ERROR /* Close LCPL */ - if(H5Pclose(lcpl) < 0) TEST_ERROR; + if(H5Pclose(lcpl) < 0) TEST_ERROR /* Query the group creation properties */ - if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR; - if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR; - if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR; + if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR + if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR + if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR /* Close GCPL */ - if(H5Pclose(gcpl) < 0) TEST_ERROR; + if(H5Pclose(gcpl) < 0) TEST_ERROR /* Close bottom group */ - if(H5Gclose(gid2) < 0) TEST_ERROR; + if(H5Gclose(gid2) < 0) TEST_ERROR /* Open the middle group */ - if((gid2 = H5Gopen(fid, GCPL_ON_ROOT_MIDDLE_GROUP)) < 0) TEST_ERROR; + if((gid2 = H5Gopen(fid, GCPL_ON_ROOT_MIDDLE_GROUP)) < 0) TEST_ERROR /* Query the group creation properties */ - if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR; - if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR; - if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR; - if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR; + if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR + if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR + if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR + if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR /* Close GCPL */ - if(H5Pclose(gcpl) < 0) TEST_ERROR; + if(H5Pclose(gcpl) < 0) TEST_ERROR /* Close bottom group */ - if(H5Gclose(gid2) < 0) TEST_ERROR; + if(H5Gclose(gid2) < 0) TEST_ERROR /* Close root group */ - if(H5Gclose(gid) < 0) TEST_ERROR; + if(H5Gclose(gid) < 0) TEST_ERROR + + /* Close FAPL copy */ + if(H5Pclose(fapl2) < 0) TEST_ERROR /* Close file */ - if(H5Fclose(fid) < 0) TEST_ERROR; + if(H5Fclose(fid) < 0) TEST_ERROR PASSED(); @@ -968,12 +1039,12 @@ error: H5Gclose(gcpl); H5Gclose(gid2); H5Gclose(gid); + H5Pclose(fapl2); H5Gclose(fcpl); H5Fclose(fid); } H5E_END_TRY; return 1; } /* end gcpl_on_root() */ -#endif /* H5_GROUP_REVISION */ /*------------------------------------------------------------------------- @@ -995,60 +1066,58 @@ error: int main(void) { - hid_t fapl, fcpl, file; - int nerrors=0; - char filename[1024]; const char *envval = NULL; /* Don't run this test using the split file driver */ envval = HDgetenv("HDF5_DRIVER"); - if (envval == NULL) + if(envval == NULL) envval = "nomatch"; - if (HDstrcmp(envval, "split")) { + if(HDstrcmp(envval, "split")) { + hid_t fapl, fapl2; /* File access property list IDs */ + int nerrors = 0; + /* Reset library */ h5_reset(); fapl = h5_fileaccess(); - /* - * Use larger symbol table data structures to be more efficient, use - * defaults to bang harder on the library for testing. - */ - fcpl = H5Pcreate(H5P_FILE_CREATE); -#if 0 - H5Pset_sym_k(fcpl, 16, 16); -#endif - - /* Open the file */ - h5_fixname(FILENAME[0], fapl, filename, sizeof filename); - if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0) - goto error; - - /* Perform tests */ - nerrors += test_misc(file); - nerrors += test_long(file); - nerrors += test_large(file); -#ifdef H5_GROUP_REVISION + /* Copy the file access property list */ + if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR + + /* Set the "use the latest version of the format" flag for creating objects in the file */ + if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR + + /* Perform basic tests, with old & new style groups */ + nerrors += test_misc(fapl, FALSE); /* with old-style group */ + nerrors += test_misc(fapl2, TRUE); /* with new-style group */ + nerrors += test_long(fapl, FALSE); /* with old-style group */ + nerrors += test_long(fapl2, TRUE); /* with new-style group */ + nerrors += test_large(fapl, FALSE); /* with old-style group */ + nerrors += test_large(fapl2, TRUE); /* with new-style group */ + + /* New format group specific tests (require new format features) */ nerrors += lifecycle(fapl); nerrors += long_compact(fapl); nerrors += read_old(fapl); nerrors += no_compact(fapl); nerrors += gcpl_on_root(fapl); -#endif /* H5_GROUP_REVISION */ - if (nerrors) goto error; + + /* Close 2nd FAPL */ + H5Pclose(fapl2); + + /* Check for test errors */ + if(nerrors) + goto error; /* Cleanup */ - H5Fclose(file); puts("All symbol table tests passed."); h5_cleanup(FILENAME, fapl); - } + } /* end if */ else - { puts("All symbol table tests skipped - Incompatible with current Virtual File Driver"); - } return 0; - error: - puts("*** TESTS FAILED ***"); - return 1; +error: + puts("*** TESTS FAILED ***"); + return 1; } |