summaryrefslogtreecommitdiffstats
path: root/test/API/tfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/API/tfile.c')
-rw-r--r--test/API/tfile.c8369
1 files changed, 0 insertions, 8369 deletions
diff --git a/test/API/tfile.c b/test/API/tfile.c
deleted file mode 100644
index 6b316d4..0000000
--- a/test/API/tfile.c
+++ /dev/null
@@ -1,8369 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/***********************************************************
- *
- * Test program: tfile
- *
- * Test the low-level file I/O features.
- *
- *************************************************************/
-
-#include "testhdf5.h"
-/* #include "H5srcdir.h" */
-
-/* #include "H5Iprivate.h" */
-/* #include "H5Pprivate.h" */
-/* #include "H5VLprivate.h" */ /* Virtual Object Layer */
-
-#if 0
-/*
- * This file needs to access private information from the H5F package.
- * This file also needs to access the file testing code.
- */
-#define H5F_FRIEND /*suppress error about including H5Fpkg */
-#define H5F_TESTING
-#include "H5Fpkg.h" /* File access */
-
-#define H5FD_FRIEND /*suppress error about including H5FDpkg.h */
-#define H5FD_TESTING
-#include "H5FDpkg.h"
-
-#define H5D_FRIEND /*suppress error about including H5Dpkg */
-#include "H5Dpkg.h" /* Dataset access */
-
-#define H5S_FRIEND /*suppress error about including H5Spkg */
-#include "H5Spkg.h" /* Dataspace */
-
-#define H5T_FRIEND /*suppress error about including H5Tpkg */
-#include "H5Tpkg.h" /* Datatype */
-
-#define H5A_FRIEND /*suppress error about including H5Apkg */
-#include "H5Apkg.h" /* Attributes */
-
-#define H5O_FRIEND /*suppress error about including H5Opkg */
-#include "H5Opkg.h" /* Object headers */
-#endif
-
-#define BAD_USERBLOCK_SIZE1 (hsize_t)1
-#define BAD_USERBLOCK_SIZE2 (hsize_t)2
-#define BAD_USERBLOCK_SIZE3 (hsize_t)3
-#define BAD_USERBLOCK_SIZE4 (hsize_t)64
-#define BAD_USERBLOCK_SIZE5 (hsize_t)511
-#define BAD_USERBLOCK_SIZE6 (hsize_t)513
-#define BAD_USERBLOCK_SIZE7 (hsize_t)6144
-
-#define F1_USERBLOCK_SIZE (hsize_t)0
-#define F1_OFFSET_SIZE sizeof(haddr_t)
-#define F1_LENGTH_SIZE sizeof(hsize_t)
-#define F1_SYM_LEAF_K 4
-#define F1_SYM_INTERN_K 16
-#define FILE1 "tfile1.h5"
-#define SFILE1 "sys_file1"
-
-#define REOPEN_FILE "tfile_reopen.h5"
-#define REOPEN_DSET "dset"
-
-#define F2_USERBLOCK_SIZE (hsize_t)512
-#define F2_OFFSET_SIZE 8
-#define F2_LENGTH_SIZE 8
-#define F2_SYM_LEAF_K 8
-#define F2_SYM_INTERN_K 32
-#define F2_RANK 2
-#define F2_DIM0 4
-#define F2_DIM1 6
-#define F2_DSET "dset"
-#define FILE2 "tfile2.h5"
-
-#define F3_USERBLOCK_SIZE (hsize_t)0
-#define F3_OFFSET_SIZE F2_OFFSET_SIZE
-#define F3_LENGTH_SIZE F2_LENGTH_SIZE
-#define F3_SYM_LEAF_K F2_SYM_LEAF_K
-#define F3_SYM_INTERN_K F2_SYM_INTERN_K
-#define FILE3 "tfile3.h5"
-
-#define GRP_NAME "/group"
-#define DSET_NAME "dataset"
-#define ATTR_NAME "attr"
-#define TYPE_NAME "type"
-#define FILE4 "tfile4.h5"
-
-#define OBJ_ID_COUNT_0 0
-#define OBJ_ID_COUNT_1 1
-#define OBJ_ID_COUNT_2 2
-#define OBJ_ID_COUNT_3 3
-#define OBJ_ID_COUNT_4 4
-#define OBJ_ID_COUNT_6 6
-#define OBJ_ID_COUNT_8 8
-
-#define GROUP1 "Group1"
-#define DSET1 "Dataset1"
-#define DSET2 "/Group1/Dataset2"
-
-#define TESTA_GROUPNAME "group"
-#define TESTA_DSETNAME "dataset"
-#define TESTA_ATTRNAME "attribute"
-#define TESTA_DTYPENAME "compound"
-#define TESTA_NAME_BUF_SIZE 64
-#define TESTA_RANK 2
-#define TESTA_NX 4
-#define TESTA_NY 5
-
-#define USERBLOCK_SIZE ((hsize_t)512)
-
-/* Declarations for test_filespace_*() */
-#define FILENAME_LEN 1024 /* length of file name */
-#define DSETNAME "dset" /* Name of dataset */
-#define NELMTS(X) (sizeof(X) / sizeof(X[0])) /* # of elements */
-#define READ_OLD_BUFSIZE 1024 /* Buffer for holding file data */
-#define FILE5 "tfile5.h5" /* Test file */
-#define TEST_THRESHOLD10 10 /* Free space section threshold */
-#define FSP_SIZE_DEF 4096 /* File space page size default */
-#define FSP_SIZE512 512 /* File space page size */
-#define FSP_SIZE1G (1024 * 1024 * 1024) /* File space page size */
-
-/* Declaration for test_libver_macros2() */
-#define FILE6 "tfile6.h5" /* Test file */
-
-/* Declaration for test_get_obj_ids() */
-#define FILE7 "tfile7.h5" /* Test file */
-#define NGROUPS 2
-#define NDSETS 4
-
-/* Declaration for test_incr_filesize() */
-#define FILE8 "tfile8.h5" /* Test file */
-
-/* Files created under 1.6 branch and 1.8 branch--used in test_filespace_compatible() */
-const char *OLD_FILENAME[] = {
- "filespace_1_6.h5", /* 1.6 HDF5 file */
- "filespace_1_8.h5" /* 1.8 HDF5 file */
-};
-
-/* Files created in 1.10.0 release --used in test_filespace_1.10.0_compatible() */
-/* These files are copied from release 1.10.0 tools/h5format_convert/testfiles */
-const char *OLD_1_10_0_FILENAME[] = {
- "h5fc_ext1_i.h5", /* 0 */
- "h5fc_ext1_f.h5", /* 1 */
- "h5fc_ext2_if.h5", /* 2 */
- "h5fc_ext2_sf.h5", /* 3 */
- "h5fc_ext3_isf.h5", /* 4 */
- "h5fc_ext_none.h5" /* 5 */
-};
-
-/* Files used in test_filespace_round_compatible() */
-const char *FSPACE_FILENAMES[] = {
- "fsm_aggr_nopersist.h5", /* H5F_FILE_SPACE_AGGR, not persisting free-space */
- "fsm_aggr_persist.h5", /* H5F_FILE_SPACE_AGGR, persisting free-space */
- "paged_nopersist.h5", /* H5F_FILE_SPACE_PAGE, not persisting free-space */
- "paged_persist.h5", /* H5F_FILE_SPACE_PAGE, persisting free-space */
- "aggr.h5", /* H5F_FILE_SPACE_AGGR */
- "none.h5" /* H5F_FILE_SPACE_NONE */
-};
-
-const char *FILESPACE_NAME[] = {"tfilespace.h5", NULL};
-
-/* Declarations for test_libver_bounds_copy(): */
-/* SRC_FILE: source file created under 1.8 branch with latest format */
-/* DST_FILE: destination file for copying the dataset in SRC_FILE */
-/* DSET_DS1: the dataset created in SRC_FILE to be copied to DST_FILE */
-#define SRC_FILE "fill18.h5"
-#define DST_FILE "fill18_copy.h5"
-#define DSET_DS1 "DS1"
-
-#if 0
-/* Local test function declarations for version bounds */
-static void test_libver_bounds_low_high(const char *env_h5_drvr);
-static void test_libver_bounds_super(hid_t fapl, const char *env_h5_drvr);
-static void test_libver_bounds_super_create(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non_def_fsm);
-static void test_libver_bounds_super_open(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non_def_fsm);
-static void test_libver_bounds_obj(hid_t fapl);
-static void test_libver_bounds_dataset(hid_t fapl);
-static void test_libver_bounds_dataspace(hid_t fapl);
-static void test_libver_bounds_datatype(hid_t fapl);
-static void test_libver_bounds_datatype_check(hid_t fapl, hid_t tid);
-static void test_libver_bounds_attributes(hid_t fapl);
-#endif
-
-#define DSET_NULL "DSET_NULL"
-#define DSET "DSET"
-#define DSETA "DSETA"
-#define DSETB "DSETB"
-#define DSETC "DSETC"
-
-#if 0
-static void
-create_objects(hid_t, hid_t, hid_t *, hid_t *, hid_t *, hid_t *);
-static void
-test_obj_count_and_id(hid_t, hid_t, hid_t, hid_t, hid_t, hid_t);
-static void
-check_file_id(hid_t, hid_t);
-#endif
-
-#if 0
-/* Helper routine used by test_rw_noupdate() */
-static int cal_chksum(const char *file, uint32_t *chksum);
-
-static void test_rw_noupdate(void);
-#endif
-
-/****************************************************************
-**
-** test_file_create(): Low-level file creation I/O test routine.
-**
-****************************************************************/
-static void
-test_file_create(void)
-{
- hid_t fid1 = H5I_INVALID_HID;
- hid_t fid2 = H5I_INVALID_HID;
- hid_t fid3 = H5I_INVALID_HID; /* HDF5 File IDs */
- hid_t tmpl1, tmpl2; /* file creation templates */
- hsize_t ublock; /* sizeof userblock */
- size_t parm; /* file-creation parameters */
- size_t parm2; /* file-creation parameters */
- unsigned iparm;
- unsigned iparm2;
- herr_t ret; /*generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Low-Level File Creation I/O\n"));
-
- /* First ensure the file does not exist */
- H5E_BEGIN_TRY
- {
- H5Fdelete(FILE1, H5P_DEFAULT);
- }
- H5E_END_TRY
-
- /* Try opening a non-existent file */
- H5E_BEGIN_TRY
- {
- fid1 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(fid1, FAIL, "H5Fopen");
-
- /* Test create with various sequences of H5F_ACC_EXCL and */
- /* H5F_ACC_TRUNC flags */
-
- /* Create with H5F_ACC_EXCL */
- fid1 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- if (vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC) {
- /*
- * try to create the same file with H5F_ACC_TRUNC. This should fail
- * because fid1 is the same file and is currently open.
- */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fcreate");
- }
-
- /* Close all files */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- H5E_BEGIN_TRY
- {
- ret = H5Fclose(fid2);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fclose"); /*file should not have been open */
-
- /*
- * Try again with H5F_ACC_EXCL. This should fail because the file already
- * exists from the previous steps.
- */
- H5E_BEGIN_TRY
- {
- fid1 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(fid1, FAIL, "H5Fcreate");
-
- /* Test create with H5F_ACC_TRUNC. This will truncate the existing file. */
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- if (vol_cap_flags_g & H5VL_CAP_FLAG_FILE_BASIC) {
- /*
- * Try to truncate first file again. This should fail because fid1 is the
- * same file and is currently open.
- */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fcreate");
- }
-
- /*
- * Try with H5F_ACC_EXCL. This should fail too because the file already
- * exists.
- */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fcreate");
-
- /* Get the file-creation template */
- tmpl1 = H5Fget_create_plist(fid1);
- CHECK(tmpl1, FAIL, "H5Fget_create_plist");
-
- /* Get the file-creation parameters */
- ret = H5Pget_userblock(tmpl1, &ublock);
- CHECK(ret, FAIL, "H5Pget_userblock");
- VERIFY(ublock, F1_USERBLOCK_SIZE, "H5Pget_userblock");
-
- ret = H5Pget_sizes(tmpl1, &parm, &parm2);
- CHECK(ret, FAIL, "H5Pget_sizes");
- VERIFY(parm, F1_OFFSET_SIZE, "H5Pget_sizes");
- VERIFY(parm2, F1_LENGTH_SIZE, "H5Pget_sizes");
-
- ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
- CHECK(ret, FAIL, "H5Pget_sym_k");
- VERIFY(iparm, F1_SYM_INTERN_K, "H5Pget_sym_k");
- VERIFY(iparm2, F1_SYM_LEAF_K, "H5Pget_sym_k");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
-#ifdef LATER
- /* Double-check that the atom has been vaporized */
- ret = H5Pclose(tmpl1);
- VERIFY(ret, FAIL, "H5Pclose");
-#endif
-
- if (h5_using_default_driver(NULL)) {
-
- /* Create a new file with a non-standard file-creation template */
- tmpl1 = H5Pcreate(H5P_FILE_CREATE);
- CHECK(tmpl1, FAIL, "H5Pcreate");
-
- /* Try setting some bad userblock sizes */
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE1);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE2);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE3);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE4);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE5);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE6);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
- H5E_BEGIN_TRY
- {
- ret = H5Pset_userblock(tmpl1, BAD_USERBLOCK_SIZE7);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_userblock");
-
- /* Set the new file-creation parameters */
- ret = H5Pset_userblock(tmpl1, F2_USERBLOCK_SIZE);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- ret = H5Pset_sizes(tmpl1, (size_t)F2_OFFSET_SIZE, (size_t)F2_LENGTH_SIZE);
- CHECK(ret, FAIL, "H5Pset_sizes");
-
- ret = H5Pset_sym_k(tmpl1, F2_SYM_INTERN_K, F2_SYM_LEAF_K);
- CHECK(ret, FAIL, "H5Pset_sym_k");
-
- /*
- * Try to create second file, with non-standard file-creation template
- * params.
- */
- fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, tmpl1, H5P_DEFAULT);
- CHECK(fid2, FAIL, "H5Fcreate");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Make certain we can create a dataset properly in the file with the userblock */
- {
- hid_t dataset_id, dataspace_id; /* identifiers */
- hsize_t dims[F2_RANK];
- unsigned data[F2_DIM0][F2_DIM1];
- unsigned i, j;
-
- /* Create the data space for the dataset. */
- dims[0] = F2_DIM0;
- dims[1] = F2_DIM1;
- dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
- CHECK(dataspace_id, FAIL, "H5Screate_simple");
-
- /* Create the dataset. */
- dataset_id = H5Dcreate2(fid2, F2_DSET, H5T_NATIVE_UINT, dataspace_id, H5P_DEFAULT, H5P_DEFAULT,
- H5P_DEFAULT);
- CHECK(dataset_id, FAIL, "H5Dcreate2");
-
- for (i = 0; i < F2_DIM0; i++)
- for (j = 0; j < F2_DIM1; j++)
- data[i][j] = i * 10 + j;
-
- /* Write data to the new dataset */
- ret = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* End access to the dataset and release resources used by it. */
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Terminate access to the data space. */
- ret = H5Sclose(dataspace_id);
- CHECK(ret, FAIL, "H5Sclose");
- }
-
- /* Get the file-creation template */
- tmpl1 = H5Fget_create_plist(fid2);
- CHECK(tmpl1, FAIL, "H5Fget_create_plist");
-
- /* Get the file-creation parameters */
- ret = H5Pget_userblock(tmpl1, &ublock);
- CHECK(ret, FAIL, "H5Pget_userblock");
- VERIFY(ublock, F2_USERBLOCK_SIZE, "H5Pget_userblock");
-
- ret = H5Pget_sizes(tmpl1, &parm, &parm2);
- CHECK(ret, FAIL, "H5Pget_sizes");
- VERIFY(parm, F2_OFFSET_SIZE, "H5Pget_sizes");
- VERIFY(parm2, F2_LENGTH_SIZE, "H5Pget_sizes");
-
- ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
- CHECK(ret, FAIL, "H5Pget_sym_k");
- VERIFY(iparm, F2_SYM_INTERN_K, "H5Pget_sym_k");
- VERIFY(iparm2, F2_SYM_LEAF_K, "H5Pget_sym_k");
-
- /* Clone the file-creation template */
- tmpl2 = H5Pcopy(tmpl1);
- CHECK(tmpl2, FAIL, "H5Pcopy");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Set the new file-creation parameter */
- ret = H5Pset_userblock(tmpl2, F3_USERBLOCK_SIZE);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /*
- * Try to create second file, with non-standard file-creation template
- * params
- */
- fid3 = H5Fcreate(FILE3, H5F_ACC_TRUNC, tmpl2, H5P_DEFAULT);
- CHECK(fid3, FAIL, "H5Fcreate");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl2);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Get the file-creation template */
- tmpl1 = H5Fget_create_plist(fid3);
- CHECK(tmpl1, FAIL, "H5Fget_create_plist");
-
- /* Get the file-creation parameters */
- ret = H5Pget_userblock(tmpl1, &ublock);
- CHECK(ret, FAIL, "H5Pget_userblock");
- VERIFY(ublock, F3_USERBLOCK_SIZE, "H5Pget_userblock");
-
- ret = H5Pget_sizes(tmpl1, &parm, &parm2);
- CHECK(ret, FAIL, "H5Pget_sizes");
- VERIFY(parm, F3_OFFSET_SIZE, "H5Pget_sizes");
- VERIFY(parm2, F3_LENGTH_SIZE, "H5Pget_sizes");
-
- ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
- CHECK(ret, FAIL, "H5Pget_sym_k");
- VERIFY(iparm, F3_SYM_INTERN_K, "H5Pget_sym_k");
- VERIFY(iparm2, F3_SYM_LEAF_K, "H5Pget_sym_k");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close second file */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close third file */
- ret = H5Fclose(fid3);
- CHECK(ret, FAIL, "H5Fclose");
- }
-
- /* Close first file */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-} /* test_file_create() */
-
-/****************************************************************
-**
-** test_file_open(): Low-level file open I/O test routine.
-**
-****************************************************************/
-static void
-test_file_open(const char *env_h5_drvr)
-{
- hid_t fid1; /*HDF5 File IDs */
-#if 0
- hid_t fid2;
- hid_t did; /*dataset ID */
- hid_t fapl_id; /*file access property list ID */
-#endif
- hid_t tmpl1; /*file creation templates */
- hsize_t ublock; /*sizeof user block */
- size_t parm; /*file-creation parameters */
- size_t parm2; /*file-creation parameters */
- unsigned iparm;
- unsigned iparm2;
- unsigned intent;
- herr_t ret; /*generic return value */
-
- /*
- * Test single file open
- */
-
- /* Only run this test with sec2/default driver */
- if (!h5_using_default_driver(env_h5_drvr))
- return;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Low-Level File Opening I/O\n"));
-
- /* Open first file */
- fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* Get the intent */
- ret = H5Fget_intent(fid1, &intent);
- CHECK(ret, FAIL, "H5Fget_intent");
- VERIFY(intent, H5F_ACC_RDWR, "H5Fget_intent");
-
- /* Get the file-creation template */
- tmpl1 = H5Fget_create_plist(fid1);
- CHECK(tmpl1, FAIL, "H5Fget_create_plist");
-
- /* Get the file-creation parameters */
- ret = H5Pget_userblock(tmpl1, &ublock);
- CHECK(ret, FAIL, "H5Pget_userblock");
- VERIFY(ublock, F2_USERBLOCK_SIZE, "H5Pget_userblock");
-
- ret = H5Pget_sizes(tmpl1, &parm, &parm2);
- CHECK(ret, FAIL, "H5Pget_sizes");
- VERIFY(parm, F2_OFFSET_SIZE, "H5Pget_sizes");
- VERIFY(parm2, F2_LENGTH_SIZE, "H5Pget_sizes");
-
- ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
- CHECK(ret, FAIL, "H5Pget_sym_k");
- VERIFY(iparm, F2_SYM_INTERN_K, "H5Pget_sym_k");
- VERIFY(iparm2, F2_SYM_LEAF_K, "H5Pget_sym_k");
-
- /* Release file-creation template */
- ret = H5Pclose(tmpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close first file */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /*
- * Test two file opens: one is opened H5F_ACC_RDONLY and H5F_CLOSE_WEAK.
- * It's closed with an object left open. Then another is opened
- * H5F_ACC_RDWR, which should fail.
- */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing 2 File Openings - SKIPPED for now due to no file close degree support\n"));
-#if 0
- /* Create file access property list */
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl_id, FAIL, "H5Pcreate");
-
- /* Set file close mode to H5F_CLOSE_WEAK */
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* Open file for first time */
- fid1 = H5Fopen(FILE2, H5F_ACC_RDONLY, fapl_id);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* Check the intent */
- ret = H5Fget_intent(fid1, &intent);
- CHECK(ret, FAIL, "H5Fget_intent");
- VERIFY(intent, H5F_ACC_RDONLY, "H5Fget_intent");
-
- /* Open dataset */
- did = H5Dopen2(fid1, F2_DSET, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen2");
-
- /* Check that the intent works even if NULL is passed in */
- ret = H5Fget_intent(fid1, NULL);
- CHECK(ret, FAIL, "H5Fget_intent");
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Open file for second time, which should fail. */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE2, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- /* Check that the intent fails for an invalid ID */
- H5E_BEGIN_TRY
- {
- ret = H5Fget_intent(fid1, &intent);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fget_intent");
-
- /* Close dataset from first open */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Pclose(fapl_id);
- CHECK(ret, FAIL, "H5Pclose");
-#endif
-} /* test_file_open() */
-
-/****************************************************************
-**
-** test_file_reopen(): File reopen test routine.
-**
-****************************************************************/
-static void
-test_file_reopen(void)
-{
- hid_t fid = -1; /* file ID from initial open */
- hid_t rfid = -1; /* file ID from reopen */
- hid_t did = -1; /* dataset ID (both opens) */
- hid_t sid = -1; /* dataspace ID for dataset creation */
- hsize_t dims = 6; /* dataspace size */
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing File Re-opening\n"));
-
- /* Create file via first ID */
- fid = H5Fcreate(REOPEN_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK_I(fid, "H5Fcreate");
-
- /* Create a dataset in the file */
- sid = H5Screate_simple(1, &dims, &dims);
- CHECK_I(sid, "H5Screate_simple");
- did = H5Dcreate2(fid, REOPEN_DSET, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK_I(did, "H5Dcreate2");
-
- /* Close dataset and dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Reopen the file with a different file ID */
- rfid = H5Freopen(fid);
- CHECK_I(rfid, "H5Freopen");
-
- /* Reopen the dataset through the reopen file ID */
- did = H5Dopen2(rfid, REOPEN_DSET, H5P_DEFAULT);
- CHECK_I(did, "H5Dopen2");
-
- /* Close and clean up */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(rfid);
- CHECK(ret, FAIL, "H5Fclose");
- H5Fdelete(REOPEN_FILE, H5P_DEFAULT);
-
-} /* test_file_reopen() */
-
-/****************************************************************
-**
-** test_file_close(): low-level file close test routine.
-** It mainly tests behavior with close degree.
-**
-*****************************************************************/
-static void
-test_file_close(void)
-{
-#if 0
- hid_t fid1, fid2;
- hid_t fapl_id, access_id;
- hid_t dataset_id, group_id1, group_id2, group_id3;
- H5F_close_degree_t fc_degree;
- herr_t ret;
-#endif
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing File Closing with file close degrees - SKIPPED for now due to no file close degree "
- "support\n"));
-#if 0
- /* Test behavior while opening file multiple times with different
- * file close degree value
- */
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl_id, FAIL, "H5Pcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- ret = H5Pget_fclose_degree(fapl_id, &fc_degree);
- VERIFY(fc_degree, H5F_CLOSE_STRONG, "H5Pget_fclose_degree");
-
- /* should fail */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Test behavior while opening file multiple times with different file
- * close degree
- */
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- ret = H5Pget_fclose_degree(fapl_id, &fc_degree);
- VERIFY(fc_degree, H5F_CLOSE_WEAK, "H5Pget_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Test behavior while opening file multiple times with file close
- * degree STRONG */
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should fail */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Create a dataset and a group in each file open respectively */
- create_objects(fid1, fid2, NULL, NULL, NULL, NULL);
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Test behavior while opening file multiple times with file close
- * degree SEMI */
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should fail */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Create a dataset and a group in each file open respectively */
- create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
-
- /* Close first open, should fail since it is SEMI and objects are
- * still open. */
- H5E_BEGIN_TRY
- {
- ret = H5Fclose(fid1);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fclose");
-
- /* Close second open, should fail since it is SEMI and objects are
- * still open. */
- H5E_BEGIN_TRY
- {
- ret = H5Fclose(fid2);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fclose");
-
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Gclose(group_id1);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Gclose(group_id2);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close second open, should fail since it is SEMI and one group ID is
- * still open. */
- H5E_BEGIN_TRY
- {
- ret = H5Fclose(fid2);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fclose");
-
- /* Same check with H5Idec_ref() (should fail also) */
- H5E_BEGIN_TRY
- {
- ret = H5Idec_ref(fid2);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Idec_ref");
-
- ret = H5Gclose(group_id3);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close second open again. Should succeed. */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Test behavior while opening file multiple times with file close
- * degree WEAK */
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should fail */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Create a dataset and a group in each file open respectively */
- create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
-
- /* Create more new files and test object count and ID list functions */
- test_obj_count_and_id(fid1, fid2, dataset_id, group_id1, group_id2, group_id3);
-
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close second open. File will be finally closed after all objects
- * are closed. */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Gclose(group_id1);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Gclose(group_id2);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Gclose(group_id3);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Test behavior while opening file multiple times with file close
- * degree DEFAULT */
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should fail */
- H5E_BEGIN_TRY
- {
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Fopen");
-
- ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
- CHECK(ret, FAIL, "H5Pset_fclose_degree");
-
- /* should succeed */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Create a dataset and a group in each file open respectively */
- create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
-
- access_id = H5Fget_access_plist(fid1);
- CHECK(access_id, FAIL, "H5Fget_access_plist");
-
- ret = H5Pget_fclose_degree(access_id, &fc_degree);
- CHECK(ret, FAIL, "H5Pget_fclose_degree");
-
- switch (fc_degree) {
- case H5F_CLOSE_STRONG:
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
- break;
- case H5F_CLOSE_SEMI:
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Gclose(group_id1);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(group_id2);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(group_id3);
- CHECK(ret, FAIL, "H5Gclose");
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
- break;
- case H5F_CLOSE_WEAK:
- /* Close first open */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
- /* Close second open */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Gclose(group_id1);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(group_id2);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(group_id3);
- CHECK(ret, FAIL, "H5Gclose");
- break;
- case H5F_CLOSE_DEFAULT:
- default:
- CHECK(fc_degree, H5F_CLOSE_DEFAULT, "H5Pget_fclose_degree");
- break;
- }
-
- /* Close file access property list */
- ret = H5Pclose(fapl_id);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(access_id);
- CHECK(ret, FAIL, "H5Pclose");
-#endif
-}
-
-/****************************************************************
-**
-** create_objects(): routine called by test_file_close to create
-** a dataset and a group in file.
-**
-****************************************************************/
-#if 0
-static void
-create_objects(hid_t fid1, hid_t fid2, hid_t *ret_did, hid_t *ret_gid1, hid_t *ret_gid2, hid_t *ret_gid3)
-{
- ssize_t oid_count;
- herr_t ret;
-
- /* Check reference counts of file IDs and opened object IDs.
- * The verification is hard-coded. If in any case, this testing
- * is changed, remember to check this part and update the macros.
- */
- {
- oid_count = H5Fget_obj_count(fid1, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_2, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid1, H5F_OBJ_DATASET | H5F_OBJ_GROUP | H5F_OBJ_DATATYPE | H5F_OBJ_ATTR);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_2, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid2, H5F_OBJ_DATASET | H5F_OBJ_GROUP | H5F_OBJ_DATATYPE | H5F_OBJ_ATTR);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
- }
-
- /* create a dataset in the first file open */
- {
- hid_t dataset_id, dataspace_id; /* identifiers */
- hsize_t dims[F2_RANK];
- unsigned data[F2_DIM0][F2_DIM1];
- unsigned i, j;
-
- /* Create the data space for the dataset. */
- dims[0] = F2_DIM0;
- dims[1] = F2_DIM1;
- dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
- CHECK(dataspace_id, FAIL, "H5Screate_simple");
-
- /* Create the dataset. */
- dataset_id =
- H5Dcreate2(fid1, "/dset", H5T_NATIVE_UINT, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dataset_id, FAIL, "H5Dcreate2");
-
- for (i = 0; i < F2_DIM0; i++)
- for (j = 0; j < F2_DIM1; j++)
- data[i][j] = i * 10 + j;
-
- /* Write data to the new dataset */
- ret = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- if (ret_did != NULL)
- *ret_did = dataset_id;
-
- /* Terminate access to the data space. */
- ret = H5Sclose(dataspace_id);
- CHECK(ret, FAIL, "H5Sclose");
- }
-
- /* Create a group in the second file open */
- {
- hid_t gid1, gid2, gid3;
- gid1 = H5Gcreate2(fid2, "/group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid1, FAIL, "H5Gcreate2");
- if (ret_gid1 != NULL)
- *ret_gid1 = gid1;
-
- gid2 = H5Gopen2(fid2, "/group", H5P_DEFAULT);
- CHECK(gid2, FAIL, "H5Gopen2");
- if (ret_gid2 != NULL)
- *ret_gid2 = gid2;
-
- gid3 = H5Gopen2(fid2, "/group", H5P_DEFAULT);
- CHECK(gid3, FAIL, "H5Gopen2");
- if (ret_gid3 != NULL)
- *ret_gid3 = gid3;
- }
-
- /* Check reference counts of file IDs and opened object IDs.
- * The verification is hard-coded. If in any case, this testing
- * is changed, remember to check this part and update the macros.
- */
- {
- oid_count = H5Fget_obj_count(fid1, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_6, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid1, H5F_OBJ_DATASET | H5F_OBJ_GROUP | H5F_OBJ_DATATYPE | H5F_OBJ_ATTR);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_6, "H5Fget_obj_count");
-
- oid_count = H5Fget_obj_count(fid2, H5F_OBJ_DATASET | H5F_OBJ_GROUP | H5F_OBJ_DATATYPE | H5F_OBJ_ATTR);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
- }
-}
-#endif
-
-/****************************************************************
-**
-** test_get_obj_ids(): Test the bug and the fix for Jira 8528.
-** H5Fget_obj_ids overfilled the list of
-** object IDs by one. This is an enhancement
-** for test_obj_count_and_id().
-**
-****************************************************************/
-static void
-test_get_obj_ids(void)
-{
- hid_t fid, gid[NGROUPS], dset[NDSETS];
- hid_t filespace;
- hsize_t file_dims[F2_RANK] = {F2_DIM0, F2_DIM1};
- ssize_t oid_count, ret_count;
- hid_t *oid_list = NULL;
- herr_t ret;
- int i, m, n;
- ssize_t oid_list_size = NDSETS;
- char gname[64], dname[64];
-
- MESSAGE(5, ("Testing retrieval of object IDs\n"));
-
- /* Create a new file */
- fid = H5Fcreate(FILE7, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- filespace = H5Screate_simple(F2_RANK, file_dims, NULL);
- CHECK(filespace, FAIL, "H5Screate_simple");
-
- /* creates NGROUPS groups under the root group */
- for (m = 0; m < NGROUPS; m++) {
- snprintf(gname, sizeof(gname), "group%d", m);
- gid[m] = H5Gcreate2(fid, gname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid[m], FAIL, "H5Gcreate2");
- }
-
- /* create NDSETS datasets under the root group */
- for (n = 0; n < NDSETS; n++) {
- snprintf(dname, sizeof(dname), "dataset%d", n);
- dset[n] = H5Dcreate2(fid, dname, H5T_NATIVE_INT, filespace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dset[n], FAIL, "H5Dcreate2");
- }
-
- /* The number of opened objects should be NGROUPS + NDSETS + 1. One is opened file. */
- oid_count = H5Fget_obj_count(fid, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, (NGROUPS + NDSETS + 1), "H5Fget_obj_count");
-
- oid_list = (hid_t *)calloc((size_t)oid_list_size, sizeof(hid_t));
- CHECK_PTR(oid_list, "calloc");
-
- /* Call the public function H5F_get_obj_ids to use H5F__get_objects. User reported having problem here.
- * that the returned size (ret_count) from H5Fget_obj_ids is one greater than the size passed in
- * (oid_list_size) */
- ret_count = H5Fget_obj_ids(fid, H5F_OBJ_ALL, (size_t)oid_list_size, oid_list);
- CHECK(ret_count, FAIL, "H5Fget_obj_ids");
- VERIFY(ret_count, oid_list_size, "H5Fget_obj_count");
-
- /* Close all object IDs on the list except the file ID. The first ID is supposed to be file ID according
- * to the library design */
- for (i = 0; i < ret_count; i++) {
- if (fid != oid_list[i]) {
- ret = H5Oclose(oid_list[i]);
- CHECK(ret, FAIL, "H5Oclose");
- }
- }
-
- /* The number of opened objects should be NGROUPS + 1 + 1. The first one is opened file. The second one
- * is the dataset ID left open from the previous around of H5Fget_obj_ids */
- oid_count = H5Fget_obj_count(fid, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, NGROUPS + 2, "H5Fget_obj_count");
-
- /* Get the IDs of the left opened objects */
- ret_count = H5Fget_obj_ids(fid, H5F_OBJ_ALL, (size_t)oid_list_size, oid_list);
- CHECK(ret_count, FAIL, "H5Fget_obj_ids");
- VERIFY(ret_count, oid_list_size, "H5Fget_obj_count");
-
- /* Close all object IDs on the list except the file ID. The first ID is still the file ID */
- for (i = 0; i < ret_count; i++) {
- if (fid != oid_list[i]) {
- ret = H5Oclose(oid_list[i]);
- CHECK(ret, FAIL, "H5Oclose");
- }
- }
-
- H5Sclose(filespace);
- H5Fclose(fid);
-
- free(oid_list);
-
- /* Reopen the file to check whether H5Fget_obj_count and H5Fget_obj_ids still works
- * when the file is closed first */
- fid = H5Fopen(FILE7, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Open NDSETS datasets under the root group */
- for (n = 0; n < NDSETS; n++) {
- snprintf(dname, sizeof(dname), "dataset%d", n);
- dset[n] = H5Dopen2(fid, dname, H5P_DEFAULT);
- CHECK(dset[n], FAIL, "H5Dcreate2");
- }
-
- /* Close the file first */
- H5Fclose(fid);
-
- if (vol_cap_flags_g & H5VL_CAP_FLAG_FILE_MORE) {
- /* Get the number of all opened objects */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, NDSETS, "H5Fget_obj_count");
-
- oid_list = (hid_t *)calloc((size_t)oid_count, sizeof(hid_t));
- CHECK_PTR(oid_list, "calloc");
-
- /* Get the list of all opened objects */
- ret_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
- CHECK(ret_count, FAIL, "H5Fget_obj_ids");
- VERIFY(ret_count, NDSETS, "H5Fget_obj_ids");
-
- H5E_BEGIN_TRY
- {
- /* Close all open objects with H5Oclose */
- for (n = 0; n < oid_count; n++)
- H5Oclose(oid_list[n]);
- }
- H5E_END_TRY
-
- free(oid_list);
- }
-}
-
-/****************************************************************
-**
-** test_get_file_id(): Test H5Iget_file_id()
-**
-*****************************************************************/
-static void
-test_get_file_id(void)
-{
-#if 0
- hid_t fid, fid2, fid3;
- hid_t datatype_id, dataset_id, dataspace_id, group_id, attr_id;
- hid_t plist;
- hsize_t dims[F2_RANK];
- unsigned intent;
- herr_t ret;
-#endif
-
- MESSAGE(5, ("Testing H5Iget_file_id - SKIPPED for now due to no H5Iget_file_id support\n"));
-#if 0
- /* Create a file */
- fid = H5Fcreate(FILE4, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Check the intent */
- ret = H5Fget_intent(fid, &intent);
- CHECK(ret, FAIL, "H5Fget_intent");
- VERIFY(intent, H5F_ACC_RDWR, "H5Fget_intent");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, fid);
-
- /* Create a group in the file. Make a duplicated file ID from the group.
- * And close this duplicated ID
- */
- group_id = H5Gcreate2(fid, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group_id, FAIL, "H5Gcreate2");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, group_id);
-
- /* Close the file and get file ID from the group ID */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Test H5Iget_file_id() */
- check_file_id((hid_t)-1, group_id);
-
- ret = H5Gclose(group_id);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Open the file again. Test H5Iget_file_id() */
- fid = H5Fopen(FILE4, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- group_id = H5Gopen2(fid, GRP_NAME, H5P_DEFAULT);
- CHECK(group_id, FAIL, "H5Gopen2");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, group_id);
-
- /* Open the file for second time. Test H5Iget_file_id() */
- fid3 = H5Freopen(fid);
- CHECK(fid3, FAIL, "H5Freopen");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid3, fid3);
-
- ret = H5Fclose(fid3);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a dataset in the group. Make a duplicated file ID from the
- * dataset. And close this duplicated ID.
- */
- dims[0] = F2_DIM0;
- dims[1] = F2_DIM1;
- dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
- CHECK(dataspace_id, FAIL, "H5Screate_simple");
-
- dataset_id =
- H5Dcreate2(group_id, DSET_NAME, H5T_NATIVE_INT, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dataset_id, FAIL, "H5Dcreate2");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, dataset_id);
-
- /* Create an attribute for the dataset. Make a duplicated file ID from
- * this attribute. And close it.
- */
- attr_id = H5Acreate2(dataset_id, ATTR_NAME, H5T_NATIVE_INT, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Acreate2");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, attr_id);
-
- /* Create a named datatype. Make a duplicated file ID from
- * this attribute. And close it.
- */
- datatype_id = H5Tcopy(H5T_NATIVE_INT);
- CHECK(ret, FAIL, "H5Tcopy");
-
- ret = H5Tcommit2(fid, TYPE_NAME, datatype_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Tcommit2");
-
- /* Test H5Iget_file_id() */
- check_file_id(fid, datatype_id);
-
- /* Create a property list and try to get file ID from it.
- * Supposed to fail.
- */
- plist = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(plist, FAIL, "H5Pcreate");
-
- H5E_BEGIN_TRY
- {
- fid2 = H5Iget_file_id(plist);
- }
- H5E_END_TRY
- VERIFY(fid2, FAIL, "H5Iget_file_id");
-
- /* Close objects */
- ret = H5Pclose(plist);
- CHECK(ret, FAIL, "H5Pclose");
-
- ret = H5Tclose(datatype_id);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Aclose(attr_id);
- CHECK(ret, FAIL, "H5Aclose");
-
- ret = H5Sclose(dataspace_id);
- CHECK(ret, FAIL, "H5Sclose");
-
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Gclose(group_id);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-#endif
-}
-
-/****************************************************************
-**
-** check_file_id(): Internal function of test_get_file_id()
-**
-*****************************************************************/
-#if 0
-static void
-check_file_id(hid_t fid, hid_t object_id)
-{
- hid_t new_fid;
- herr_t ret;
-
- /* Return a duplicated file ID even not expecting user to do it.
- * And close this duplicated ID
- */
- new_fid = H5Iget_file_id(object_id);
-
- if (fid >= 0)
- VERIFY(new_fid, fid, "H5Iget_file_id");
- else
- CHECK(new_fid, FAIL, "H5Iget_file_id");
-
- ret = H5Fclose(new_fid);
- CHECK(ret, FAIL, "H5Fclose");
-}
-#endif
-
-/****************************************************************
-**
-** test_obj_count_and_id(): test object count and ID list functions.
-**
-****************************************************************/
-#if 0
-static void
-test_obj_count_and_id(hid_t fid1, hid_t fid2, hid_t did, hid_t gid1, hid_t gid2, hid_t gid3)
-{
- hid_t fid3, fid4;
- ssize_t oid_count, ret_count;
- herr_t ret;
-
- /* Create two new files */
- fid3 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid3, FAIL, "H5Fcreate");
- fid4 = H5Fcreate(FILE3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid4, FAIL, "H5Fcreate");
-
- /* test object count of all files IDs open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_FILE);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
-
- /* test object count of all datasets open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATASET);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_1, "H5Fget_obj_count");
-
- /* test object count of all groups open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_GROUP);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_3, "H5Fget_obj_count");
-
- /* test object count of all named datatypes open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_DATATYPE);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
-
- /* test object count of all attributes open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ATTR);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
-
- /* test object count of all objects currently open */
- oid_count = H5Fget_obj_count((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL);
- CHECK(oid_count, FAIL, "H5Fget_obj_count");
- VERIFY(oid_count, OBJ_ID_COUNT_8, "H5Fget_obj_count");
-
- if (oid_count > 0) {
- hid_t *oid_list;
-
- oid_list = (hid_t *)calloc((size_t)oid_count, sizeof(hid_t));
- if (oid_list != NULL) {
- int i;
-
- ret_count = H5Fget_obj_ids((hid_t)H5F_OBJ_ALL, H5F_OBJ_ALL, (size_t)oid_count, oid_list);
- CHECK(ret_count, FAIL, "H5Fget_obj_ids");
-
- for (i = 0; i < oid_count; i++) {
- H5I_type_t id_type;
-
- id_type = H5Iget_type(oid_list[i]);
- switch (id_type) {
- case H5I_FILE:
- if (oid_list[i] != fid1 && oid_list[i] != fid2 && oid_list[i] != fid3 &&
- oid_list[i] != fid4)
- ERROR("H5Fget_obj_ids");
- break;
-
- case H5I_GROUP:
- if (oid_list[i] != gid1 && oid_list[i] != gid2 && oid_list[i] != gid3)
- ERROR("H5Fget_obj_ids");
- break;
-
- case H5I_DATASET:
- VERIFY(oid_list[i], did, "H5Fget_obj_ids");
- break;
-
- case H5I_MAP:
- /* TODO: Not supported in native VOL connector yet */
-
- case H5I_UNINIT:
- case H5I_BADID:
- case H5I_DATATYPE:
- case H5I_DATASPACE:
- case H5I_ATTR:
- case H5I_VFL:
- case H5I_VOL:
- case H5I_GENPROP_CLS:
- case H5I_GENPROP_LST:
- case H5I_ERROR_CLASS:
- case H5I_ERROR_MSG:
- case H5I_ERROR_STACK:
- case H5I_SPACE_SEL_ITER:
- case H5I_EVENTSET:
- case H5I_NTYPES:
- default:
- ERROR("H5Fget_obj_ids");
- } /* end switch */
- } /* end for */
-
- free(oid_list);
- } /* end if */
- } /* end if */
-
- /* close the two new files */
- ret = H5Fclose(fid3);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(fid4);
- CHECK(ret, FAIL, "H5Fclose");
-}
-#endif
-
-/****************************************************************
-**
-** test_file_perm(): low-level file test routine.
-** This test verifies that a file can be opened for both
-** read-only and read-write access and things will be handled
-** appropriately.
-**
-*****************************************************************/
-static void
-test_file_perm(void)
-{
- hid_t file; /* File opened with read-write permission */
- hid_t filero; /* Same file opened with read-only permission */
- hid_t dspace; /* Dataspace ID */
- hid_t dset; /* Dataset ID */
- herr_t ret;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Low-Level File Permissions\n"));
-
- dspace = H5Screate(H5S_SCALAR);
- CHECK(dspace, FAIL, "H5Screate");
-
- /* Create the file (with read-write permission) */
- file = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- /* Create a dataset with the read-write file handle */
- dset = H5Dcreate2(file, F2_DSET, H5T_NATIVE_INT, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Open the file (with read-only permission) */
- filero = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(filero, FAIL, "H5Fopen");
-
- /* Create a dataset with the read-only file handle (should fail) */
- H5E_BEGIN_TRY
- {
- dset = H5Dcreate2(filero, F2_DSET, H5T_NATIVE_INT, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(dset, FAIL, "H5Dcreate2");
- if (dset != FAIL) {
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
- } /* end if */
-
- ret = H5Fclose(filero);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-
-} /* end test_file_perm() */
-
-/****************************************************************
-**
-** test_file_perm2(): low-level file test routine.
-** This test verifies that no object can be created in a
-** file that is opened for read-only.
-**
-*****************************************************************/
-static void
-test_file_perm2(void)
-{
- hid_t file; /* File opened with read-write permission */
- hid_t filero; /* Same file opened with read-only permission */
- hid_t dspace; /* Dataspace ID */
- hid_t group; /* Group ID */
- hid_t dset; /* Dataset ID */
- hid_t type; /* Datatype ID */
- hid_t attr; /* Attribute ID */
- herr_t ret;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Low-Level File Permissions again\n"));
-
- dspace = H5Screate(H5S_SCALAR);
- CHECK(dspace, FAIL, "H5Screate");
-
- /* Create the file (with read-write permission) */
- file = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Open the file (with read-only permission) */
- filero = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(filero, FAIL, "H5Fopen");
-
- /* Create a group with the read-only file handle (should fail) */
- H5E_BEGIN_TRY
- {
- group = H5Gcreate2(filero, "MY_GROUP", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(group, FAIL, "H5Gcreate2");
-
- /* Create a dataset with the read-only file handle (should fail) */
- H5E_BEGIN_TRY
- {
- dset = H5Dcreate2(filero, F2_DSET, H5T_NATIVE_INT, dspace, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(dset, FAIL, "H5Dcreate2");
-
- /* Create an attribute with the read-only file handle (should fail) */
- H5E_BEGIN_TRY
- {
- attr = H5Acreate2(filero, "MY_ATTR", H5T_NATIVE_INT, dspace, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(attr, FAIL, "H5Acreate2");
-
- type = H5Tcopy(H5T_NATIVE_SHORT);
- CHECK(type, FAIL, "H5Tcopy");
-
- /* Commit a datatype with the read-only file handle (should fail) */
- H5E_BEGIN_TRY
- {
- ret = H5Tcommit2(filero, "MY_DTYPE", type, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Tcommit2");
-
- ret = H5Tclose(type);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Fclose(filero);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-} /* end test_file_perm2() */
-
-/****************************************************************
-**
-** test_file_is_accessible(): low-level file test routine.
-** Clone of test_file_ishdf5 but uses the newer VOL-enabled
-** H5Fis_accessible() API call.
-**
-*****************************************************************/
-#define FILE_IS_ACCESSIBLE "tfile_is_accessible"
-#define FILE_IS_ACCESSIBLE_NON_HDF5 "tfile_is_accessible_non_hdf5"
-static void
-test_file_is_accessible(const char *env_h5_drvr)
-{
- hid_t fid = H5I_INVALID_HID; /* File opened with read-write permission */
- hid_t fcpl_id = H5I_INVALID_HID; /* File creation property list */
- hid_t fapl_id = H5I_INVALID_HID; /* File access property list */
-#if 0
- int fd; /* POSIX file descriptor */
-#endif
- char filename[FILENAME_LEN]; /* Filename to use */
- char non_hdf5_filename[FILENAME_LEN]; /* Base name of non-hdf5 file */
- char non_hdf5_sb_filename[FILENAME_LEN]; /* Name of non-hdf5 superblock file */
-#if 0
- ssize_t nbytes; /* Number of bytes written */
- unsigned u; /* Local index variable */
- unsigned char buf[1024]; /* Buffer of data to write */
-#endif
- htri_t is_hdf5; /* Whether a file is an HDF5 file */
-#if 0
- int posix_ret; /* Return value from POSIX calls */
-#endif
- bool driver_is_default_compatible;
- herr_t ret; /* Return value from HDF5 calls */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Detection of HDF5 Files\n"));
-
- /* Get FAPL */
- fapl_id = h5_fileaccess();
- CHECK(fapl_id, H5I_INVALID_HID, "H5Pcreate");
-
- if (h5_driver_is_default_vfd_compatible(fapl_id, &driver_is_default_compatible) < 0) {
- TestErrPrintf("Can't check if VFD is compatible with default VFD");
- return;
- }
-
- /* Fix up filenames */
- h5_fixname(FILE_IS_ACCESSIBLE, fapl_id, filename, sizeof(filename));
- h5_fixname(FILE_IS_ACCESSIBLE_NON_HDF5, fapl_id, non_hdf5_filename, sizeof(non_hdf5_filename));
- h5_fixname_superblock(FILE_IS_ACCESSIBLE_NON_HDF5, fapl_id, non_hdf5_sb_filename,
- sizeof(non_hdf5_sb_filename));
-
- /****************/
- /* Normal usage */
- /****************/
-
- /* Create a file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- VERIFY(is_hdf5, true, "H5Fis_accessible");
-
- /*****************************************/
- /* Newly created file that is still open */
- /*****************************************/
-
- /* On Windows, file locking is mandatory so this check ensures that
- * H5Fis_accessible() works on files that have an exclusive lock.
- * Previous versions of this API call created an additional file handle
- * and attempted to read through it, which will not work when locks
- * are enforced by the OS.
- */
-
- /* Create a file and hold it open */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- VERIFY(is_hdf5, true, "H5Fis_accessible");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /*******************************/
- /* Non-default user block size */
- /*******************************/
-
- /* This test is not currently working for the family VFD.
- * There are failures when creating files with userblocks.
- */
- if (0 != strcmp(env_h5_drvr, "family")) {
- /* Create a file creation property list with a non-default user block size */
- fcpl_id = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl_id, H5I_INVALID_HID, "H5Pcreate");
-
- ret = H5Pset_userblock(fcpl_id, (hsize_t)2048);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file with non-default user block */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl_id, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Release file-creation property list */
- ret = H5Pclose(fcpl_id);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- VERIFY(is_hdf5, true, "H5Fis_accessible");
- } /* end if */
-#if 0
- if (driver_is_default_compatible) {
- /***********************/
- /* EMPTY non-HDF5 file */
- /***********************/
-
- /* Create non-HDF5 file and check it */
- fd = HDopen(non_hdf5_sb_filename, O_RDWR | O_CREAT | O_TRUNC, H5_POSIX_CREATE_MODE_RW);
- CHECK(fd, (-1), "HDopen");
-
- /* Close the file */
- posix_ret = HDclose(fd);
- CHECK(posix_ret, (-1), "HDclose");
-
- /* Verify that the file is NOT an HDF5 file using the base filename */
- is_hdf5 = H5Fis_accessible(non_hdf5_filename, fapl_id);
- VERIFY(is_hdf5, false, "H5Fis_accessible (empty non-HDF5 file)");
-
- /***************************/
- /* Non-empty non-HDF5 file */
- /***************************/
-
- /* Create non-HDF5 file and check it */
- fd = HDopen(non_hdf5_sb_filename, O_RDWR | O_CREAT | O_TRUNC, H5_POSIX_CREATE_MODE_RW);
- CHECK(fd, (-1), "HDopen");
-
- /* Initialize information to write */
- for (u = 0; u < 1024; u++)
- buf[u] = (unsigned char)u;
-
- /* Write some information */
- nbytes = HDwrite(fd, buf, (size_t)1024);
- VERIFY(nbytes, 1024, "HDwrite");
-
- /* Close the file */
- posix_ret = HDclose(fd);
- CHECK(posix_ret, (-1), "HDclose");
-
- /* Verify that the file is not an HDF5 file */
- is_hdf5 = H5Fis_accessible(non_hdf5_filename, fapl_id);
- VERIFY(is_hdf5, false, "H5Fis_accessible (non-HDF5 file)");
- }
-
- /* Clean up files */
- h5_delete_test_file(filename, fapl_id);
- h5_delete_test_file(non_hdf5_filename, fapl_id);
-#endif
- H5Fdelete(filename, fapl_id);
-
- /* Close property list */
- ret = H5Pclose(fapl_id);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_file_is_accessible() */
-
-/****************************************************************
-**
-** test_file_ishdf5(): low-level file test routine.
-** This test checks whether the H5Fis_hdf5() routine is working
-** correctly in various situations.
-**
-*****************************************************************/
-#if 0
-#ifndef H5_NO_DEPRECATED_SYMBOLS
-static void
-test_file_ishdf5(const char *env_h5_drvr)
-{
- hid_t fid = H5I_INVALID_HID; /* File opened with read-write permission */
- hid_t fcpl_id = H5I_INVALID_HID; /* File creation property list */
- hid_t fapl_id = H5I_INVALID_HID; /* File access property list */
- int fd; /* POSIX file descriptor */
- char filename[FILENAME_LEN]; /* Filename to use */
- char sb_filename[FILENAME_LEN]; /* Name of file w/ superblock */
- ssize_t nbytes; /* Number of bytes written */
- unsigned u; /* Local index variable */
- unsigned char buf[1024]; /* Buffer of data to write */
- htri_t is_hdf5; /* Whether a file is an HDF5 file */
- int posix_ret; /* Return value from POSIX calls */
- herr_t ret; /* Return value from HDF5 calls */
-
- if (!h5_using_default_driver(env_h5_drvr))
- return;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Detection of HDF5 Files (using deprecated H5Fis_hdf5() call)\n"));
-
- /* Get FAPL */
- fapl_id = h5_fileaccess();
- CHECK(fapl_id, H5I_INVALID_HID, "H5Pcreate");
-
- /* Fix up filenames
- * For VFDs that create multiple files, we also need the name
- * of the file with the superblock. With single-file VFDs, this
- * will be equal to the one from h5_fixname().
- */
- h5_fixname(FILE_IS_ACCESSIBLE, fapl_id, filename, sizeof(filename));
- h5_fixname_superblock(FILE_IS_ACCESSIBLE, fapl_id, sb_filename, sizeof(filename));
-
- /****************/
- /* Normal usage */
- /****************/
-
- /* Create a file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_hdf5(sb_filename);
- VERIFY(is_hdf5, true, "H5Fis_hdf5");
-
- /*******************************/
- /* Non-default user block size */
- /*******************************/
-
- /* Create a file creation property list with a non-default user block size */
- fcpl_id = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl_id, H5I_INVALID_HID, "H5Pcreate");
-
- ret = H5Pset_userblock(fcpl_id, (hsize_t)2048);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file with non-default user block */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl_id, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Release file creation property list */
- ret = H5Pclose(fcpl_id);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_hdf5(sb_filename);
- VERIFY(is_hdf5, true, "H5Fis_hdf5");
-
- /***************************/
- /* Non-empty non-HDF5 file */
- /***************************/
-
- /* Create non-HDF5 file. Use the calculated superblock
- * filename to avoid the format strings that will make
- * open(2) sad.
- */
- fd = HDopen(sb_filename, O_RDWR | O_CREAT | O_TRUNC, H5_POSIX_CREATE_MODE_RW);
- CHECK(fd, (-1), "HDopen");
-
- /* Initialize information to write */
- for (u = 0; u < 1024; u++)
- buf[u] = (unsigned char)u;
-
- /* Write some information */
- nbytes = HDwrite(fd, buf, (size_t)1024);
- VERIFY(nbytes, 1024, "HDwrite");
-
- /* Close the file */
- posix_ret = HDclose(fd);
- CHECK(posix_ret, (-1), "HDclose");
-
- /* Verify that the file is not an HDF5 file */
- is_hdf5 = H5Fis_hdf5(sb_filename);
- VERIFY(is_hdf5, false, "H5Fis_hdf5");
-
- /* Clean up files */
-#if 0
- h5_delete_test_file(filename, fapl_id);
-#endif
- H5Fdelete(filename, fapl_id);
-
- /* Close property list */
- ret = H5Pclose(fapl_id);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_file_ishdf5() */
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
-#endif
-
-/****************************************************************
-**
-** test_file_delete(): tests H5Fdelete for all VFDs
-**
-*****************************************************************/
-#define FILE_DELETE "test_file_delete.h5"
-#define FILE_DELETE_NOT_HDF5 "test_file_delete_not_hdf5"
-static void
-test_file_delete(hid_t fapl_id)
-{
- hid_t fid = H5I_INVALID_HID; /* File to be deleted */
- char filename[FILENAME_LEN]; /* Filename to use */
- htri_t is_hdf5; /* Whether a file is an HDF5 file */
-#if 0
- int fd; /* POSIX file descriptor */
- int iret;
-#endif
- herr_t ret;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Deletion of HDF5 Files\n"));
-
- /*************/
- /* HDF5 FILE */
- /*************/
-
- /* Get fapl-dependent filename */
- h5_fixname(FILE_DELETE, fapl_id, filename, sizeof(filename));
-
- /* Create a file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Close file */
- ret = H5Fclose(fid);
- VERIFY(ret, SUCCEED, "H5Fclose");
-
- /* Verify that the file is an HDF5 file */
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- VERIFY(is_hdf5, true, "H5Fis_accessible");
-
- /* Delete the file */
- ret = H5Fdelete(filename, fapl_id);
- VERIFY(ret, SUCCEED, "H5Fdelete");
-
- /* Verify that the file is NO LONGER an HDF5 file */
- /* This should fail since there is no file */
- H5E_BEGIN_TRY
- {
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- }
- H5E_END_TRY
- VERIFY(is_hdf5, FAIL, "H5Fis_accessible");
-
-#if 0
- /* Just in case deletion fails - silent on errors */
- h5_delete_test_file(FILE_DELETE, fapl_id);
-
- /*****************/
- /* NON-HDF5 FILE */
- /*****************/
-
- /* Get fapl-dependent filename */
- h5_fixname(FILE_DELETE_NOT_HDF5, fapl_id, filename, sizeof(filename));
-
- /* Create a non-HDF5 file */
- fd = HDopen(filename, O_RDWR | O_CREAT | O_TRUNC, H5_POSIX_CREATE_MODE_RW);
- CHECK_I(fd, "HDopen");
-
- /* Close the file */
- ret = HDclose(fd);
- VERIFY(ret, 0, "HDclose");
-
- /* Verify that the file is not an HDF5 file */
- /* Note that you can get a FAIL result when h5_fixname()
- * perturbs the filename as a file with that exact name
- * may not have been created since we created it with
- * open(2) and not the library.
- */
- H5E_BEGIN_TRY
- {
- is_hdf5 = H5Fis_accessible(filename, fapl_id);
- }
- H5E_END_TRY
- CHECK(is_hdf5, true, "H5Fis_accessible");
-
- /* Try to delete it (should fail) */
- H5E_BEGIN_TRY
- {
- ret = H5Fdelete(filename, fapl_id);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fdelete");
-
- /* Delete the file */
- iret = H5Fdelete(filename, H5P_DEFAULT);
- VERIFY(iret, 0, "H5Fdelete");
-#endif
-} /* end test_file_delete() */
-
-/****************************************************************
-**
-** test_file_open_dot(): low-level file test routine.
-** This test checks whether opening objects with "." for a name
-** works correctly in various situations.
-**
-*****************************************************************/
-static void
-test_file_open_dot(void)
-{
- hid_t fid; /* File ID */
- hid_t gid, gid2; /* Group IDs */
- hid_t did; /* Dataset ID */
- hid_t sid; /* Dataspace ID */
- hid_t tid, tid2; /* Datatype IDs */
- herr_t ret;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing opening objects with \".\" for a name\n"));
-
- /* Create a new HDF5 file to work with */
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Create a group in the HDF5 file */
- gid = H5Gcreate2(fid, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gcreate2");
-
- /* Create a dataspace for creating datasets */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, FAIL, "H5Screate");
-
- /* Create a dataset with no name using the file ID */
- H5E_BEGIN_TRY
- {
- did = H5Dcreate2(fid, ".", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(did, FAIL, "H5Dcreate2");
-
- /* Create a dataset with no name using the group ID */
- H5E_BEGIN_TRY
- {
- did = H5Dcreate2(gid, ".", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(did, FAIL, "H5Dcreate2");
-
- /* Open a dataset with no name using the file ID */
- H5E_BEGIN_TRY
- {
- did = H5Dopen2(fid, ".", H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(did, FAIL, "H5Dopen2");
-
- /* Open a dataset with no name using the group ID */
- H5E_BEGIN_TRY
- {
- did = H5Dopen2(gid, ".", H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(did, FAIL, "H5Dopen2");
-
- /* Make a copy of a datatype to use for creating a named datatype */
- tid = H5Tcopy(H5T_NATIVE_INT);
- CHECK(tid, FAIL, "H5Tcopy");
-
- /* Create a named datatype with no name using the file ID */
- H5E_BEGIN_TRY
- {
- ret = H5Tcommit2(fid, ".", tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Tcommit2");
-
- /* Create a named datatype with no name using the group ID */
- H5E_BEGIN_TRY
- {
- ret = H5Tcommit2(gid, ".", tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Tcommit2");
-
- /* Open a named datatype with no name using the file ID */
- H5E_BEGIN_TRY
- {
- tid2 = H5Topen2(fid, ".", H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(tid2, FAIL, "H5Topen2");
-
- /* Open a named datatype with no name using the group ID */
- H5E_BEGIN_TRY
- {
- tid2 = H5Topen2(gid, ".", H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(tid2, FAIL, "H5Topen2");
-
- /* Create a group with no name using the file ID */
- H5E_BEGIN_TRY
- {
- gid2 = H5Gcreate2(fid, ".", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(gid2, FAIL, "H5Gcreate2");
-
- /* Create a group with no name using the group ID */
- H5E_BEGIN_TRY
- {
- gid2 = H5Gcreate2(gid, ".", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- }
- H5E_END_TRY
- VERIFY(gid2, FAIL, "H5Gcreate2");
-
- /* Open a group with no name using the file ID (should open the root group) */
- gid2 = H5Gopen2(fid, ".", H5P_DEFAULT);
- CHECK(gid2, FAIL, "H5Gopen2");
-
- ret = H5Gclose(gid2);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Open a group with no name using the group ID (should open the group again) */
- gid2 = H5Gopen2(gid, ".", H5P_DEFAULT);
- CHECK(gid2, FAIL, "H5Gopen2");
-
- ret = H5Gclose(gid2);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close everything */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
-} /* end test_file_open_dot() */
-
-/****************************************************************
-**
-** test_file_open_overlap(): low-level file test routine.
-** This test checks whether opening files in an overlapping way
-** (as opposed to a nested manner) works correctly.
-**
-*****************************************************************/
-static void
-test_file_open_overlap(void)
-{
- hid_t fid1, fid2;
- hid_t did1, did2;
- hid_t gid;
- hid_t sid;
- ssize_t nobjs; /* # of open objects */
- unsigned intent;
-#if 0
- unsigned long fileno1, fileno2; /* File number */
-#endif
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing opening overlapping file opens\n"));
-
- /* Create file */
- fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- /* Open file also */
- fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Check the intent */
- ret = H5Fget_intent(fid1, &intent);
- CHECK(ret, FAIL, "H5Fget_intent");
- VERIFY(intent, H5F_ACC_RDWR, "H5Fget_intent");
-#if 0
- /* Check the file numbers */
- fileno1 = 0;
- ret = H5Fget_fileno(fid1, &fileno1);
- CHECK(ret, FAIL, "H5Fget_fileno");
- fileno2 = 0;
- ret = H5Fget_fileno(fid2, &fileno2);
- CHECK(ret, FAIL, "H5Fget_fileno");
- VERIFY(fileno1, fileno2, "H5Fget_fileno");
-
- /* Check that a file number pointer of NULL is ignored */
- ret = H5Fget_fileno(fid1, NULL);
- CHECK(ret, FAIL, "H5Fget_fileno");
-#endif
-
- /* Create a group in file */
- gid = H5Gcreate2(fid1, GROUP1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gcreate2");
-
- /* Create dataspace for dataset */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, FAIL, "H5Screate");
-
- /* Create dataset in group w/first file ID */
- did1 = H5Dcreate2(gid, DSET1, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dcreate2");
-
- if (vol_cap_flags_g & H5VL_CAP_FLAG_FILE_MORE) {
- /* Check number of objects opened in first file */
- nobjs = H5Fget_obj_count(fid1, H5F_OBJ_LOCAL | H5F_OBJ_ALL);
- VERIFY(nobjs, 3, "H5Fget_obj_count"); /* 3 == file, dataset & group */
- }
-
- /* Close dataset */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close first file ID */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create dataset with second file ID */
- did2 = H5Dcreate2(fid2, DSET2, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dcreate2");
-
- /* Check number of objects opened in first file */
- nobjs = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
- VERIFY(nobjs, 2, "H5Fget_obj_count"); /* 3 == file & dataset */
-
- /* Close dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close second dataset */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close second file */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_file_open_overlap() */
-
-/****************************************************************
-**
-** test_file_getname(): low-level file test routine.
-** This test checks whether H5Fget_name works correctly.
-**
-*****************************************************************/
-static void
-test_file_getname(void)
-{
- /* Compound datatype */
- typedef struct s1_t {
- unsigned int a;
- float b;
- } s1_t;
-
- hid_t file_id;
- hid_t group_id;
- hid_t dataset_id;
- hid_t space_id;
- hid_t type_id;
- hid_t attr_id;
- hsize_t dims[TESTA_RANK] = {TESTA_NX, TESTA_NY};
- char name[TESTA_NAME_BUF_SIZE];
- ssize_t name_len;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing H5Fget_name() functionality\n"));
-
- /* Create a new file_id using default properties. */
- file_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file_id, FAIL, "H5Fcreate");
-
- /* Get and verify file name */
- name_len = H5Fget_name(file_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- CHECK(name_len, FAIL, "H5Fget_name");
- VERIFY_STR(name, FILE1, "H5Fget_name");
-
- /* Create a group in the root group */
- group_id = H5Gcreate2(file_id, TESTA_GROUPNAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group_id, FAIL, "H5Gcreate2");
-
- /* Get and verify file name */
- name_len = H5Fget_name(group_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- CHECK(name_len, FAIL, "H5Fget_name");
- VERIFY_STR(name, FILE1, "H5Fget_name");
-
- /* Create the data space */
- space_id = H5Screate_simple(TESTA_RANK, dims, NULL);
- CHECK(space_id, FAIL, "H5Screate_simple");
-
- /* Try get file name from data space. Supposed to fail because
- * it's illegal operation. */
- H5E_BEGIN_TRY
- {
- name_len = H5Fget_name(space_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- }
- H5E_END_TRY
- VERIFY(name_len, FAIL, "H5Fget_name");
-
- /* Create a new dataset */
- dataset_id =
- H5Dcreate2(file_id, TESTA_DSETNAME, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dataset_id, FAIL, "H5Dcreate2");
-
- /* Get and verify file name */
- name_len = H5Fget_name(dataset_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- CHECK(name_len, FAIL, "H5Fget_name");
- VERIFY_STR(name, FILE1, "H5Fget_name");
-
- /* Create an attribute for the dataset */
- attr_id = H5Acreate2(dataset_id, TESTA_ATTRNAME, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(attr_id, FAIL, "H5Acreate2");
-
- /* Get and verify file name */
- name_len = H5Fget_name(attr_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- CHECK(name_len, FAIL, "H5Fget_name");
- VERIFY_STR(name, FILE1, "H5Fget_name");
-
- /* Create a compound datatype */
- type_id = H5Tcreate(H5T_COMPOUND, sizeof(s1_t));
- CHECK(type_id, FAIL, "H5Tcreate");
-
- /* Insert fields */
- ret = H5Tinsert(type_id, "a", HOFFSET(s1_t, a), H5T_NATIVE_INT);
- CHECK(ret, FAIL, "H5Tinsert");
-
- ret = H5Tinsert(type_id, "b", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
- CHECK(ret, FAIL, "H5Tinsert");
-
- /* Save it on file */
- ret = H5Tcommit2(file_id, TESTA_DTYPENAME, type_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Tcommit2");
-
- /* Get and verify file name */
- name_len = H5Fget_name(type_id, name, (size_t)TESTA_NAME_BUF_SIZE);
- CHECK(name_len, FAIL, "H5Fget_name");
- VERIFY_STR(name, FILE1, "H5Fget_name");
-
- /* Close things down */
- ret = H5Tclose(type_id);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Aclose(attr_id);
- CHECK(ret, FAIL, "H5Aclose");
-
- ret = H5Dclose(dataset_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Sclose(space_id);
- CHECK(ret, FAIL, "H5Sclose");
-
- ret = H5Gclose(group_id);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Fclose(file_id);
- CHECK(ret, FAIL, "H5Fclose");
-
-} /* end test_file_getname() */
-
-/****************************************************************
-**
-** test_file_double_root_open(): low-level file test routine.
-** This test checks whether opening the root group from two
-** different files works correctly.
-**
-*****************************************************************/
-static void
-test_file_double_root_open(void)
-{
- hid_t file1_id, file2_id;
- hid_t grp1_id, grp2_id;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing double root group open\n"));
-
- file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fcreate");
- file2_id = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-
- grp1_id = H5Gopen2(file1_id, "/", H5P_DEFAULT);
- CHECK(grp1_id, FAIL, "H5Gopen2");
- grp2_id = H5Gopen2(file2_id, "/", H5P_DEFAULT);
- CHECK(grp2_id, FAIL, "H5Gopen2");
-
- /* Note "asymmetric" close order */
- ret = H5Gclose(grp1_id);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(grp2_id);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_file_double_root_open() */
-
-/****************************************************************
-**
-** test_file_double_group_open(): low-level file test routine.
-** This test checks whether opening the same group from two
-** different files works correctly.
-**
-*****************************************************************/
-static void
-test_file_double_group_open(void)
-{
- hid_t file1_id, file2_id;
- hid_t grp1_id, grp2_id;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing double non-root group open\n"));
-
- file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fcreate");
- file2_id = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-
- grp1_id = H5Gcreate2(file1_id, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(grp1_id, FAIL, "H5Gcreate2");
- grp2_id = H5Gopen2(file2_id, GRP_NAME, H5P_DEFAULT);
- CHECK(grp2_id, FAIL, "H5Gopen2");
-
- /* Note "asymmetric" close order */
- ret = H5Gclose(grp1_id);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(grp2_id);
- CHECK(ret, FAIL, "H5Gclose");
-
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_file_double_group_open() */
-
-/****************************************************************
-**
-** test_file_double_dataset_open(): low-level file test routine.
-** This test checks whether opening the same dataset from two
-** different files works correctly.
-**
-*****************************************************************/
-static void
-test_file_double_dataset_open(void)
-{
- hid_t file1_id, file2_id;
- hid_t dset1_id, dset2_id;
- hid_t space_id;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing double dataset open\n"));
-
- file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fcreate");
- file2_id = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-
- /* Create dataspace for dataset */
- space_id = H5Screate(H5S_SCALAR);
- CHECK(space_id, FAIL, "H5Screate");
-
- dset1_id =
- H5Dcreate2(file1_id, DSET_NAME, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dset1_id, FAIL, "H5Dcreate2");
- dset2_id = H5Dopen2(file2_id, DSET_NAME, H5P_DEFAULT);
- CHECK(dset2_id, FAIL, "H5Dopen2");
-
- /* Close "supporting" dataspace */
- ret = H5Sclose(space_id);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Note "asymmetric" close order */
- ret = H5Dclose(dset1_id);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Dclose(dset2_id);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_file_double_dataset_open() */
-
-/****************************************************************
-**
-** test_file_double_file_dataset_open():
-** This test checks multi-opens of files & datasets:
-** It simulates the multi-thread test program from DLS
-** which exposes the file pointer segmentation fault failure.
-** NOTE: The order on when the files and datasets are open/close
-** is important.
-**
-*****************************************************************/
-static void
-test_file_double_file_dataset_open(bool new_format)
-{
- hid_t fapl = -1; /* File access property list */
- hid_t dcpl = -1; /* Dataset creation property list */
- hid_t fid1 = -1, fid2 = -1; /* File IDs */
- hid_t did1 = -1, did2 = -1; /* Dataset IDs */
- hid_t sid1 = -1, sid2 = -1; /* Dataspace IDs */
- hid_t tid1 = -1, tid2 = -1; /* Datatype IDs */
- hsize_t dims[1] = {5}, dims2[2] = {1, 4}; /* Dimension sizes */
- hsize_t e_ext_dims[1] = {7}; /* Expanded dimension sizes */
- hsize_t s_ext_dims[1] = {3}; /* Shrunk dimension sizes */
- hsize_t max_dims0[1] = {8}; /* Maximum dimension sizes */
- hsize_t max_dims1[1] = {H5S_UNLIMITED}; /* Maximum dimension sizes for extensible array index */
- hsize_t max_dims2[2] = {H5S_UNLIMITED, H5S_UNLIMITED}; /* Maximum dimension sizes for v2 B-tree index */
- hsize_t chunks[1] = {2}, chunks2[2] = {4, 5}; /* Chunk dimension sizes */
-#if 0
- hsize_t size; /* File size */
-#endif
- char filename[FILENAME_LEN]; /* Filename to use */
- const char *data[] = {"String 1", "String 2", "String 3", "String 4", "String 5"}; /* Input Data */
- const char *e_data[] = {"String 1", "String 2", "String 3", "String 4",
- "String 5", "String 6", "String 7"}; /* Input Data */
- char *buffer[5]; /* Output buffer */
- int wbuf[4] = {1, 2, 3, 4}; /* Input data */
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing double file and dataset open/close\n"));
-
- /* Setting up test file */
- fapl = h5_fileaccess();
- CHECK(fapl, FAIL, "H5Pcreate");
- if (new_format) {
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
- } /* end if */
- h5_fixname(FILE1, fapl, filename, sizeof filename);
-
- /* Create the test file */
- fid1 = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid1, FAIL, "H5Fcreate");
-
- /* Create a chunked dataset with fixed array indexing */
- sid1 = H5Screate_simple(1, dims, max_dims0);
- CHECK(sid1, FAIL, "H5Screate_simple");
- tid1 = H5Tcopy(H5T_C_S1);
- CHECK(tid1, FAIL, "H5Tcopy");
- ret = H5Tset_size(tid1, H5T_VARIABLE);
- CHECK(ret, FAIL, "H5Tset_size");
-
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 1, chunks);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- did1 = H5Dcreate2(fid1, "dset_fa", tid1, sid1, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dcreate2");
-
- /* Closing */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Tclose(tid1);
- CHECK(ret, FAIL, "H5Tclose");
- ret = H5Sclose(sid1);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Create a chunked dataset with extensible array indexing */
- sid1 = H5Screate_simple(1, dims, max_dims1);
- CHECK(sid1, FAIL, "H5Screate_simple");
- tid1 = H5Tcopy(H5T_C_S1);
- CHECK(tid1, FAIL, "H5Tcopy");
- ret = H5Tset_size(tid1, H5T_VARIABLE);
- CHECK(ret, FAIL, "H5Tset_size");
-
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 1, chunks);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- did1 = H5Dcreate2(fid1, "dset_ea", tid1, sid1, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dcreate2");
-
- /* Write to the dataset */
- ret = H5Dwrite(did1, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Closing */
- /* (Leave sid1 open for later use) */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Tclose(tid1);
- CHECK(ret, FAIL, "H5Tclose");
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Create a chunked dataset with v2 btree indexing */
- sid2 = H5Screate_simple(2, dims2, max_dims2);
- CHECK(sid2, FAIL, "H5Screate_simple");
-
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 2, chunks2);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- did2 = H5Dcreate2(fid1, "dset_bt2", H5T_NATIVE_INT, sid2, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dcreate2");
-
- /* Write to the dataset */
- ret = H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Closing */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- ret = H5Sclose(sid2);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /*
- * Scenario 1
- */
-
- /* First file open */
- fid1 = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* First file's dataset open */
- did1 = H5Dopen2(fid1, "/dset_fa", H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dopen2");
-
- tid1 = H5Tcopy(did1);
- CHECK(tid1, FAIL, "H5Tcopy");
-
- /* First file's dataset write */
- ret = H5Dwrite(did1, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Second file open */
- fid2 = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Second file's dataset open */
- did2 = H5Dopen2(fid2, "/dset_fa", H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dopen2");
-
- tid2 = H5Tcopy(did2);
- CHECK(tid2, FAIL, "H5Tcopy");
-
- /* First file's dataset close */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* First file close */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Second file's dataset write */
- ret = H5Dwrite(did2, tid2, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Second file's dataset close */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Second file close */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Closing */
- ret = H5Tclose(tid1);
- CHECK(ret, FAIL, "H5Tclose");
- ret = H5Tclose(tid2);
- CHECK(ret, FAIL, "H5Tclose");
-
- /*
- * Scenario 2
- */
-
- /* First file open */
- fid1 = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* Second file open */
- fid2 = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Second file's dataset open */
- did2 = H5Dopen2(fid2, "/dset_ea", H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dopen2");
-
- tid2 = H5Tcopy(did2);
- CHECK(tid2, FAIL, "H5Tcopy");
-
- /* First file's dataset open */
- did1 = H5Dopen2(fid1, "/dset_ea", H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dopen2");
-
- tid1 = H5Tcopy(did1);
- CHECK(tid1, FAIL, "H5Tcopy");
-
- /* Second file's dataset read */
- memset(buffer, 0, sizeof(char *) * 5);
- ret = H5Dread(did2, tid2, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer);
- CHECK(ret, FAIL, "H5Dread");
- ret = H5Treclaim(tid2, sid1, H5P_DEFAULT, buffer);
- CHECK(ret, FAIL, "H5Treclaim");
-
- /* Second file's dataset close */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Second file close */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* First file's dataset read */
- memset(buffer, 0, sizeof(char *) * 5);
- ret = H5Dread(did1, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer);
- CHECK(ret, FAIL, "H5Dread");
- ret = H5Treclaim(tid2, sid1, H5P_DEFAULT, buffer);
- CHECK(ret, FAIL, "H5Treclaim");
-
- /* First file's dataset close */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* First file close */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Closing */
- ret = H5Tclose(tid1);
- CHECK(ret, FAIL, "H5Tclose");
- ret = H5Sclose(sid1);
- CHECK(ret, FAIL, "H5Sclose");
-
- ret = H5Tclose(tid2);
- CHECK(ret, FAIL, "H5Tclose");
-
- /*
- * Scenario 3
- */
-
- /* First file open */
- fid1 = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* First file's dataset open */
- did1 = H5Dopen2(fid1, "/dset_bt2", H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dopen2");
-#if 0
- /* First file's get storage size */
- size = H5Dget_storage_size(did1);
- CHECK(size, 0, "H5Dget_storage_size");
-#endif
- /* Second file open */
- fid2 = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Second file's dataset open */
- did2 = H5Dopen2(fid2, "/dset_bt2", H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dopen2");
-
- /* First file's dataset close */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* First file close */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-#if 0
- /* Second file's get storage size */
- size = H5Dget_storage_size(did2);
- CHECK(size, 0, "H5Dget_storage_size");
-#endif
- /* Second file's dataset close */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Second file close */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /*
- * Scenario 4
- * --trigger H5AC_protect: Assertion `f->shared' failed
- * from second call to
- * H5Dset_extent->...H5D__earray_idx_remove->H5EA_get...H5EA__iblock_protect...H5AC_protect
- */
- /* First file open */
- fid1 = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- CHECK(fid1, FAIL, "H5Fopen");
-
- /* First file's dataset open */
- did1 = H5Dopen2(fid1, "/dset_ea", H5P_DEFAULT);
- CHECK(did1, FAIL, "H5Dopen2");
-
- tid1 = H5Tcopy(did1);
- CHECK(tid1, FAIL, "H5Tcopy");
-
- /* Extend the dataset */
- ret = H5Dset_extent(did1, e_ext_dims);
- CHECK(ret, FAIL, "H5Dset_extent");
-
- /* Write to the dataset */
- ret = H5Dwrite(did1, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, e_data);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Second file open */
- fid2 = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- CHECK(fid2, FAIL, "H5Fopen");
-
- /* Second file's dataset open */
- did2 = H5Dopen2(fid2, "/dset_ea", H5P_DEFAULT);
- CHECK(did2, FAIL, "H5Dopen2");
-
- /* First file's dataset close */
- ret = H5Dclose(did1);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* First file close */
- ret = H5Fclose(fid1);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Shrink the dataset */
- ret = H5Dset_extent(did2, s_ext_dims);
- CHECK(ret, FAIL, "H5Dset_extent");
-
- /* Second file's dataset close */
- ret = H5Dclose(did2);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Second file close */
- ret = H5Fclose(fid2);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close the data type */
- ret = H5Tclose(tid1);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Close FAPL */
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-} /* end test_file_double_dataset_open() */
-
-/****************************************************************
-**
-** test_file_double_datatype_open(): low-level file test routine.
-** This test checks whether opening the same named datatype from two
-** different files works correctly.
-**
-*****************************************************************/
-static void
-test_file_double_datatype_open(void)
-{
- hid_t file1_id, file2_id;
- hid_t type1_id, type2_id;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing double datatype open\n"));
-
- file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fcreate");
- file2_id = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-
- type1_id = H5Tcopy(H5T_NATIVE_INT);
- CHECK(type1_id, FAIL, "H5Tcopy");
- ret = H5Tcommit2(file1_id, TYPE_NAME, type1_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Tcommit2");
- type2_id = H5Topen2(file2_id, TYPE_NAME, H5P_DEFAULT);
- CHECK(type2_id, FAIL, "H5Topen2");
-
- /* Note "asymmetric" close order */
- ret = H5Tclose(type1_id);
- CHECK(ret, FAIL, "H5Tclose");
- ret = H5Tclose(type2_id);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_file_double_dataset_open() */
-
-/****************************************************************
-**
-** test_userblock_file_size(): low-level file test routine.
-** This test checks that the presence of a userblock
-** affects the file size in the expected manner, and that
-** the filesize is not changed by reopening the file. It
-** creates two files which are identical except that one
-** contains a userblock, and verifies that their file sizes
-** differ exactly by the userblock size.
-**
-*****************************************************************/
-#if 0
-static void
-test_userblock_file_size(const char *env_h5_drvr)
-{
- hid_t file1_id, file2_id;
- hid_t group1_id, group2_id;
- hid_t dset1_id, dset2_id;
- hid_t space_id;
- hid_t fcpl2_id;
- hsize_t dims[2] = {3, 4};
-#if 0
- hsize_t filesize1, filesize2, filesize;
- unsigned long fileno1, fileno2; /* File number */
-#endif
- herr_t ret; /* Generic return value */
-
- /* Don't run with multi/split, family or direct drivers */
- if (!strcmp(env_h5_drvr, "multi") || !strcmp(env_h5_drvr, "split") ||
- !strcmp(env_h5_drvr, "family") || !strcmp(env_h5_drvr, "direct"))
- return;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing file size with user block\n"));
-
- /* Create property list with userblock size set */
- fcpl2_id = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl2_id, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl2_id, USERBLOCK_SIZE);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create files. Only file2 with have a userblock. */
- file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fcreate");
- file2_id = H5Fcreate(FILE2, H5F_ACC_TRUNC, fcpl2_id, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fcreate");
-#if 0
- /* Check the file numbers */
- fileno1 = 0;
- ret = H5Fget_fileno(file1_id, &fileno1);
- CHECK(ret, FAIL, "H5Fget_fileno");
- fileno2 = 0;
- ret = H5Fget_fileno(file2_id, &fileno2);
- CHECK(ret, FAIL, "H5Fget_fileno");
- CHECK(fileno1, fileno2, "H5Fget_fileno");
-#endif
- /* Create groups */
- group1_id = H5Gcreate2(file1_id, GROUP1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group1_id, FAIL, "H5Gcreate2");
- group2_id = H5Gcreate2(file2_id, GROUP1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group2_id, FAIL, "H5Gcreate2");
-
- /* Create dataspace */
- space_id = H5Screate_simple(2, dims, NULL);
- CHECK(space_id, FAIL, "H5Screate_simple");
-
- /* Create datasets */
- dset1_id = H5Dcreate2(file1_id, DSET2, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dset1_id, FAIL, "H5Dcreate2");
- dset2_id = H5Dcreate2(file2_id, DSET2, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(dset2_id, FAIL, "H5Dcreate2");
-
- /* Close IDs */
- ret = H5Dclose(dset1_id);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Dclose(dset2_id);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Sclose(space_id);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Gclose(group1_id);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Gclose(group2_id);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Pclose(fcpl2_id);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close files */
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Reopen files */
- file1_id = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fopen");
- file2_id = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-#if 0
- /* Check file sizes */
- ret = H5Fget_filesize(file1_id, &filesize1);
- CHECK(ret, FAIL, "H5Fget_filesize");
- ret = H5Fget_filesize(file2_id, &filesize2);
- CHECK(ret, FAIL, "H5Fget_filesize");
-
- /* Verify that the file sizes differ exactly by the userblock size */
- VERIFY_TYPE((unsigned long long)filesize2, (unsigned long long)(filesize1 + USERBLOCK_SIZE),
- unsigned long long, "%llu", "H5Fget_filesize");
-#endif
- /* Close files */
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Reopen files */
- file1_id = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(file1_id, FAIL, "H5Fopen");
- file2_id = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(file2_id, FAIL, "H5Fopen");
-#if 0
- /* Verify file sizes did not change */
- ret = H5Fget_filesize(file1_id, &filesize);
- CHECK(ret, FAIL, "H5Fget_filesize");
- VERIFY(filesize, filesize1, "H5Fget_filesize");
- ret = H5Fget_filesize(file2_id, &filesize);
- CHECK(ret, FAIL, "H5Fget_filesize");
- VERIFY(filesize, filesize2, "H5Fget_filesize");
-#endif
- /* Close files */
- ret = H5Fclose(file1_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_userblock_file_size() */
-#endif
-
-/****************************************************************
-**
-** test_cached_stab_info(): low-level file test routine.
-** This test checks that new files are created with cached
-** symbol table information in the superblock (when using
-** the old format). This is necessary to ensure backwards
-** compatibility with versions from 1.3.0 to 1.6.3.
-**
-*****************************************************************/
-#if 0
-static void
-test_cached_stab_info(void)
-{
- hid_t file_id;
- hid_t group_id;
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing cached symbol table information\n"));
-
- /* Create file */
- file_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file_id, FAIL, "H5Fcreate");
-
- /* Create group */
- group_id = H5Gcreate2(file_id, GROUP1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group_id, FAIL, "H5Gcreate2");
-
- /* Close file and group */
- ret = H5Gclose(group_id);
- CHECK(ret, FAIL, "H5Gclose");
- ret = H5Fclose(file_id);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Reopen file */
- file_id = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file_id, FAIL, "H5Fopen");
-#if 0
- /* Verify the cached symbol table information */
- ret = H5F__check_cached_stab_test(file_id);
- CHECK(ret, FAIL, "H5F__check_cached_stab_test");
-#endif
- /* Close file */
- ret = H5Fclose(file_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_cached_stab_info() */
-#endif
-
-#if 0
-/*
- * To calculate the checksum for a file.
- * This is a helper routine for test_rw_noupdate().
- */
-static int
-cal_chksum(const char *file, uint32_t *chksum)
-{
- int curr_num_errs = nerrors; /* Retrieve the current # of errors */
- int fdes = -1; /* File descriptor */
- void *file_data = NULL; /* Copy of file data */
- ssize_t bytes_read; /* # of bytes read */
- h5_stat_t sb; /* Stat buffer for file */
- herr_t ret; /* Generic return value */
-
- /* Open the file */
- fdes = HDopen(file, O_RDONLY);
- CHECK(fdes, FAIL, "HDopen");
-
- /* Retrieve the file's size */
- ret = HDfstat(fdes, &sb);
- CHECK(fdes, FAIL, "HDfstat");
-
- /* Allocate space for the file data */
- file_data = malloc((size_t)sb.st_size);
- CHECK_PTR(file_data, "malloc");
-
- if (file_data) {
- /* Read file's data into memory */
- bytes_read = HDread(fdes, file_data, (size_t)sb.st_size);
- CHECK(bytes_read == sb.st_size, false, "malloc");
-
- /* Calculate checksum */
- *chksum = H5_checksum_lookup3(file_data, sizeof(file_data), 0);
-
- /* Free memory */
- free(file_data);
- }
-
- /* Close the file */
- ret = HDclose(fdes);
- CHECK(ret, FAIL, "HDclose");
-
- return ((nerrors == curr_num_errs) ? 0 : -1);
-} /* cal_chksum() */
-#endif
-
-/****************************************************************
-**
-** test_rw_noupdate(): low-level file test routine.
-** This test checks to ensure that opening and closing a file
-** with read/write permissions does not write anything to the
-** file if the file does not change.
-** Due to the implementation of file locking (status_flags in
-** the superblock is used), this test is changed to use checksum
-** instead of timestamp to verify the file is not changed.
-**
-*****************************************************************/
-#if 0
-static void
-test_rw_noupdate(void)
-{
- herr_t ret; /* Generic return value */
- hid_t fid; /* File ID */
- uint32_t chksum1, chksum2; /* Checksum value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing to verify that nothing is written if nothing is changed.\n"));
-
- /* Create and Close a HDF5 File */
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Calculate checksum for the file */
- ret = cal_chksum(FILE1, &chksum1);
- CHECK(ret, FAIL, "cal_chksum");
-
- /* Open and close File With Read/Write Permission */
- fid = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Calculate checksum for the file */
- ret = cal_chksum(FILE1, &chksum2);
- CHECK(ret, FAIL, "cal_chksum");
-
- /* The two checksums are the same, i.e. the file is not changed */
- VERIFY(chksum1, chksum2, "Checksum");
-
-} /* end test_rw_noupdate() */
-#endif
-
-/****************************************************************
-**
-** test_userblock_alignment_helper1(): helper routine for
-** test_userblock_alignment() test, to handle common testing
-**
-*****************************************************************/
-#if 0
-static int
-test_userblock_alignment_helper1(hid_t fcpl, hid_t fapl)
-{
- hid_t fid; /* File ID */
- int curr_num_errs = nerrors(); /* Retrieve the current # of errors */
- herr_t ret; /* Generic return value */
-
- /* Create a file with FAPL & FCPL */
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Only proceed further if file ID is OK */
- if (fid > 0) {
- hid_t gid; /* Group ID */
- hid_t sid; /* Dataspace ID */
- hid_t did; /* Dataset ID */
- int val = 2; /* Dataset value */
-
- /* Create a group */
- gid = H5Gcreate2(fid, "group1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gcreate2");
-
- /* Create a dataset */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, FAIL, "H5Screate");
- did = H5Dcreate2(gid, "dataset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dcreate2");
-
- /* Close dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Write value to dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &val);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- } /* end if */
-
- return ((nerrors == curr_num_errs) ? 0 : -1);
-} /* end test_userblock_alignment_helper1() */
-
-/****************************************************************
-**
-** test_userblock_alignment_helper2(): helper routine for
-** test_userblock_alignment() test, to handle common testing
-**
-*****************************************************************/
-static int
-test_userblock_alignment_helper2(hid_t fapl, bool open_rw)
-{
- hid_t fid; /* File ID */
- int curr_num_errs = nerrors(); /* Retrieve the current # of errors */
- herr_t ret; /* Generic return value */
-
- /* Re-open file */
- fid = H5Fopen(FILE1, (open_rw ? H5F_ACC_RDWR : H5F_ACC_RDONLY), fapl);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Only proceed further if file ID is OK */
- if (fid > 0) {
- hid_t gid; /* Group ID */
- hid_t did; /* Dataset ID */
- int val = -1; /* Dataset value */
-
- /* Open group */
- gid = H5Gopen2(fid, "group1", H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gopen2");
-
- /* Open dataset */
- did = H5Dopen2(gid, "dataset", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen2");
-
- /* Read value from dataset */
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &val);
- CHECK(ret, FAIL, "H5Dread");
- VERIFY(val, 2, "H5Dread");
-
- /* Close dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Only create new objects if file is open R/W */
- if (open_rw) {
- hid_t gid2; /* Group ID */
-
- /* Create a new group */
- gid2 = H5Gcreate2(gid, "group2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gcreate2");
-
- /* Close new group */
- ret = H5Gclose(gid2);
- CHECK(ret, FAIL, "H5Gclose");
- } /* end if */
-
- /* Close group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- } /* end if */
-
- return ((nerrors == curr_num_errs) ? 0 : -1);
-} /* end test_userblock_alignment_helper2() */
-
-/****************************************************************
-**
-** test_userblock_alignment(): low-level file test routine.
-** This test checks to ensure that files with both a userblock and a
-** object [allocation] alignment size set interact properly.
-**
-*****************************************************************/
-static void
-test_userblock_alignment(const char *env_h5_drvr)
-{
- hid_t fid; /* File ID */
- hid_t fcpl; /* File creation property list ID */
- hid_t fapl; /* File access property list ID */
- herr_t ret; /* Generic return value */
-
- /* Only run with sec2 driver */
- if (!h5_using_default_driver(env_h5_drvr))
- return;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing that non-zero userblocks and object alignment interact correctly.\n"));
-
- /* Case 1:
- * Userblock size = 0, alignment != 0
- * Outcome:
- * Should succeed
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)0);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Case 2:
- * Userblock size = 512, alignment = 16
- * (userblock is integral mult. of alignment)
- * Outcome:
- * Should succeed
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)16);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Case 3:
- * Userblock size = 512, alignment = 512
- * (userblock is equal to alignment)
- * Outcome:
- * Should succeed
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Case 4:
- * Userblock size = 512, alignment = 3
- * (userblock & alignment each individually valid, but userblock is
- * non-integral multiple of alignment)
- * Outcome:
- * Should fail at file creation
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Case 5:
- * Userblock size = 512, alignment = 1024
- * (userblock & alignment each individually valid, but userblock is
- * less than alignment)
- * Outcome:
- * Should fail at file creation
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Case 6:
- * File created with:
- * Userblock size = 512, alignment = 512
- * File re-opened for read-only & read-write access with:
- * Userblock size = 512, alignment = 1024
- * Outcome:
- * Should succeed
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
-
- /* Change alignment in FAPL */
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper2(fapl, false);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-} /* end test_userblock_alignment() */
-
-/****************************************************************
-**
-** test_userblock_alignment_paged(): low-level file test routine.
-** This test checks to ensure that files with both a userblock and
-** alignment interact properly:
-** -- alignment via H5Pset_alignment
-** -- alignment via paged aggregation
-**
-*****************************************************************/
-static void
-test_userblock_alignment_paged(const char *env_h5_drvr)
-{
- hid_t fid; /* File ID */
- hid_t fcpl; /* File creation property list ID */
- hid_t fapl; /* File access property list ID */
- herr_t ret; /* Generic return value */
-
- /* Only run with sec2 driver */
- if (!h5_using_default_driver(env_h5_drvr))
- return;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing interaction between userblock and alignment (via paged aggregation and "
- "H5Pset_alignment)\n"));
-
- /*
- * Case 1:
- * Userblock size = 0
- * Alignment in use = 4096
- * Strategy = H5F_FILE_SPACE_PAGE; fsp_size = alignment = 4096
- * Outcome:
- * Should succeed:
- * userblock is 0 and alignment != 0
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)0);
- CHECK(ret, FAIL, "H5Pset_userblock");
-
- /* Create file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
-
- /* Set the "use the latest version of the format" bounds */
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 2a:
- * Userblock size = 1024
- * Alignment in use = 512
- * Strategy = H5F_FILE_SPACE_PAGE; fsp_size = alignment = 512
- * H5Pset_alignment() is 3
- * Outcome:
- * Should succeed:
- * userblock (1024) is integral mult. of alignment (512)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, false, (hsize_t)1);
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
-
- /* Create file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 2b:
- * Userblock size = 1024
- * Alignment in use = 3
- * Strategy = H5F_FILE_SPACE_AGGR; fsp_size = 512
- * (via default file creation property)
- * H5Pset_alignment() is 3
- * Outcome:
- * Should fail at file creation:
- * userblock (1024) is non-integral mult. of alignment (3)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
-
- /* Create file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 3a:
- * Userblock size = 512
- * Alignment in use = 512
- * Strategy is H5F_FILE_SPACE_PAGE; fsp_size = alignment = 512
- * H5Pset_alignment() is 3
- * Outcome:
- * Should succeed:
- * userblock (512) is equal to alignment (512)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, true, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 3b:
- * Userblock size = 512
- * Alignment in use = 3
- * Strategy is H5F_FILE_SPACE_NONE; fsp_size = 512
- * H5Pset_alignment() is 3
- * Outcome:
- * Should fail at file creation:
- * userblock (512) is non-integral mult. of alignment (3)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_NONE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 4a:
- * Userblock size = 1024
- * Alignment in use = 1023
- * Strategy is H5F_FILE_SPACE_PAGE; fsp_size = alignment = 1023
- * H5Pset_alignment() is 16
- * Outcome:
- * Should fail at file creation:
- * userblock (1024) is non-integral multiple of alignment (1023)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, true, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)1023);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)16);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 4b:
- * Userblock size = 1024
- * Alignment in use = 16
- * Strategy is H5F_FILE_SPACE_FSM_AGGR; fsp_size = 1023
- * H5Pset_alignment() is 16
- * Outcome:
- * Should succeed:
- * userblock (512) is integral multiple of alignment (16)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_FSM_AGGR, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)1023);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)16);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 5a:
- * Userblock size = 512
- * Alignment in use = 1024
- * Strategy is H5F_FILE_SPACE_PAGE; fsp_size = alignment = 1024
- * H5Pset_alignment() is 16
- * Outcome:
- * Should fail at file creation:
- * userblock (512) is less than alignment (1024)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)16);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Create a file with FAPL & FCPL */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
- VERIFY(fid, FAIL, "H5Fcreate");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 5b:
- * Userblock size = 512
- * Alignment in use = 16
- * Strategy is H5F_FILE_SPACE_NONE; fsp_size = 1024
- * H5Pset_alignment() is 16
- * Outcome:
- * Should succeed:
- * userblock (512) is integral multiple of alignment (16)
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_NONE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)16);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case 6:
- * Userblock size = 512
- * Alignment in use = 512
- * Strategy is H5F_FILE_SPACE_PAGE; fsp_size = alignment = 512
- * H5Pset_alignment() is 3
- * Reopen the file; H5Pset_alignment() is 1024
- * Outcome:
- * Should succeed:
- * Userblock (512) is the same as alignment (512);
- * The H5Pset_alignment() calls have no effect
- */
- /* Create file creation property list with user block */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
- ret = H5Pset_userblock(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_userblock");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Create file access property list with alignment */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper1(fcpl, fapl);
- CHECK(ret, FAIL, "test_userblock_alignment_helper1");
-
- /* Change alignment in FAPL */
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Call helper routines to perform file manipulations */
- ret = test_userblock_alignment_helper2(fapl, false);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
- ret = test_userblock_alignment_helper2(fapl, true);
- CHECK(ret, FAIL, "test_userblock_alignment_helper2");
-
- /* Release property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_userblock_alignment_paged() */
-#endif
-
-/****************************************************************
-**
-** test_filespace_info():
-** Verify the following public routines retrieve and set file space
-** information correctly:
-** (1) H5Pget/set_file_space_strategy():
-** Retrieve and set file space strategy, persisting free-space,
-** and free-space section threshold as specified
-** (2) H5Pget/set_file_space_page_size():
-** Retrieve and set the page size for paged aggregation
-**
-****************************************************************/
-#if 0
-static void
-test_filespace_info(const char *env_h5_drvr)
-{
- hid_t fid; /* File IDs */
- hid_t fapl, new_fapl; /* File access property lists */
- hid_t fcpl, fcpl1, fcpl2; /* File creation property lists */
- H5F_fspace_strategy_t strategy; /* File space strategy */
- bool persist; /* Persist free-space or not */
- hsize_t threshold; /* Free-space section threshold */
- unsigned new_format; /* New or old format */
- H5F_fspace_strategy_t fs_strategy; /* File space strategy--iteration variable */
- unsigned fs_persist; /* Persist free-space or not--iteration variable */
- hsize_t fs_threshold; /* Free-space section threshold--iteration variable */
- hsize_t fsp_size; /* File space page size */
- char filename[FILENAME_LEN]; /* Filename to use */
- bool contig_addr_vfd; /* Whether VFD used has a contiguous address space */
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing file creation public routines: H5Pget/set_file_space_strategy & "
- "H5Pget/set_file_space_page_size\n"));
-
- contig_addr_vfd = (bool)(strcmp(env_h5_drvr, "split") != 0 && strcmp(env_h5_drvr, "multi") != 0);
-
- fapl = h5_fileaccess();
- h5_fixname(FILESPACE_NAME[0], fapl, filename, sizeof filename);
-
- /* Get a copy of the file access property list */
- new_fapl = H5Pcopy(fapl);
- CHECK(new_fapl, FAIL, "H5Pcopy");
-
- /* Set the "use the latest version of the format" bounds */
- ret = H5Pset_libver_bounds(new_fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- /*
- * Case (1)
- * Check file space information from a default file creation property list.
- * Values expected:
- * strategy--H5F_FILE_SPACE_AGGR
- * persist--false
- * threshold--1
- * file space page size--4096
- */
- /* Create file creation property list template */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
-
- /* Retrieve file space page size */
- ret = H5Pget_file_space_page_size(fcpl, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE_DEF, "H5Pget_file_space_page_size");
-
- /* Close property list */
- H5Pclose(fcpl);
-
- /*
- * Case (2)
- * File space page size has a minimum size of 512.
- * Setting value less than 512 will return an error;
- * --setting file space page size to 0
- * --setting file space page size to 511
- *
- * File space page size has a maximum size of 1 gigabyte.
- * Setting value greater than 1 gigabyte will return an error.
- */
- /* Create file creation property list template */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Setting to 0: should fail */
- H5E_BEGIN_TRY
- {
- ret = H5Pset_file_space_page_size(fcpl, 0);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Setting to 511: should fail */
- H5E_BEGIN_TRY
- {
- ret = H5Pset_file_space_page_size(fcpl, 511);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Setting to 1GB+1: should fail */
- H5E_BEGIN_TRY
- {
- ret = H5Pset_file_space_page_size(fcpl, FSP_SIZE1G + 1);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Pset_file_space_page_size");
-
- /* Setting to 512: should succeed */
- ret = H5Pset_file_space_page_size(fcpl, FSP_SIZE512);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
- ret = H5Pget_file_space_page_size(fcpl, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE512, "H5Pget_file_space_page_size");
-
- /* Setting to 1GB: should succeed */
- ret = H5Pset_file_space_page_size(fcpl, FSP_SIZE1G);
- CHECK(ret, FAIL, "H5Pset_file_space_page_size");
- ret = H5Pget_file_space_page_size(fcpl, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE1G, "H5Pget_file_space_page_size");
-
- /* Close property list */
- H5Pclose(fcpl);
-
- /*
- * Case (3)
- * Check file space information when creating a file with default properties.
- * Values expected:
- * strategy--H5F_FILE_SPACE_AGGR
- * persist--false
- * threshold--1
- * file space page size--4096
- */
- /* Create a file with default file creation and access property lists */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Get the file's creation property list */
- fcpl1 = H5Fget_create_plist(fid);
- CHECK(fcpl1, FAIL, "H5Fget_create_plist");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl1, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
-
- /* Retrieve file space page size */
- ret = H5Pget_file_space_page_size(fcpl1, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE_DEF, "H5Pget_file_space_page_size");
-
- /* Close property lists */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Pclose(fcpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case (4)
- * Check file space information when creating a file with the
- * latest library format and default properties.
- * Values expected:
- * strategy--H5F_FILE_SPACE_AGGR
- * persist--false
- * threshold--1
- * file space page size--4096
- */
- /* Create a file with the latest library format */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, new_fapl);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Get the file's creation property */
- fcpl1 = H5Fget_create_plist(fid);
- CHECK(fcpl1, FAIL, "H5Fget_create_plist");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl1, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
-
- /* Retrieve file space page size */
- ret = H5Pget_file_space_page_size(fcpl1, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE_DEF, "H5Pget_file_space_page_size");
-
- /* Close property lists */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Pclose(fcpl1);
- CHECK(ret, FAIL, "H5Pclose");
-
- /*
- * Case (5)
- * Check file space information with the following combinations:
- * Create file with --
- * New or old format
- * Persist or not persist free-space
- * Different sizes for free-space section threshold (0 to 10)
- * The four file space strategies:
- * H5F_FSPACE_STRATEGY_FSM_AGGR, H5F_FSPACE_STRATEGY_PAGE,
- * H5F_FSPACE_STRATEGY_AGGR, H5F_FSPACE_STRATEGY_NONE
- * File space page size: set to 512
- *
- */
- for (new_format = false; new_format <= true; new_format++) {
- hid_t my_fapl;
-
- /* Set the FAPL for the type of format */
- if (new_format) {
- MESSAGE(5, ("Testing with new group format\n"));
- my_fapl = new_fapl;
- } /* end if */
- else {
- MESSAGE(5, ("Testing with old group format\n"));
- my_fapl = fapl;
- } /* end else */
-
- /* Test with true or false for persisting free-space */
- for (fs_persist = false; fs_persist <= true; fs_persist++) {
-
- /* Test with free-space section threshold size: 0 to 10 */
- for (fs_threshold = 0; fs_threshold <= TEST_THRESHOLD10; fs_threshold++) {
-
- /* Test with 4 file space strategies */
- for (fs_strategy = H5F_FSPACE_STRATEGY_FSM_AGGR; fs_strategy < H5F_FSPACE_STRATEGY_NTYPES;
- fs_strategy++) {
-
- if (!contig_addr_vfd && (fs_strategy == H5F_FSPACE_STRATEGY_PAGE || fs_persist))
- continue;
-
- /* Create file creation property list template */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Set file space information */
- ret = H5Pset_file_space_strategy(fcpl, fs_strategy, (bool)fs_persist, fs_threshold);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
-
- ret = H5Pset_file_space_page_size(fcpl, FSP_SIZE512);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, fs_strategy, "H5Pget_file_space_strategy");
-
- if (fs_strategy < H5F_FSPACE_STRATEGY_AGGR) {
- VERIFY(persist, (bool)fs_persist, "H5Pget_file_space_strategy");
- VERIFY(threshold, fs_threshold, "H5Pget_file_space_strategy");
- }
- else {
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
- }
-
- /* Retrieve and verify file space page size */
- ret = H5Pget_file_space_page_size(fcpl, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE512, "H5Pget_file_space_page_size");
-
- /* Create the file with the specified file space info */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, my_fapl);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Get the file's creation property */
- fcpl1 = H5Fget_create_plist(fid);
- CHECK(fcpl1, FAIL, "H5Fget_create_plist");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl1, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, fs_strategy, "H5Pget_file_space_strategy");
-
- if (fs_strategy < H5F_FSPACE_STRATEGY_AGGR) {
- VERIFY(persist, fs_persist, "H5Pget_file_space_strategy");
- VERIFY(threshold, fs_threshold, "H5Pget_file_space_strategy");
- }
- else {
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
- }
-
- /* Retrieve and verify file space page size */
- ret = H5Pget_file_space_page_size(fcpl1, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE512, "H5Pget_file_space_page_size");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Re-open the file */
- fid = H5Fopen(filename, H5F_ACC_RDWR, my_fapl);
- CHECK(ret, FAIL, "H5Fopen");
-
- /* Get the file's creation property */
- fcpl2 = H5Fget_create_plist(fid);
- CHECK(fcpl2, FAIL, "H5Fget_create_plist");
-
- /* Retrieve file space information */
- ret = H5Pget_file_space_strategy(fcpl2, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Verify file space information */
- VERIFY(strategy, fs_strategy, "H5Pget_file_space_strategy");
- if (fs_strategy < H5F_FSPACE_STRATEGY_AGGR) {
- VERIFY(persist, fs_persist, "H5Pget_file_space_strategy");
- VERIFY(threshold, fs_threshold, "H5Pget_file_space_strategy");
- }
- else {
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
- }
-
- /* Retrieve and verify file space page size */
- ret = H5Pget_file_space_page_size(fcpl2, &fsp_size);
- CHECK(ret, FAIL, "H5Pget_file_space_page_size");
- VERIFY(fsp_size, FSP_SIZE512, "H5Pget_file_space_page_size");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Release file creation property lists */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fcpl1);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fcpl2);
- CHECK(ret, FAIL, "H5Pclose");
- } /* end for file space strategy type */
- } /* end for free-space section threshold */
- } /* end for fs_persist */
-
- /* close fapl_ and remove the file */
-#if 0
- h5_clean_files(FILESPACE_NAME, my_fapl);
-#endif
-
- H5E_BEGIN_TRY
- {
- H5Fdelete(FILESPACE_NAME[0], my_fapl);
- }
- H5E_END_TRY
- } /* end for new_format */
-
-} /* test_filespace_info() */
-#endif
-
-/****************************************************************
-**
-** set_multi_split():
-** Internal routine to set up page-aligned address space for multi/split driver
-** when testing paged aggregation.
-** This is used by test_file_freespace() and test_sects_freespace().
-**
-*****************************************************************/
-#if 0
-static int
-set_multi_split(hid_t fapl, hsize_t pagesize, bool split)
-{
- H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
- hid_t memb_fapl_arr[H5FD_MEM_NTYPES];
- char *memb_name[H5FD_MEM_NTYPES];
- haddr_t memb_addr[H5FD_MEM_NTYPES];
- bool relax;
- H5FD_mem_t mt;
-
- assert(split);
-
- memset(memb_name, 0, sizeof memb_name);
-
- /* Get current split settings */
- if (H5Pget_fapl_multi(fapl, memb_map, memb_fapl_arr, memb_name, memb_addr, &relax) < 0)
- TEST_ERROR;
-
- if (split) {
- /* Set memb_addr aligned */
- memb_addr[H5FD_MEM_SUPER] = ((memb_addr[H5FD_MEM_SUPER] + pagesize - 1) / pagesize) * pagesize;
- memb_addr[H5FD_MEM_DRAW] = ((memb_addr[H5FD_MEM_DRAW] + pagesize - 1) / pagesize) * pagesize;
- }
- else {
- /* Set memb_addr aligned */
- for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; mt++)
- memb_addr[mt] = ((memb_addr[mt] + pagesize - 1) / pagesize) * pagesize;
- } /* end else */
-
- /* Set multi driver with new FAPLs */
- if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl_arr, (const char *const *)memb_name, memb_addr, relax) <
- 0)
- TEST_ERROR;
-
- /* Free memb_name */
- for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; mt++)
- free(memb_name[mt]);
-
- return 0;
-
-error:
- return (-1);
-
-} /* set_multi_split() */
-#endif
-
-/****************************************************************
-**
-** test_file_freespace():
-** This routine checks the free space available in a file as
-** returned by the public routine H5Fget_freespace().
-**
-**
-*****************************************************************/
-#if 0
-static void
-test_file_freespace(const char *env_h5_drvr)
-{
- hid_t file; /* File opened with read-write permission */
-#if 0
- h5_stat_size_t empty_filesize; /* Size of file when empty */
- h5_stat_size_t mod_filesize; /* Size of file after being modified */
- hssize_t free_space; /* Amount of free space in file */
-#endif
- hid_t fcpl; /* File creation property list */
- hid_t fapl, new_fapl; /* File access property list IDs */
- hid_t dspace; /* Dataspace ID */
- hid_t dset; /* Dataset ID */
- hid_t dcpl; /* Dataset creation property list */
- int k; /* Local index variable */
- unsigned u; /* Local index variable */
- char filename[FILENAME_LEN]; /* Filename to use */
- char name[32]; /* Dataset name */
- unsigned new_format; /* To use old or new format */
- bool split_vfd, multi_vfd; /* Indicate multi/split driver */
- hsize_t expected_freespace; /* Freespace expected */
- hsize_t expected_fs_del; /* Freespace expected after delete */
- herr_t ret; /* Return value */
-
- split_vfd = !strcmp(env_h5_drvr, "split");
- multi_vfd = !strcmp(env_h5_drvr, "multi");
-
- if (!split_vfd && !multi_vfd) {
- fapl = h5_fileaccess();
- h5_fixname(FILESPACE_NAME[0], fapl, filename, sizeof filename);
-
- new_fapl = H5Pcopy(fapl);
- CHECK(new_fapl, FAIL, "H5Pcopy");
-
- /* Set the "use the latest version of the format" bounds */
- ret = H5Pset_libver_bounds(new_fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Test with old & new format */
- for (new_format = false; new_format <= true; new_format++) {
- hid_t my_fapl;
-
- /* Set the FAPL for the type of format */
- if (new_format) {
- MESSAGE(5, ("Testing with new group format\n"));
-
- my_fapl = new_fapl;
-
- if (multi_vfd || split_vfd) {
- ret = set_multi_split(new_fapl, FSP_SIZE_DEF, split_vfd);
- CHECK(ret, FAIL, "set_multi_split");
- }
-
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5P_set_file_space_strategy");
-
- expected_freespace = 4534;
- if (split_vfd)
- expected_freespace = 427;
- if (multi_vfd)
- expected_freespace = 248;
- expected_fs_del = 0;
- } /* end if */
- else {
- MESSAGE(5, ("Testing with old group format\n"));
- /* Default: non-paged aggregation, non-persistent free-space */
- my_fapl = fapl;
- expected_freespace = 2464;
- if (split_vfd)
- expected_freespace = 264;
- if (multi_vfd)
- expected_freespace = 0;
- expected_fs_del = 4096;
-
- } /* end else */
-
- /* Create an "empty" file */
- file = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, my_fapl);
- CHECK(file, FAIL, "H5Fcreate");
-
- ret = H5Fclose(file);
- CHECK_I(ret, "H5Fclose");
-#if 0
- /* Get the "empty" file size */
- empty_filesize = h5_get_file_size(filename, H5P_DEFAULT);
-#endif
- /* Re-open the file (with read-write permission) */
- file = H5Fopen(filename, H5F_ACC_RDWR, my_fapl);
- CHECK_I(file, "H5Fopen");
-#if 0
- /* Check that the free space is 0 */
- free_space = H5Fget_freespace(file);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, 0, "H5Fget_freespace");
-#endif
- /* Create dataspace for datasets */
- dspace = H5Screate(H5S_SCALAR);
- CHECK(dspace, FAIL, "H5Screate");
-
- /* Create a dataset creation property list */
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
-
- /* Set the space allocation time to early */
- ret = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
- CHECK(ret, FAIL, "H5Pset_alloc_time");
-
- /* Create datasets in file */
- for (u = 0; u < 10; u++) {
- snprintf(name, sizeof(name), "Dataset %u", u);
- dset = H5Dcreate2(file, name, H5T_STD_U32LE, dspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
- } /* end for */
-
- /* Close dataspace */
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-#if 0
- /* Check that there is the right amount of free space in the file */
- free_space = H5Fget_freespace(file);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, expected_freespace, "H5Fget_freespace");
-#endif
- /* Delete datasets in file */
- for (k = 9; k >= 0; k--) {
- snprintf(name, sizeof(name), "Dataset %u", (unsigned)k);
- ret = H5Ldelete(file, name, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
- } /* end for */
-#if 0
- /* Check that there is the right amount of free space in the file */
- free_space = H5Fget_freespace(file);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, expected_fs_del, "H5Fget_freespace");
-#endif
- /* Close file */
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-#if 0
- /* Get the file size after modifications*/
- mod_filesize = h5_get_file_size(filename, H5P_DEFAULT);
-
- /* Check that the file reverted to empty size */
- VERIFY(mod_filesize, empty_filesize, "H5Fget_freespace");
-
- h5_clean_files(FILESPACE_NAME, my_fapl);
-#endif
- H5Fdelete(FILESPACE_NAME[0], my_fapl);
- } /* end for */
- }
-
-} /* end test_file_freespace() */
-
-/****************************************************************
-**
-** test_sects_freespace():
-** This routine checks free-space section information for the
-** file as returned by the public routine H5Fget_free_sections().
-**
-*****************************************************************/
-static void
-test_sects_freespace(const char *env_h5_drvr, bool new_format)
-{
- char filename[FILENAME_LEN]; /* Filename to use */
- hid_t file; /* File ID */
- hid_t fcpl; /* File creation property list template */
- hid_t fapl; /* File access property list template */
-#if 0
- hssize_t free_space; /* Amount of free-space in the file */
-#endif
- hid_t dspace; /* Dataspace ID */
- hid_t dset; /* Dataset ID */
- hid_t dcpl; /* Dataset creation property list */
- char name[32]; /* Dataset name */
- hssize_t nsects = 0; /* # of free-space sections */
- hssize_t nall; /* # of free-space sections for all types of data */
- hssize_t nmeta = 0, nraw = 0; /* # of free-space sections for meta/raw/generic data */
- H5F_sect_info_t sect_info[15]; /* Array to hold free-space information */
- H5F_sect_info_t all_sect_info[15]; /* Array to hold free-space information for all types of data */
- H5F_sect_info_t meta_sect_info[15]; /* Array to hold free-space information for metadata */
- H5F_sect_info_t raw_sect_info[15]; /* Array to hold free-space information for raw data */
- hsize_t total = 0; /* sum of the free-space section sizes */
- hsize_t tmp_tot = 0; /* Sum of the free-space section sizes */
- hsize_t last_size; /* Size of last free-space section */
- hsize_t dims[1]; /* Dimension sizes */
- unsigned u; /* Local index variable */
- H5FD_mem_t type;
- bool split_vfd = false, multi_vfd = false;
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing H5Fget_free_sections()--free-space section info in the file\n"));
-
- split_vfd = !strcmp(env_h5_drvr, "split");
- multi_vfd = !strcmp(env_h5_drvr, "multi");
-
- if (!split_vfd && !multi_vfd) {
-
- fapl = h5_fileaccess();
- h5_fixname(FILESPACE_NAME[0], fapl, filename, sizeof filename);
-
- /* Create file-creation template */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- if (new_format) {
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- /* Set to paged aggregation and persistent free-space */
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, true, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* Set up paged aligned address space for multi/split driver */
- if (multi_vfd || split_vfd) {
- ret = set_multi_split(fapl, FSP_SIZE_DEF, split_vfd);
- CHECK(ret, FAIL, "set_multi_split");
- }
- }
- else {
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_FSM_AGGR, true, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
- }
-
- /* Create the file */
- file = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(file, FAIL, "H5Fcreate");
-
- /* Create a dataset creation property list */
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
-
- /* Set the space allocation time to early */
- ret = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
- CHECK(ret, FAIL, "H5Pset_alloc_time");
-
- /* Create 1 large dataset */
- dims[0] = 1200;
- dspace = H5Screate_simple(1, dims, NULL);
- dset = H5Dcreate2(file, "Dataset_large", H5T_STD_U32LE, dspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- /* Close dataset */
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close dataspace */
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Create dataspace for datasets */
- dspace = H5Screate(H5S_SCALAR);
- CHECK(dspace, FAIL, "H5Screate");
-
- /* Create datasets in file */
- for (u = 0; u < 10; u++) {
- snprintf(name, sizeof(name), "Dataset %u", u);
- dset = H5Dcreate2(file, name, H5T_STD_U32LE, dspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
- } /* end for */
-
- /* Close dataspace */
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Delete odd-numbered datasets in file */
- for (u = 0; u < 10; u++) {
- snprintf(name, sizeof(name), "Dataset %u", u);
- if (u % 2) {
- ret = H5Ldelete(file, name, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
- } /* end if */
- } /* end for */
-
- /* Close file */
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Re-open the file with read-only permission */
- file = H5Fopen(filename, H5F_ACC_RDONLY, fapl);
- CHECK_I(file, "H5Fopen");
-#if 0
- /* Get the amount of free space in the file */
- free_space = H5Fget_freespace(file);
- CHECK(free_space, FAIL, "H5Fget_freespace");
-#endif
- /* Get the total # of free-space sections in the file */
- nall = H5Fget_free_sections(file, H5FD_MEM_DEFAULT, (size_t)0, NULL);
- CHECK(nall, FAIL, "H5Fget_free_sections");
-
- /* Should return failure when nsects is 0 with a nonnull sect_info */
- nsects = H5Fget_free_sections(file, H5FD_MEM_DEFAULT, (size_t)0, all_sect_info);
- VERIFY(nsects, FAIL, "H5Fget_free_sections");
-
- /* Retrieve and verify free space info for all the sections */
- memset(all_sect_info, 0, sizeof(all_sect_info));
- nsects = H5Fget_free_sections(file, H5FD_MEM_DEFAULT, (size_t)nall, all_sect_info);
- VERIFY(nsects, nall, "H5Fget_free_sections");
-
- /* Verify the amount of free-space is correct */
- for (u = 0; u < nall; u++)
- total += all_sect_info[u].size;
-#if 0
- VERIFY(free_space, total, "H5Fget_free_sections");
-#endif
- /* Save the last section's size */
- last_size = all_sect_info[nall - 1].size;
-
- /* Retrieve and verify free space info for -1 sections */
- memset(sect_info, 0, sizeof(sect_info));
- nsects = H5Fget_free_sections(file, H5FD_MEM_DEFAULT, (size_t)(nall - 1), sect_info);
- VERIFY(nsects, nall, "H5Fget_free_sections");
-
- /* Verify the amount of free-space is correct */
- total = 0;
- for (u = 0; u < (nall - 1); u++) {
- VERIFY(sect_info[u].addr, all_sect_info[u].addr, "H5Fget_free_sections");
- VERIFY(sect_info[u].size, all_sect_info[u].size, "H5Fget_free_sections");
- total += sect_info[u].size;
- }
-#if 0
- VERIFY(((hsize_t)free_space - last_size), total, "H5Fget_free_sections");
-#endif
- /* Retrieve and verify free-space info for +1 sections */
- memset(sect_info, 0, sizeof(sect_info));
- nsects = H5Fget_free_sections(file, H5FD_MEM_DEFAULT, (size_t)(nall + 1), sect_info);
- VERIFY(nsects, nall, "H5Fget_free_sections");
-
- /* Verify amount of free-space is correct */
- total = 0;
- for (u = 0; u < nall; u++) {
- VERIFY(sect_info[u].addr, all_sect_info[u].addr, "H5Fget_free_sections");
- VERIFY(sect_info[u].size, all_sect_info[u].size, "H5Fget_free_sections");
- total += sect_info[u].size;
- }
- VERIFY(sect_info[nall].addr, 0, "H5Fget_free_sections");
- VERIFY(sect_info[nall].size, 0, "H5Fget_free_sections");
-#if 0
- VERIFY(free_space, total, "H5Fget_free_sections");
-#endif
-
- memset(meta_sect_info, 0, sizeof(meta_sect_info));
- if (multi_vfd) {
- hssize_t ntmp;
-
- for (type = H5FD_MEM_SUPER; type < H5FD_MEM_NTYPES; type++) {
- if (type == H5FD_MEM_DRAW || type == H5FD_MEM_GHEAP)
- continue;
- /* Get the # of free-space sections in the file for metadata */
- ntmp = H5Fget_free_sections(file, type, (size_t)0, NULL);
- CHECK(ntmp, FAIL, "H5Fget_free_sections");
-
- if (ntmp > 0) {
- nsects = H5Fget_free_sections(file, type, (size_t)ntmp, &meta_sect_info[nmeta]);
- VERIFY(nsects, ntmp, "H5Fget_free_sections");
- nmeta += ntmp;
- }
- }
- }
- else {
- /* Get the # of free-space sections in the file for metadata */
- nmeta = H5Fget_free_sections(file, H5FD_MEM_SUPER, (size_t)0, NULL);
- CHECK(nmeta, FAIL, "H5Fget_free_sections");
-
- /* Retrieve and verify free-space sections for metadata */
- nsects = H5Fget_free_sections(file, H5FD_MEM_SUPER, (size_t)nmeta, meta_sect_info);
- VERIFY(nsects, nmeta, "H5Fget_free_sections");
- }
-
- /* Get the # of free-space sections in the file for raw data */
- nraw = H5Fget_free_sections(file, H5FD_MEM_DRAW, (size_t)0, NULL);
- CHECK(nraw, FAIL, "H5Fget_free_sections");
-
- /* Retrieve and verify free-space sections for raw data */
- memset(raw_sect_info, 0, sizeof(raw_sect_info));
- nsects = H5Fget_free_sections(file, H5FD_MEM_DRAW, (size_t)nraw, raw_sect_info);
- VERIFY(nsects, nraw, "H5Fget_free_sections");
-
- /* Sum all the free-space sections */
- for (u = 0; u < nmeta; u++)
- tmp_tot += meta_sect_info[u].size;
-
- for (u = 0; u < nraw; u++)
- tmp_tot += raw_sect_info[u].size;
-
- /* Verify free-space info */
- VERIFY(nmeta + nraw, nall, "H5Fget_free_sections");
- VERIFY(tmp_tot, total, "H5Fget_free_sections");
-
- /* Closing */
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Pclose(fcpl);
- CHECK(fcpl, FAIL, "H5Pclose");
-#if 0
- h5_clean_files(FILESPACE_NAME, fapl);
-#endif
- H5Fdelete(FILESPACE_NAME[0], fapl);
- }
-
-} /* end test_sects_freespace() */
-#endif
-
-/****************************************************************
-**
-** test_filespace_compatible():
-** Verify that the trunk with the latest file space management
-** can open, read and modify 1.6 HDF5 file and 1.8 HDF5 file.
-** Also verify the correct file space handling information
-** and the amount of free space.
-**
-****************************************************************/
-#if 0
-static void
-test_filespace_compatible(void)
-{
- int fd_old = (-1), fd_new = (-1); /* File descriptors for copying data */
- hid_t fid = -1; /* File id */
- hid_t did = -1; /* Dataset id */
- hid_t fcpl; /* File creation property list template */
- int check[100]; /* Temporary buffer for verifying dataset data */
- int rdbuf[100]; /* Temporary buffer for reading in dataset data */
- uint8_t buf[READ_OLD_BUFSIZE]; /* temporary buffer for reading */
- ssize_t nread; /* Number of bytes read in */
- unsigned i, j; /* Local index variable */
- hssize_t free_space; /* Amount of free-space in the file */
- bool persist; /* Persist free-space or not */
- hsize_t threshold; /* Free-space section threshold */
- H5F_fspace_strategy_t strategy; /* File space handling strategy */
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("File space compatibility testing for 1.6 and 1.8 files\n"));
-
- for (j = 0; j < NELMTS(OLD_FILENAME); j++) {
- const char *filename = H5_get_srcdir_filename(OLD_FILENAME[j]); /* Corrected test file name */
-
- /* Open and copy the test file into a temporary file */
- fd_old = HDopen(filename, O_RDONLY);
- CHECK(fd_old, FAIL, "HDopen");
- fd_new = HDopen(FILE5, O_RDWR | O_CREAT | O_TRUNC, H5_POSIX_CREATE_MODE_RW);
- CHECK(fd_new, FAIL, "HDopen");
-
- /* Copy data */
- while ((nread = HDread(fd_old, buf, (size_t)READ_OLD_BUFSIZE)) > 0) {
- ssize_t write_err = HDwrite(fd_new, buf, (size_t)nread);
- CHECK(write_err, -1, "HDwrite");
- } /* end while */
-
- /* Close the files */
- ret = HDclose(fd_old);
- CHECK(ret, FAIL, "HDclose");
- ret = HDclose(fd_new);
- CHECK(ret, FAIL, "HDclose");
-
- /* Open the temporary test file */
- fid = H5Fopen(FILE5, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* There should not be any free space in the file */
- free_space = H5Fget_freespace(fid);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, (hssize_t)0, "H5Fget_freespace");
-
- /* Get the file's file creation property list */
- fcpl = H5Fget_create_plist(fid);
- CHECK(fcpl, FAIL, "H5Fget_create_plist");
-
- /* Retrieve the file space info */
- ret = H5Pget_file_space_strategy(fcpl, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- /* File space handling strategy should be H5F_FSPACE_STRATEGY_FSM_AGGR */
- /* Persisting free-space should be false */
- /* Free-space section threshold should be 1 */
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
-
- /* Generate raw data */
- for (i = 0; i < 100; i++)
- check[i] = (int)i;
-
- /* Open and read the dataset */
- did = H5Dopen2(fid, DSETNAME, H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 100; i++)
- VERIFY(rdbuf[i], check[i], "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Remove the dataset */
- ret = H5Ldelete(fid, DSETNAME, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
-
- /* Close the plist */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Re-Open the file */
- fid = H5Fopen(FILE5, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* The dataset should not be there */
- did = H5Dopen2(fid, DSETNAME, H5P_DEFAULT);
- VERIFY(did, FAIL, "H5Dopen");
-
- /* There should not be any free space in the file */
- free_space = H5Fget_freespace(fid);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, (hssize_t)0, "H5Fget_freespace");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- } /* end for */
-} /* test_filespace_compatible */
-#endif
-
-/****************************************************************
-**
-** test_filespace_1.10.0_compatible():
-** Verify that the latest file space management can open, read and
-** modify 1.10.0 HDF5 files :
-** h5fc_ext1_i.h5: H5F_FILE_SPACE_ALL, default threshold; has superblock extension but no fsinfo message
-** h5fc_ext1_f.h5: H5F_FILE_SPACE_ALL_PERSIST, default threshold; has superblock extension with fsinfo
-*message
-** h5fc_ext2_if.h5: H5F_FILE_SPACE_ALL, non-default threshold; has superblock extension with fsinfo
-*message
-** h5fc_ext2_sf.h5: H5F_FILE_SPACE_VFD, default threshold; has superblock extension with fsinfo message
-** h5fc_ext3_isf.h5: H5F_FILE_SPACE_AGGR_VFD, default threshold; has superblock extension with fsinfo
-*message
-** h5fc_ext_none.h5: H5F_FILE_SPACE_ALL, default threshold; without superblock extension
-** The above files are copied from release 1.10.0 tools/h5format_convert/testfiles.
-**
-****************************************************************/
-#if 0
-static void
-test_filespace_1_10_0_compatible(void)
-{
- hid_t fid = -1; /* File id */
- hid_t did = -1; /* Dataset id */
- hid_t fcpl; /* File creation property list */
- bool persist; /* Persist free-space or not */
- hsize_t threshold; /* Free-space section threshold */
- H5F_fspace_strategy_t strategy; /* File space handling strategy */
- int wbuf[24]; /* Buffer for dataset data */
- int rdbuf[24]; /* Buffer for dataset data */
- int status; /* Status from copying the existing file */
- unsigned i, j; /* Local index variable */
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("File space compatibility testing for 1.10.0 files\n"));
-
- for (j = 0; j < NELMTS(OLD_1_10_0_FILENAME); j++) {
- /* Make a copy of the test file */
- status = h5_make_local_copy(OLD_1_10_0_FILENAME[j], FILE5);
- CHECK(status, FAIL, "h5_make_local_copy");
-
- /* Open the temporary test file */
- fid = H5Fopen(FILE5, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Get the file's file creation property list */
- fcpl = H5Fget_create_plist(fid);
- CHECK(fcpl, FAIL, "H5Fget_create_plist");
-
- /* Retrieve the file space info */
- ret = H5Pget_file_space_strategy(fcpl, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
-
- switch (j) {
- case 0:
-#if 0
- VERIFY(strategy, H5F_FILE_SPACE_STRATEGY_DEF, "H5Pget_file_space_strategy");
- VERIFY(persist, H5F_FREE_SPACE_PERSIST_DEF, "H5Pget_file_space_strategy");
- VERIFY(threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space_strategy");
-#endif
- /* Open the dataset */
- did = H5Dopen2(fid, "/DSET_EA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 1:
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, true, "H5Pget_file_space_strategy");
-#if 0
- VERIFY(threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space_strategy");
-#endif
-
- /* Open the dataset */
- did = H5Dopen2(fid, "/DSET_NDATA_BT2", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 2:
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
-#if 0
- VERIFY(persist, H5F_FREE_SPACE_PERSIST_DEF, "H5Pget_file_space_strategy");
-#endif
- VERIFY(threshold, 2, "H5Pget_file_space_strategy");
-
- /* Open the dataset */
- did = H5Dopen2(fid, "/DSET_NONE", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 3:
- VERIFY(strategy, H5F_FSPACE_STRATEGY_NONE, "H5Pget_file_space_strategy");
-#if 0
- VERIFY(persist, H5F_FREE_SPACE_PERSIST_DEF, "H5Pget_file_space_strategy");
- VERIFY(threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space_strategy");
-#endif
- /* Open the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_EA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 4:
- VERIFY(strategy, H5F_FSPACE_STRATEGY_AGGR, "H5Pget_file_space_strategy");
-#if 0
- VERIFY(persist, H5F_FREE_SPACE_PERSIST_DEF, "H5Pget_file_space_strategy");
- VERIFY(threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space_strategy");
-#endif
- /* Open the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_FA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
- case 5:
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
-#if 0
- VERIFY(persist, H5F_FREE_SPACE_PERSIST_DEF, "H5Pget_file_space_strategy");
- VERIFY(threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space_strategy");
-#endif
- /* Open the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_NONE", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- for (i = 0; i < 24; i++)
- wbuf[i] = (int)j + 1;
-
- /* Write to the dataset */
- ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf);
- CHECK(ret, FAIL, "H5Dwrite");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- default:
- break;
- }
-
- /* Close the plist */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Re-Open the file */
- fid = H5Fopen(FILE5, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- switch (j) {
- case 0:
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/DSET_EA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 1:
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/DSET_NDATA_BT2", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 2:
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/DSET_NONE", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 3:
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_EA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 4:
-
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_FA", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- case 5:
-
- /* Open and read the dataset */
- did = H5Dopen2(fid, "/GROUP/DSET_NDATA_NONE", H5P_DEFAULT);
- CHECK(did, FAIL, "H5Dopen");
-
- ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdbuf);
- CHECK(ret, FAIL, "H5Dread");
-
- /* Verify the data read is correct */
- for (i = 0; i < 24; i++)
- VERIFY(rdbuf[i], j + 1, "test_compatible");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- break;
-
- default:
- break;
- }
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- } /* end for */
-
-} /* test_filespace_1_10_0_compatible */
-#endif
-
-/****************************************************************
-**
-** test_filespace_round_compatible():
-** Verify that the trunk can open, read and modify these files--
-** 1) They are initially created (via gen_filespace.c) in the trunk
-** with combinations of file space strategies, default/non-default
-** threshold, and file spacing paging enabled/disabled.
-** The library creates the file space info message with
-** "mark if unknown" in these files.
-** 2) They are copied to the 1.8 branch, and are opened/read/modified
-** there via test_filespace_compatible() in test/tfile.c.
-** The 1.8 library marks the file space info message as "unknown"
-** in these files.
-** 3) They are then copied back from the 1.8 branch to the trunk for
-** compatibility testing via this routine.
-** 4) Upon encountering the file space info message which is marked
-** as "unknown", the library will use the default file space management
-** from then on: non-persistent free-space managers, default threshold,
-** and non-paging file space.
-**
-****************************************************************/
-#if 0
-static void
-test_filespace_round_compatible(void)
-{
- hid_t fid = -1; /* File id */
- hid_t fcpl = -1; /* File creation property list ID */
- unsigned j; /* Local index variable */
- H5F_fspace_strategy_t strategy; /* File space strategy */
- bool persist; /* Persist free-space or not */
- hsize_t threshold; /* Free-space section threshold */
- hssize_t free_space; /* Amount of free space in the file */
- int status; /* Status from copying the existing file */
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("File space compatibility testing for files from trunk to 1_8 to trunk\n"));
-
- for (j = 0; j < NELMTS(FSPACE_FILENAMES); j++) {
- /* Make a copy of the test file */
- status = h5_make_local_copy(FSPACE_FILENAMES[j], FILE5);
- CHECK(status, FAIL, "h5_make_local_copy");
-
- /* Open the temporary test file */
- fid = H5Fopen(FILE5, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Get the file's creation property list */
- fcpl = H5Fget_create_plist(fid);
- CHECK(fcpl, FAIL, "H5Fget_create_plist");
-
- ret = H5Pget_file_space_strategy(fcpl, &strategy, &persist, &threshold);
- CHECK(ret, FAIL, "H5Pget_file_space_strategy");
- VERIFY(strategy, H5F_FSPACE_STRATEGY_FSM_AGGR, "H5Pget_file_space_strategy");
- VERIFY(persist, false, "H5Pget_file_space_strategy");
- VERIFY(threshold, 1, "H5Pget_file_space_strategy");
-
- /* There should not be any free space in the file */
- free_space = H5Fget_freespace(fid);
- CHECK(free_space, FAIL, "H5Fget_freespace");
- VERIFY(free_space, (hssize_t)0, "H5Fget_freespace");
-
- /* Closing */
- ret = H5Fclose(fid);
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Fclose");
- } /* end for */
-
-} /* test_filespace_round_compatible */
-
-/****************************************************************
-**
-** test_libver_bounds_real():
-** Verify that a file created and modified with the
-** specified libver bounds has the specified object header
-** versions for the right objects.
-**
-****************************************************************/
-static void
-test_libver_bounds_real(H5F_libver_t libver_create, unsigned oh_vers_create, H5F_libver_t libver_mod,
- unsigned oh_vers_mod)
-{
- hid_t file, group; /* Handles */
- hid_t fapl; /* File access property list */
- H5O_native_info_t ninfo; /* Object info */
- herr_t ret; /* Return value */
-
- /*
- * Create a new file using the creation properties.
- */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
-
- ret = H5Pset_libver_bounds(fapl, libver_create, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- file = H5Fcreate("tfile5.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(file, FAIL, "H5Fcreate");
-
- /*
- * Make sure the root group has the correct object header version
- */
- ret = H5Oget_native_info_by_name(file, "/", &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
- VERIFY(ninfo.hdr.version, oh_vers_create, "H5Oget_native_info_by_name");
-
- /*
- * Reopen the file and make sure the root group still has the correct version
- */
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Pset_libver_bounds(fapl, libver_mod, H5F_LIBVER_LATEST);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- file = H5Fopen("tfile5.h5", H5F_ACC_RDWR, fapl);
- CHECK(file, FAIL, "H5Fopen");
-
- ret = H5Oget_native_info_by_name(file, "/", &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
- VERIFY(ninfo.hdr.version, oh_vers_create, "H5Oget_native_info_by_name");
-
- /*
- * Create a group named "G1" in the file, and make sure it has the correct
- * object header version
- */
- group = H5Gcreate2(file, "/G1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group, FAIL, "H5Gcreate");
-
- //! [H5Oget_native_info_snip]
-
- ret = H5Oget_native_info(group, &ninfo, H5O_NATIVE_INFO_HDR);
-
- //! [H5Oget_native_info_snip]
-
- CHECK(ret, FAIL, "H5Oget_native)info");
- VERIFY(ninfo.hdr.version, oh_vers_mod, "H5Oget_native_info");
-
- ret = H5Gclose(group);
- CHECK(ret, FAIL, "H5Gclose");
-
- /*
- * Create a group named "/G1/G3" in the file, and make sure it has the
- * correct object header version
- */
- group = H5Gcreate2(file, "/G1/G3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(group, FAIL, "H5Gcreate");
-
- ret = H5Oget_native_info(group, &ninfo, H5O_NATIVE_INFO_HDR);
- CHECK(ret, FAIL, "H5Oget_native_info");
- VERIFY(ninfo.hdr.version, oh_vers_mod, "H5Oget_native_info");
-
- ret = H5Gclose(group);
- CHECK(ret, FAIL, "H5Gclose");
-
- //! [H5Oget_native_info_by_name_snip]
-
- /*
- * Make sure the root group still has the correct object header version
- */
- ret = H5Oget_native_info_by_name(file, "/", &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
-
- //! [H5Oget_native_info_by_name_snip]
-
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
- VERIFY(ninfo.hdr.version, oh_vers_create, "H5Oget_native_info_by_name");
-
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-} /* end test_libver_bounds_real() */
-#endif
-
-/*-------------------------------------------------------------------------
- * Function: test_libver_bounds_open
- *
- * Purpose: Tests opening latest file with various low/high bounds.
- *
- * Return: Success: 0
- * Failure: number of errors
- *
- *-------------------------------------------------------------------------
- */
-#if 0
-#define VERBFNAME "tverbounds_dspace.h5"
-#define VERBDSNAME "dataset 1"
-#define SPACE1_DIM1 3
-static void
-test_libver_bounds_open(void)
-{
- hid_t file = -1; /* File ID */
- hid_t space = -1; /* Dataspace ID */
- hid_t dset = -1; /* Dataset ID */
- hid_t fapl = -1; /* File access property list ID */
- hid_t new_fapl = -1; /* File access property list ID for reopened file */
- hid_t dcpl = -1; /* Dataset creation property list ID */
- hsize_t dim[1] = {SPACE1_DIM1}; /* Dataset dimensions */
- H5F_libver_t low, high; /* File format bounds */
- hsize_t chunk_dim[1] = {SPACE1_DIM1}; /* Chunk dimensions */
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Opening File in Various Version Bounds\n"));
-
- /* Create a file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
-
- /* Create dataspace */
- space = H5Screate_simple(1, dim, NULL);
- CHECK(space, FAIL, "H5Screate_simple");
-
- /* Create a dataset creation property list */
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
-
- /* Create and set chunk plist */
- ret = H5Pset_chunk(dcpl, 1, chunk_dim);
- CHECK(ret, FAIL, "H5Pset_chunk");
- ret = H5Pset_deflate(dcpl, 9);
- CHECK(ret, FAIL, "H5Pset_deflate");
- ret = H5Pset_chunk_opts(dcpl, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
- CHECK(ret, FAIL, "H5Pset_chunk_opts");
-
- /* Create a file with (LATEST, LATEST) bounds, create a layout version 4
- dataset, then close the file */
-
- /* Set version bounds to (LATEST, LATEST) */
- low = H5F_LIBVER_LATEST;
- high = H5F_LIBVER_LATEST;
- ret = H5Pset_libver_bounds(fapl, low, high);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- /* Create the file */
- file = H5Fcreate(VERBFNAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(file, FAIL, "H5Fcreate");
-
- /* Create dataset */
- dset = H5Dcreate2(file, VERBDSNAME, H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- /* Close dataset and file */
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Attempt to open latest file with (earliest, v18), should fail */
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_EARLIEST, H5F_LIBVER_V18);
- H5E_BEGIN_TRY
- {
- file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl);
- }
- H5E_END_TRY
- VERIFY(file, FAIL, "Attempted to open latest file with earliest version");
-
- /* Attempt to open latest file with (v18, v18), should fail */
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_V18, H5F_LIBVER_V18);
- H5E_BEGIN_TRY
- {
- file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl);
- }
- H5E_END_TRY
- VERIFY(file, FAIL, "Attempted to open latest file with v18 bounds");
-
- /* Opening VERBFNAME in these combination should succeed.
- For each low bound, verify that it is upgraded properly */
- high = H5F_LIBVER_LATEST;
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- H5F_libver_t new_low = H5F_LIBVER_EARLIEST;
-
- /* Set version bounds for opening file */
- ret = H5Pset_libver_bounds(fapl, low, high);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- /* Open the file */
- file = H5Fopen(VERBFNAME, H5F_ACC_RDONLY, fapl);
- CHECK(file, FAIL, "H5Fopen");
-
- /* Get the new file access property */
- new_fapl = H5Fget_access_plist(file);
- CHECK(new_fapl, FAIL, "H5Fget_access_plist");
-
- /* Get new low bound and verify that it has been upgraded properly */
- ret = H5Pget_libver_bounds(new_fapl, &new_low, NULL);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
- VERIFY(new_low >= H5F_LIBVER_V110, true, "Low bound should be upgraded to at least H5F_LIBVER_V110");
-
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
- } /* for low */
-
- /* Close dataspace and property lists */
- ret = H5Sclose(space);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-} /* end test_libver_bounds_open() */
-#endif
-
-/*-------------------------------------------------------------------------
- * Function: test_libver_bounds_copy
- *
- * Purpose: Test to verify HDFFV-10800 is fixed:
- * This test is copied from the user test program: copy10.c.
- * (See attached programs in the jira issue.)
- *
- * The source file used in the test is generated by the user test
- * program "fill18.c" with the 1.8 library. The file is created
- * with the latest format and the dataset created in the file
- * has version 3 fill value message (latest).
- *
- * The test creates the destination file with (v18, v18) version bounds.
- * H5Ocopy() should succeed in copying the dataset in the source file
- * to the destination file.
- *
- * Return: Success: 0
- * Failure: number of errors
- *
- *-------------------------------------------------------------------------
- */
-#if 0
-static void
-test_libver_bounds_copy(void)
-{
- hid_t src_fid = -1; /* File ID */
- hid_t dst_fid = -1; /* File ID */
- hid_t fapl = -1; /* File access property list ID */
- const char *src_fname; /* Source file name */
- herr_t ret; /* Generic return value */
- bool driver_is_default_compatible;
-
- /* Output message about the test being performed */
- MESSAGE(5, ("Testing H5Ocopy a dataset in a 1.8 library file to a 1.10 library file\n"));
-
- ret = h5_driver_is_default_vfd_compatible(H5P_DEFAULT, &driver_is_default_compatible);
- CHECK_I(ret, "h5_driver_is_default_vfd_compatible");
-
- if (!driver_is_default_compatible) {
- printf("-- SKIPPED --\n");
- return;
- }
-
- /* Get the test file name */
- src_fname = H5_get_srcdir_filename(SRC_FILE);
-
- /* Open the source test file */
- src_fid = H5Fopen(src_fname, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(src_fid, FAIL, "H5Fopen");
-
- /* Create file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, FAIL, "H5Pcreate");
-
- /* Set library version bounds to (v18, v18) */
- ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_V18, H5F_LIBVER_V18);
- CHECK(ret, FAIL, "H5Pset_libver_bounds");
-
- /* Create the destination file with the fapl */
- dst_fid = H5Fcreate(DST_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(dst_fid, FAIL, "H5Pcreate");
-
- /* Close the fapl */
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Copy the dataset in the source file to the destination file */
- ret = H5Ocopy(src_fid, DSET_DS1, dst_fid, DSET_DS1, H5P_DEFAULT, H5P_DEFAULT);
- VERIFY(ret, SUCCEED, "H5Ocopy");
-
- /* Close the source file */
- ret = H5Fclose(src_fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close the destination file */
- ret = H5Fclose(dst_fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Remove the destination file */
- H5Fdelete(DST_FILE, H5P_DEFAULT);
-
-} /* end test_libver_bounds_copy() */
-#endif
-
-/****************************************************************
-**
-** test_libver_bounds():
-** Verify that a file created and modified with various
-** libver bounds is handled correctly. (Further testing
-** welcome)
-**
-****************************************************************/
-#if 0
-static void
-test_libver_bounds(void)
-{
- /* Output message about test being performed */
- MESSAGE(5, ("Testing setting library version bounds\n"));
-
- /* Run the tests */
- test_libver_bounds_real(H5F_LIBVER_EARLIEST, 1, H5F_LIBVER_LATEST, 2);
- test_libver_bounds_real(H5F_LIBVER_LATEST, 2, H5F_LIBVER_EARLIEST, 2);
- test_libver_bounds_open();
-#if 0
- test_libver_bounds_copy();
-#endif
-} /* end test_libver_bounds() */
-#endif
-
-/**************************************************************************************
-**
-** test_libver_bounds_low_high():
-** Tests to verify that format versions are correct with the following five
-** pairs of low/high version bounds set in fapl via H5Pset_libver_bounds():
-** (1) (earliest, v18)
-** (2) (earliest, v110)
-** (3) (v18, v18)
-** (4) (v18, v110)
-** (5) (v110, v110)
-**
-** For each pair of setting in fapl, verify format versions with the following
-** six tests:
-** (1) test_libver_bounds_super(fapl): superblock versions
-** (2) test_libver_bounds_obj(fapl): object header versions
-** (3) test_libver_bounds_dataset(fapl): message versions associated with dataset
-** (4) test_libver_bounds_dataspace(fapl): dataspace message versions
-** (5) test_libver_bounds_datatype(fapl): datatype message versions
-** (6) test_libver_bounds_attributes(fapl): attribute message versions
-**
-**************************************************************************************/
-#if 0
-static void
-test_libver_bounds_low_high(const char *env_h5_drvr)
-{
- hid_t fapl = H5I_INVALID_HID; /* File access property list */
- H5F_libver_t low, high; /* Low and high bounds */
- herr_t ret; /* The return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing setting (low, high) format version bounds\n"));
-
- /* Create a file access property list */
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(fapl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Loop through all the combinations of low/high version bounds */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++)
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
-
- H5E_BEGIN_TRY
- {
- /* Set the low/high version bounds */
- ret = H5Pset_libver_bounds(fapl, low, high);
- }
- H5E_END_TRY
-
- /* Should fail: invalid combinations */
- if (high == H5F_LIBVER_EARLIEST) {
- VERIFY(ret, FAIL, "H5Pset_libver_bounds");
- continue;
- }
-
- /* Should fail: invalid combinations */
- if (high < low) {
- VERIFY(ret, FAIL, "H5Pset_libver_bounds");
- continue;
- }
-
- /* All other combinations are valid and should succeed */
- VERIFY(ret, SUCCEED, "H5Pset_libver_bounds");
-
- /* Tests to verify version bounds */
- test_libver_bounds_super(fapl, env_h5_drvr);
- test_libver_bounds_obj(fapl);
- test_libver_bounds_dataset(fapl);
- test_libver_bounds_dataspace(fapl);
- test_libver_bounds_datatype(fapl);
- test_libver_bounds_attributes(fapl);
- }
-
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_libver_bounds_low_high() */
-#endif
-
-/***********************************************************************
-**
-** test_libver_bounds_super():
-** Verify superblock version with the following two tests:
-** (1) test_libver_bounds_super_create():
-** --when creating a file with the input fapl and the fcpl
-** that has the following feature enabled:
-** (A) default fcpl
-** (B) fcpl with v1-btee K value enabled
-** (C) fcpl with shared messages enabled
-** (D) fcpl with persistent free-space manager enabled
-**
-** (2) test_libver_bounds_super_open():
-** --when opening a file which is created with the input fapl
-** and the fcpl setting as #A to #D above.
-**
-** These two tests are run with or without SWMR file access.
-**
-*************************************************************************/
-#if 0
-static void
-test_libver_bounds_super(hid_t fapl, const char *env_h5_drvr)
-{
- hid_t fcpl = H5I_INVALID_HID; /* File creation property list */
- herr_t ret; /* The return value */
-
- /* Create a default fcpl: #A */
- /* This will result in superblock version 0 */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Verify superblock version when creating a file with input fapl,
- fcpl #A and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_create(fapl, fcpl, true, false);
- test_libver_bounds_super_create(fapl, fcpl, false, false);
-
- /* Verify superblock version when opening a file which is created
- with input fapl, fcpl #A and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_open(fapl, fcpl, true, false);
- test_libver_bounds_super_open(fapl, fcpl, false, false);
-
- /* Close the fcpl */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Create a fcpl with v1-btree K value enabled: #B */
- /* This will result in superblock version 1 */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_istore_k(fcpl, 64);
- CHECK(ret, FAIL, "H5Pset_istore_k");
-
- /* Verify superblock version when creating a file with input fapl,
- fcpl #B and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_create(fapl, fcpl, true, false);
- test_libver_bounds_super_create(fapl, fcpl, false, false);
-
- /* Verify superblock version when opening a file which is created
- with input fapl, fcpl #B and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_open(fapl, fcpl, true, false);
- test_libver_bounds_super_open(fapl, fcpl, false, false);
-
- /* Close the fcpl */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Create a fcpl with shared messages enabled: #C */
- /* This will result in superblock version 2 */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_shared_mesg_nindexes(fcpl, 1);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_nindexes");
- ret = H5Pset_shared_mesg_index(fcpl, 0, H5O_SHMESG_ATTR_FLAG, 2);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_index");
-
- /* Verify superblock version when creating a file with input fapl,
- fcpl #C and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_create(fapl, fcpl, true, false);
- test_libver_bounds_super_create(fapl, fcpl, false, false);
-
- /* Verify superblock version when opening a file which is created
- with input fapl, fcpl #C and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_open(fapl, fcpl, true, false);
- test_libver_bounds_super_open(fapl, fcpl, false, false);
-
- /* Close the fcpl */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- if (h5_using_default_driver(env_h5_drvr)) {
- /* Create a fcpl with persistent free-space manager enabled: #D */
- /* This will result in superblock version 2 */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_FSM_AGGR, 1, (hsize_t)1);
- CHECK(ret, FAIL, "H5Pset_file_space");
-
- /* Verify superblock version when creating a file with input fapl,
- fcpl #D and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_create(fapl, fcpl, true, true);
- test_libver_bounds_super_create(fapl, fcpl, false, true);
-
- /* Verify superblock version when opening a file which is created
- with input fapl, fcpl #D and with/without SWMR access */
- if (H5FD__supports_swmr_test(env_h5_drvr))
- test_libver_bounds_super_open(fapl, fcpl, true, true);
- test_libver_bounds_super_open(fapl, fcpl, false, true);
-
- /* Close the fcpl */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- }
-
-} /* end test_libver_bounds_super() */
-
-/**************************************************************************************************
-**
-** test_libver_bounds_super_create():
-** Verify the following when the file is created with the input fapl, fcpl,
-** and with/without SWMR access:
-** (a) the superblock version #
-** (b) the file's low bound setting
-** (c) fail or succeed in creating the file
-**
-** For file creation, the bounds setting in fapl, the feature enabled in fcpl,
-** and with/without SWMR file access will determine the results for #a to #c.
-**
-** The first row for the following two tables is the 5 pairs of low/high bounds setting
-** in the input fapl. The next three rows list the expected results for #a to #c.
-** "-->" indicates "upgrade to"
-**
-** The last table lists the expected results in creating the file when non-default
-** free-space info (fsinfo) is enabled in fcpl.
-**
-** Creating a file with write access
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** Superblock version | vers 0, 1, 2 | vers 0, 1, 2 | vers 2 | vers 2 | vers 3 |
-** |------------------------------------------------------------------------------|
-** File's low bound | no change |
-** |------------------------------------------------------------------------------|
-** File creation | succeed |
-** |______________________________________________________________________________|
-**
-** Creating a file with SWMR-write access
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** Superblock version | -- | vers 3 | -- | vers 3 | vers 3 |
-** |------------------------------------------------------------------------------|
-** File's low bound | -- | ->v110 | -- | ->v110 | no change |
-** |------------------------------------------------------------------------------|
-** File creation | fail | succeed | fail | succeed | succeed |
-** |______________________________________________________________________________|
-**
-** Creating a file with write/SWMR-write access + non-default fsinfo
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** File creation | fail | succeed | fail | succeed | succeed |
-** |______________________________________________________________________________|
-**
-******************************************************************************************************/
-static void
-test_libver_bounds_super_create(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non_def_fsm)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
-#if 0
- H5F_t *f = NULL; /* Internal file pointer */
-#endif
- H5F_libver_t low, high; /* Low and high bounds */
-#if 0
- bool ok; /* The result is ok or not */
-#endif
- herr_t ret; /* The return value */
-
- /* Try to create the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC | (is_swmr ? H5F_ACC_SWMR_WRITE : 0), fcpl, fapl);
- }
- H5E_END_TRY
-
-#if 0
- /* Get the internal file pointer if the create succeeds */
- if (fid >= 0) {
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
- }
-#endif
- /* Retrieve the low/high bounds */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- if (non_def_fsm && high < H5F_LIBVER_V110)
- VERIFY(fid, H5I_INVALID_HID, "H5Fcreate");
-
- else if (is_swmr) { /* SWMR is enabled */
- if (high >= H5F_LIBVER_V110) { /* Should succeed */
- VERIFY(fid >= 0, true, "H5Fcreate");
-#if 0
- VERIFY(HDF5_SUPERBLOCK_VERSION_3, f->shared->sblock->super_vers, "HDF5_superblock_ver_bounds");
- VERIFY(f->shared->low_bound >= H5F_LIBVER_V110, true, "HDF5_superblock_ver_bounds");
-#endif
- }
- else /* Should fail */
- VERIFY(fid >= 0, false, "H5Fcreate");
- }
- else { /* Should succeed */
- VERIFY(fid >= 0, true, "H5Fcreate");
-#if 0
- VERIFY(low, f->shared->low_bound, "HDF5_superblock_ver_bounds");
-
- switch (low) {
- case H5F_LIBVER_EARLIEST:
- ok = (f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_DEF ||
- f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_1 ||
- f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_2);
- VERIFY(ok, true, "HDF5_superblock_ver_bounds");
- break;
-
- case H5F_LIBVER_V18:
- ok = (f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_2);
- VERIFY(ok, true, "HDF5_superblock_ver_bounds");
- break;
-
- case H5F_LIBVER_V110:
- case H5F_LIBVER_V112:
- case H5F_LIBVER_V114:
- case H5F_LIBVER_V116:
- ok = (f->shared->sblock->super_vers == HDF5_SUPERBLOCK_VERSION_3);
- VERIFY(ok, true, "HDF5_superblock_ver_bounds");
- break;
-
- case H5F_LIBVER_ERROR:
- case H5F_LIBVER_NBOUNDS:
- default:
- ERROR("H5Pget_libver_bounds");
-
- } /* end switch */
-#endif
- } /* end else */
-
- if (fid >= 0) { /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- }
-
-} /* end test_libver_bounds_super_create() */
-
-/**************************************************************************************************
-**
-** test_libver_bounds_super_open():
-** Verify the following when opening a file which is created with the input fapl, fcpl,
-** and with/without SWMR access:
-** (a) the file's low bound setting
-** (b) fail or succeed in opening the file
-**
-** (1) Create a file with the input fapl, fcpl and with/without SWMR access
-** (2) Close the file
-** (3) Reopen the file with a new fapl that is set to the 5 pairs of low/high bounds
-** in a for loop. For each pair of setting in the new fapl:
-** --Verify the expected results for #a and #b above.
-** --Close the file.
-**
-** For file open, the file's superblock version, the low/high bounds setting in fapl,
-** and with/without SWMR file access will determine the results for #a and #b.
-**
-** The first row for the following tables (#A - #B) is the 5 pairs of low/high bounds setting
-** in the input fapl. The next two rows list the expected results for #a and #b.
-** "-->" indicates "upgrade to"
-**
-** The last table (#C) lists the expected results in opening the file when non-default
-** free-space info (fsinfo) is enabled in fcpl.
-**
-** (A) Opening a file with write access
-**
-** Superblock version 0, 1
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** File's low bound | no change |
-** |------------------------------------------------------------------------------|
-** File open | succeed |
-** |______________________________________________________________________________|
-**
-**
-** Superblock version 2
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** File's low bound | -->v18 | no change |
-** |------------------------------------------------------------------------------|
-** File open | succeed |
-** |______________________________________________________________________________|
-**
-** Superblock version 3
-** --------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v110) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |______________________________________________________________________________|
-** File's low bound | -- | -->v110 | -- | -->v110 | no change |
-** |------------------------------------------------------------------------------|
-** File open | fail | succeed | fail | succeed | succeed |
-** |______________________________________________________________________________|
-**
-**
-**
-** (B) Opening a file with SWMR-write access
-**
-** Superblock version 0, 1, 2
-** -------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v10) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |_____________________________________________________________________________|
-** File's low bound | ----
-** |-----------------------------------------------------------------------------|
-** File open | fail
-** |_____________________________________________________________________________|
-**
-**
-** Superblock version 3
-** -------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v10) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |_____________________________________________________________________________|
-** File's low bound | -- | -->v110 | -- | -->v110 | no change |
-** |-----------------------------------------------------------------------------|
-** File open | fail | succeed | fail | succeed | succeed |
-** |_____________________________________________________________________________|
-**
-**
-** (C) Opening a file with write/SWMR-write access + non-default fsinfo
-** -------------------------------------------------------------------------------
-** | (earliest, v18) | (earliest, v10) | (v18, v18) | (v18, v110) | (v110, v110) |
-** |_____________________________________________________________________________|
-** File open | fail | succeed | fail | succeed | succeed |
-** |_____________________________________________________________________________|
-**
-**
-******************************************************************************************************/
-static void
-test_libver_bounds_super_open(hid_t fapl, hid_t fcpl, htri_t is_swmr, htri_t non_def_fsm)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
-#if 0
- H5F_t *f = NULL; /* Internal file pointer */
-#endif
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
-#if 0
- unsigned super_vers; /* Superblock version */
-#endif
- H5F_libver_t low, high; /* Low and high bounds */
- herr_t ret; /* Return value */
-
- /* Create the file with the input fcpl and fapl */
- H5E_BEGIN_TRY
- {
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, fcpl, fapl);
- }
- H5E_END_TRY
-
- /* Retrieve the low/high bounds */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- if (non_def_fsm && high < H5F_LIBVER_V110) {
- VERIFY(fid, H5I_INVALID_HID, "H5Fcreate");
- }
- else {
- VERIFY(fid >= 0, true, "H5Fcreate");
-#if 0
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* The file's superblock version */
- super_vers = f->shared->sblock->super_vers;
-#endif
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a default file access property list */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, FAIL, "H5Pcreate");
-
- /* Loop through all the combinations of low/high bounds in new_fapl */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- /* Invalid combinations */
- if (ret < 0)
- continue;
-
- /* Open the file with or without SWMR access */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR | (is_swmr ? H5F_ACC_SWMR_WRITE : 0), new_fapl);
- }
- H5E_END_TRY
-
- if (non_def_fsm && high < H5F_LIBVER_V110) {
- VERIFY(fid, H5I_INVALID_HID, "H5Fopen");
- continue;
- }
-#if 0
- /* Get the internal file pointer if the open succeeds */
- if (fid >= 0) {
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
- }
-
- /* Verify the file open succeeds or fails */
- switch (super_vers) {
- case 3:
- if (high >= H5F_LIBVER_V110) {
- /* Should succeed */
- VERIFY(fid >= 0, true, "H5Fopen");
- VERIFY(f->shared->low_bound >= H5F_LIBVER_V110, true,
- "HDF5_superblock_ver_bounds");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- }
- else /* Should fail */
- VERIFY(fid >= 0, false, "H5Fopen");
- break;
-
- case 2:
- if (is_swmr) /* Should fail */
- VERIFY(fid >= 0, false, "H5Fopen");
- else { /* Should succeed */
- VERIFY(fid >= 0, true, "H5Fopen");
- VERIFY(f->shared->low_bound >= H5F_LIBVER_V18, true,
- "HDF5_superblock_ver_bounds");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- }
- break;
-
- case 1:
- case 0:
- if (is_swmr) /* Should fail */
- VERIFY(fid >= 0, false, "H5Fopen");
- else { /* Should succeed */
- VERIFY(fid >= 0, true, "H5Fopen");
- VERIFY(f->shared->low_bound, low, "HDF5_superblock_ver_bounds");
-
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- }
- break;
-
- default:
- break;
- } /* end switch */
-#endif
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
- } /* end else */
-
-} /* end test_libver_bounds_super_open() */
-#endif
-
-/****************************************************************
-**
-** test_libver_bounds_obj():
-** Verify object header versions:
-**
-** (a) Create a file with:
-** --the input fapl
-** --a fcpl that has shared message enabled
-** Verify the root group's object header version.
-** Close the file.
-**
-** (b) Create another file with:
-** --the input fapl
-** --a default fcpl
-** Verify the root group's object header version.
-** Close the file.
-**
-** (c) Reopen the same file in (b) with a new fapl.
-** The new fapl is set to the 5 pairs of low/high
-** bounds in a "for" loop. For each setting in fapl:
-** --Create a group in the file
-** --Verify the group's object header version
-** --Close and delete the group
-** --Close the file
-**
-****************************************************************/
-#if 0
-static void
-test_libver_bounds_obj(hid_t fapl)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
- hid_t gid = H5I_INVALID_HID; /* Group ID */
- hid_t fcpl = H5I_INVALID_HID; /* File creation property list */
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
- H5F_t *f = NULL; /* Internal file pointer */
- H5F_libver_t low, high; /* Low and high bounds */
- H5O_native_info_t ninfo; /* Object info */
- H5G_info_t ginfo; /* Group info */
- herr_t ret; /* Return value */
-
- /* Retrieve the low/high bounds from the input fapl */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- /* Create a default file creation property list */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Enable shared message in the fcpl */
- /* This will result in a version 2 object header */
- ret = H5Pset_shared_mesg_nindexes(fcpl, 1);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_nindexes");
- ret = H5Pset_shared_mesg_index(fcpl, 0, H5O_SHMESG_ATTR_FLAG, 2);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_index");
-
- /* Create the file with the fcpl and the input fapl */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Get root group's object info */
- ret = H5Oget_native_info_by_name(fid, "/", &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
-
- /* Verify object header version is 2 because shared message is enabled */
- VERIFY(ninfo.hdr.version, H5O_VERSION_2, "H5O_obj_ver_bounds");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close the file creation property list */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Create a file with the default fcpl and input fapl */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Get root group's object info */
- ret = H5Oget_native_info_by_name(fid, "/", &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
-
- /* Verify object header version is as indicated by low_bound */
- VERIFY(ninfo.hdr.version, H5O_obj_ver_bounds[low], "H5O_obj_ver_bounds");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a new default file access property list which
- is used to open the file in the "for" loop */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Loop through all the combinations of low/high bounds in new_fapl */
- /* Open the file with the fapl; create a group and verify the
- object header version, then delete the group and close the file.*/
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- if (ret < 0) /* Invalid combinations */
- continue;
-
- /* Open the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl);
- }
- H5E_END_TRY
-
- if (fid >= 0) { /* The file open succeeds */
-
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* Create a group in the file */
- gid = H5Gcreate2(fid, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gcreate2");
-
- /* Get group information */
- ret = H5Gget_info(gid, &ginfo);
- CHECK(ret, FAIL, "H5Gget_info");
-
- /* Verify group storage type */
- if (f->shared->low_bound >= H5F_LIBVER_V18)
- /* Links in group are stored in object header */
- VERIFY(ginfo.storage_type, H5G_STORAGE_TYPE_COMPACT, "H5Gget_info");
- else
- /* Links in group are stored with a "symbol table" */
- VERIFY(ginfo.storage_type, H5G_STORAGE_TYPE_SYMBOL_TABLE, "H5Gget_info");
-
- /* Get object header information */
- ret = H5Oget_native_info_by_name(gid, GRP_NAME, &ninfo, H5O_NATIVE_INFO_HDR, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Oget_native_info_by_name");
-
- /* Verify object header version as indicated by low_bound */
- VERIFY(ninfo.hdr.version, H5O_obj_ver_bounds[f->shared->low_bound], "H5O_obj_ver_bounds");
-
- /* Close the group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Delete the group */
- ret = H5Ldelete(fid, GRP_NAME, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- } /* end if */
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_libver_bounds_obj() */
-
-/****************************************************************
-**
-** test_libver_bounds_dataset():
-** Verify message versions associated with datasets:
-**
-** (a) Create a file with default fcpl and the input fapl.
-** Create the following two datasets:
-** --A contiguous dataset
-** --A chunked dataset with "no filter edge chunks"
-** For both datasets, verify the versions for the layout,
-** fill value and filter pipeline messages.
-** Close the file.
-**
-** (b) Create a new fapl that is set to the 5 pairs of low/high
-** bounds in a "for" loop. For each pair of setting in the
-** new fapl:
-** --Open the same file in (a) with the fapl
-** --Create a chunked dataset with 2 unlimited
-** dimensions
-** --Verify the versions for the layout, fill value
-** and filter pipeline messages
-** --Close and delete the dataset
-** --Close the file
-**
-****************************************************************/
-static void
-test_libver_bounds_dataset(hid_t fapl)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
- hid_t did = H5I_INVALID_HID; /* Dataset ID */
- hid_t sid = H5I_INVALID_HID; /* Dataspace ID */
- hid_t dcpl = H5I_INVALID_HID; /* Dataset creation property list */
- H5D_t *dset = NULL; /* Internal dataset pointer */
- H5F_t *f = NULL; /* Internal file pointer */
- H5F_libver_t low, high; /* Low and high bounds */
- herr_t ret; /* Return value */
- hsize_t fix_dims2[2] = {10, 4}; /* Dimension sizes */
- hsize_t fix_chunks2[2] = {4, 3}; /* Chunk dimension sizes */
- hsize_t dims2[2] = {1, 4}; /* Dimension sizes */
- hsize_t max_dims2[2] = {H5S_UNLIMITED, H5S_UNLIMITED}; /* Maximum dimension sizes */
- hsize_t chunks2[2] = {4, 5}; /* Chunk dimension sizes */
-
- /* Retrieve the low/high bounds from the input fapl */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- /* Create the file with the input fapl */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Create the dataspace */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, H5I_INVALID_HID, "H5Screate");
-
- /* Create a contiguous dataset */
- did = H5Dcreate2(fid, DSETA, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate");
-
- /* Get the internal dataset pointer */
- dset = (H5D_t *)H5VL_object(did);
- CHECK_PTR(dset, "H5VL_object");
-
- /* Verify version for layout and fill value messages */
- if (low == H5F_LIBVER_EARLIEST) {
- /* For layout message: the earliest version the library will set is 3 */
- /* For fill value message: the earliest version the library will set is 2 */
- VERIFY(dset->shared->layout.version, H5O_LAYOUT_VERSION_DEFAULT, "H5O_layout_ver_bounds");
- VERIFY(dset->shared->dcpl_cache.fill.version, H5O_FILL_VERSION_2, "H5O_fill_ver_bounds");
- }
- else {
- VERIFY(dset->shared->layout.version, H5O_layout_ver_bounds[low], "H5O_layout_ver_bounds");
- VERIFY(dset->shared->dcpl_cache.fill.version, H5O_fill_ver_bounds[low], "H5O_fill_ver_bounds");
- }
-
- /* Verify filter pipeline message version */
- VERIFY(dset->shared->dcpl_cache.pline.version, H5O_pline_ver_bounds[low], "H5O_pline_ver_bounds");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Set up dataspace and dcpl for creating a chunked dataset
- with "no filter edge chunks" enabled.
- This will result in a version 4 layout message */
- sid = H5Screate_simple(2, fix_dims2, NULL);
- CHECK(sid, H5I_INVALID_HID, "H5Screate_simple");
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 2, fix_chunks2);
- CHECK(ret, FAIL, "H5Pset_chunk");
- ret = H5Pset_chunk_opts(dcpl, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS);
- CHECK(ret, FAIL, "H5Pset_chunk_opts");
-
- /* Create the chunked dataset */
- H5E_BEGIN_TRY
- {
- did = H5Dcreate2(fid, DSETB, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- }
- H5E_END_TRY
-
- if (did >= 0) {
-
- /* Get the internal dataset pointer */
- dset = (H5D_t *)H5VL_object(did);
- CHECK_PTR(dset, "H5VL_object");
-
- /* Verify layout message version and chunk indexing type */
- VERIFY(dset->shared->layout.version, H5O_LAYOUT_VERSION_4, "H5O_layout_ver_bounds");
- VERIFY(dset->shared->layout.u.chunk.idx_type, H5D_CHUNK_IDX_FARRAY, "chunk_index_type");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- }
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Create a default file access property list which is used
- to open the file in the 'for' loop */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Set up dataspace and dcpl for creating a chunked dataset with
- 2 unlimited dimensions in the 'for' loop */
- sid = H5Screate_simple(2, dims2, max_dims2);
- CHECK(sid, H5I_INVALID_HID, "H5Screate_simple");
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 2, chunks2);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- /* Loop through all the combinations of low/high bounds in new_fapl */
- /* Open the file with the fapl and create the chunked dataset */
- /* Verify the dataset's layout, fill value and filter pipeline message versions */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- if (ret < 0) /* Invalid low/high combinations */
- continue;
-
- /* Open the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl);
- }
- H5E_END_TRY
-
- if (fid >= 0) { /* The file open succeeds */
-
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* Create the chunked dataset */
- did = H5Dcreate2(fid, DSETC, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the internal file pointer */
- dset = (H5D_t *)H5VL_object(did);
- CHECK_PTR(dset, "H5VL_object");
-
- if (dset) {
- /* Verify the dataset's layout, fill value and filter pipeline message versions */
- /* Also verify the chunk indexing type */
- if (f->shared->low_bound == H5F_LIBVER_EARLIEST) {
- /* For layout message: the earliest version the library will set is 3 */
- /* For fill value message: the earliest version the library will set is 2 */
- VERIFY(dset->shared->layout.version, H5O_LAYOUT_VERSION_DEFAULT,
- "H5O_layout_ver_bounds");
- VERIFY(dset->shared->dcpl_cache.fill.version, H5O_FILL_VERSION_2,
- "H5O_fill_ver_bounds");
- }
- else {
- VERIFY(dset->shared->layout.version, H5O_layout_ver_bounds[f->shared->low_bound],
- "H5O_layout_ver_bounds");
- VERIFY(dset->shared->dcpl_cache.fill.version,
- H5O_fill_ver_bounds[f->shared->low_bound], "H5O_fill_ver_bounds");
- }
-
- /* Verify the filter pipeline message version */
- VERIFY(dset->shared->dcpl_cache.pline.version, H5O_pline_ver_bounds[f->shared->low_bound],
- "H5O_pline_ver_bounds");
-
- /* Verify the dataset's chunk indexing type */
- if (dset->shared->layout.version == H5O_LAYOUT_VERSION_LATEST)
- VERIFY(dset->shared->layout.u.chunk.idx_type, H5D_CHUNK_IDX_BT2, "chunk_index_type");
- else
- VERIFY(dset->shared->layout.u.chunk.idx_type, H5D_CHUNK_IDX_BTREE,
- "chunk_index_type");
- }
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Delete the dataset */
- ret = H5Ldelete(fid, DSETC, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- } /* end if */
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_libver_bounds_dataset() */
-
-/****************************************************************
-**
-** test_libver_bounds_dataspace():
-** Verify dataspace message versions:
-**
-** (a) Create a file with default fcpl and the input fapl.
-** Create the following two datasets:
-** --A dataset with scalar dataspace
-** --A dataset with null dataspace
-** For both datasets, verify the dataspace message versions.
-** Close the file.
-**
-** (b) Create a new fapl that is set to the 5 pairs of low/high
-** bounds in a "for" loop. For each pair of setting in the
-** new fapl:
-** --Open the same file in (a) with the fapl
-** --Create a chunked dataset, a compact dataset and
-** a contiguous dataset
-** --Verify the dataspace message version for these
-** three datasets
-** --Delete the three datasets and the dataspaces
-** --Close the file
-**
-****************************************************************/
-static void
-test_libver_bounds_dataspace(hid_t fapl)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
- hid_t did = H5I_INVALID_HID, did_null = H5I_INVALID_HID; /* Dataset IDs */
- hid_t did_compact = H5I_INVALID_HID, did_contig = H5I_INVALID_HID; /* Dataset IDs */
- hid_t sid = H5I_INVALID_HID, sid_null = H5I_INVALID_HID; /* Dataspace IDs */
- hid_t sid_compact = H5I_INVALID_HID, sid_contig = H5I_INVALID_HID; /* Dataspace IDs */
- hid_t dcpl = H5I_INVALID_HID; /* Dataset creation property list */
- hid_t dcpl_compact = H5I_INVALID_HID, dcpl_contig = H5I_INVALID_HID; /* Dataset creation property lists */
- H5S_t *space = NULL, *space_null = NULL; /* Internal dataspace pointers */
- H5F_t *f = NULL; /* Internal file pointer */
- H5F_libver_t low, high; /* Low and high bounds */
- hsize_t dims[1] = {1}; /* Dimension sizes */
- hsize_t dims2[2] = {5, 4}; /* Dimension sizes */
- hsize_t max_dims[1] = {H5S_UNLIMITED}; /* Maximum dimension sizes */
- hsize_t chunks[1] = {4}; /* Chunk dimension sizes */
- herr_t ret; /* Return value */
-
- /* Retrieve the low/high bounds from the input fapl */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- /* Create the file with the input fapl */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Create scalar dataspace */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, H5I_INVALID_HID, "H5Screate");
-
- /* Create a dataset with the scalar dataspace */
- did = H5Dcreate2(fid, DSET, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate");
-
- /* Get the internal dataspace pointer */
- sid = H5Dget_space(did);
- CHECK(sid, H5I_INVALID_HID, "H5Dget_space");
- space = (H5S_t *)H5I_object(sid);
- CHECK_PTR(space, "H5I_object");
-
- /* Verify the dataspace version */
- VERIFY(space->extent.version, H5O_sdspace_ver_bounds[low], "H5O_sdspace_ver_bounds");
-
- /* Create null dataspace */
- sid_null = H5Screate(H5S_NULL);
- CHECK(sid_null, H5I_INVALID_HID, "H5Screate");
-
- /* Create a dataset with the null dataspace */
- did_null = H5Dcreate2(fid, DSET_NULL, H5T_NATIVE_INT, sid_null, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did_null, H5I_INVALID_HID, "H5Dcreate");
-
- /* Get the internal dataspace pointer */
- sid_null = H5Dget_space(did_null);
- CHECK(sid_null, H5I_INVALID_HID, "H5Dget_space");
- space_null = (H5S_t *)H5I_object(sid_null);
- CHECK_PTR(space_null, "H5I_object");
-
- /* Verify the dataspace version */
- VERIFY(space_null->extent.version, H5O_SDSPACE_VERSION_2, "H5O_sdspace_ver_bounds");
-
- /* Close the datasets */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Dclose(did_null);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the dataspaces */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Sclose(sid_null);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a default file access property list which is used
- to open the file in the 'for' loop */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Set up dataspace and dcpl for creating a chunked dataset */
- sid = H5Screate_simple(1, dims, max_dims);
- CHECK(sid, H5I_INVALID_HID, "H5Screate_simple");
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 1, chunks);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- /* Set up dataspace and dcpl for creating a compact dataset */
- sid_compact = H5Screate_simple(1, dims, NULL);
- CHECK(sid_compact, H5I_INVALID_HID, "H5Screate_simple");
- dcpl_compact = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl_compact, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_layout(dcpl_compact, H5D_COMPACT);
- CHECK(ret, FAIL, "H5Pset_layout");
-
- /* Set up dataspace and dcpl for creating a contiguous dataset */
- sid_contig = H5Screate_simple(2, dims2, NULL);
- CHECK(sid_contig, H5I_INVALID_HID, "H5Screate_simple");
- dcpl_contig = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl_contig, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_layout(dcpl_contig, H5D_CONTIGUOUS);
- CHECK(ret, FAIL, "H5Pset_layout");
-
- /* Loop through all the combinations of low/high bounds in new_fapl */
- /* Open the file and create the chunked/compact/contiguous datasets */
- /* Verify the dataspace message version for the three datasets */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- hid_t tmp_sid, tmp_sid_compact, tmp_sid_contig; /* Dataspace IDs */
- H5S_t *tmp_space, *tmp_space_compact, *tmp_space_contig; /* Internal dataspace pointers */
-
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- if (ret < 0) /* Invalid low/high combinations */
- continue;
-
- /* Open the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl);
- }
- H5E_END_TRY
-
- if (fid >= 0) { /* The file open succeeds */
-
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* Create the chunked dataset */
- did = H5Dcreate2(fid, DSETA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the internal dataspace pointer for the chunked dataset */
- tmp_sid = H5Dget_space(did);
- CHECK(tmp_sid, H5I_INVALID_HID, "H5Dget_space");
- tmp_space = (H5S_t *)H5I_object(tmp_sid);
- CHECK_PTR(tmp_space, "H5I_object");
-
- /* Create the compact dataset */
- did_compact = H5Dcreate2(fid, DSETB, H5T_NATIVE_INT, sid_compact, H5P_DEFAULT, dcpl_compact,
- H5P_DEFAULT);
- CHECK(did_compact, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the internal dataspace pointer for the compact dataset */
- tmp_sid_compact = H5Dget_space(did_compact);
- CHECK(tmp_sid_compact, H5I_INVALID_HID, "H5Dget_space");
- tmp_space_compact = (H5S_t *)H5I_object(tmp_sid_compact);
- CHECK_PTR(tmp_space_compact, "H5I_object");
-
- /* Create the contiguous dataset */
- did_contig =
- H5Dcreate2(fid, DSETC, H5T_NATIVE_INT, sid_contig, H5P_DEFAULT, dcpl_contig, H5P_DEFAULT);
- CHECK(did_contig, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the internal dataspace pointer for the contiguous dataset */
- tmp_sid_contig = H5Dget_space(did_contig);
- CHECK(tmp_sid_contig, H5I_INVALID_HID, "H5Dget_space");
- tmp_space_contig = (H5S_t *)H5I_object(tmp_sid_contig);
- CHECK_PTR(tmp_space_contig, "H5I_object");
-
- if (tmp_space) {
- /* Verify versions for the three dataspaces */
- VERIFY(tmp_space->extent.version, H5O_sdspace_ver_bounds[f->shared->low_bound],
- "H5O_sdspace_ver_bounds");
- }
- if (tmp_space_compact) {
- VERIFY(tmp_space_compact->extent.version, H5O_sdspace_ver_bounds[f->shared->low_bound],
- "H5O_sdspace_ver_bounds");
- }
- if (tmp_space_contig) {
- VERIFY(tmp_space_contig->extent.version, H5O_sdspace_ver_bounds[f->shared->low_bound],
- "H5O_sdspace_ver_bounds");
- }
-
- /* Close the three datasets */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Dclose(did_compact);
- CHECK(ret, FAIL, "H5Dclose");
- ret = H5Dclose(did_contig);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the three dataspaces */
- ret = H5Sclose(tmp_sid);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Sclose(tmp_sid_compact);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Sclose(tmp_sid_contig);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Delete the three datasets */
- ret = H5Ldelete(fid, DSETA, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
- ret = H5Ldelete(fid, DSETB, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
- ret = H5Ldelete(fid, DSETC, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- } /* end if */
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the three dataspaces */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Sclose(sid_compact);
- CHECK(ret, FAIL, "H5Sclose");
- ret = H5Sclose(sid_contig);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the three dataset creation property lists */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(dcpl_compact);
- CHECK(ret, FAIL, "H5Pclose");
- ret = H5Pclose(dcpl_contig);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_libver_bounds_dataspace() */
-
-/****************************************************************
-**
-** test_libver_bounds_datatype():
-** Verify the datatype message version:
-**
-** (a) Create the following datatypes:
-** 1) integer
-** 2) enum
-** 3) array
-** 4) compound
-** 5) vlen
-** (b) Call test_libver_bounds_datatype_check() for each
-** datatype in (a) to verify the datatype message version.
-**
-****************************************************************/
-static void
-test_libver_bounds_datatype(hid_t fapl)
-{
- hid_t tid = H5I_INVALID_HID, tid_enum = H5I_INVALID_HID, tid_array = H5I_INVALID_HID; /* Datatype IDs */
- hid_t tid_compound = H5I_INVALID_HID, tid_vlen = H5I_INVALID_HID; /* Datatype IDs */
- int enum_value; /* Value for enum datatype */
- typedef struct s1 { /* Data structure for compound datatype */
- char c;
- int i;
- } s1;
- hsize_t dims[1] = {1}; /* Dimension sizes */
- herr_t ret; /* Return value */
-
- /* Create integer datatype */
- tid = H5Tcopy(H5T_NATIVE_INT);
-
- /* Verify datatype message version */
- test_libver_bounds_datatype_check(fapl, tid);
-
- /* Create enum datatype */
- tid_enum = H5Tenum_create(tid);
- enum_value = 0;
- H5Tenum_insert(tid_enum, "val1", &enum_value);
- enum_value = 1;
- H5Tenum_insert(tid_enum, "val2", &enum_value);
-
- /* Verify datatype message version */
- test_libver_bounds_datatype_check(fapl, tid_enum);
-
- /* Create array datatype */
- tid_array = H5Tarray_create2(tid, 1, dims);
-
- /* Verify datatype message version */
- test_libver_bounds_datatype_check(fapl, tid_array);
-
- /* Create compound datatype */
- tid_compound = H5Tcreate(H5T_COMPOUND, sizeof(s1));
- H5Tinsert(tid_compound, "c", HOFFSET(s1, c), H5T_STD_U8LE);
- H5Tinsert(tid_compound, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
-
- /* Verify datatype message version */
- test_libver_bounds_datatype_check(fapl, tid_compound);
-
- /* Create vlen datatype */
- tid_vlen = H5Tvlen_create(tid);
-
- /* Verify datatype message version */
- test_libver_bounds_datatype_check(fapl, tid_vlen);
-
- /* Close the datatypes */
- ret = H5Tclose(tid);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Tclose(tid_enum);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Tclose(tid_array);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Tclose(tid_compound);
- CHECK(ret, FAIL, "H5Tclose");
-
- ret = H5Tclose(tid_vlen);
- CHECK(ret, FAIL, "H5Tclose");
-
-} /* end test_libver_bounds_datatype() */
-
-/****************************************************************
-**
-** test_libver_bounds_datatype_check():
-** Helper routine called by test_libver_bounds_datatype()
-** to verify the datatype message version for the input tid:
-**
-** (a) Create a file with default fcpl and the input fapl.
-** Create a contiguous dataset with the input tid.
-** Verify the datatype message version.
-** Create a committed datatype of string to be
-** used later.
-** Close the file.
-**
-** (b) Create a new fapl that is set to the 5 pairs of low/high
-** bounds in a "for" loop. For each pair of setting in
-** the new fapl:
-** --Open the same file in (a) with the fapl
-** --Verify the message version for the committed
-** datatype created earlier
-** --Create a chunked dataset with the input tid
-** --Verify the datatype message version
-** --Close and delete the dataset
-** --Close the file
-**
-****************************************************************/
-static void
-test_libver_bounds_datatype_check(hid_t fapl, hid_t tid)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
- hid_t dcpl = H5I_INVALID_HID; /* Dataset creation property list */
- hid_t dtid = H5I_INVALID_HID; /* Datatype ID for the dataset */
- hid_t str_tid = H5I_INVALID_HID; /* String datatype ID */
- hid_t did = H5I_INVALID_HID; /* Dataset ID */
- hid_t sid = H5I_INVALID_HID; /* Dataspace ID */
- hsize_t dims[1] = {1}; /* Dimension sizes */
- hsize_t dims2[2] = {5, 4}; /* Dimension sizes */
- hsize_t max_dims2[2] = {H5S_UNLIMITED, H5S_UNLIMITED}; /* Maximum dimension sizes */
- hsize_t chunks[2] = {2, 3}; /* Chunk dimension sizes */
- H5T_t *dtype = NULL; /* Internal datatype pointer */
- H5T_t *str_dtype = NULL; /* Internal datatype pointer for the string datatype */
- H5F_t *f = NULL; /* Internal file pointer */
- H5F_libver_t low, high; /* Low and high bounds */
- herr_t ret; /* Return value */
-
- /* Retrieve the low/high version bounds from the input fapl */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- /* Create the file with the input fapl */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Create a committed datatype of string which will be used
- later inside the 'for' loop */
- str_tid = H5Tcopy(H5T_C_S1);
- CHECK(str_tid, H5I_INVALID_HID, "H5Tcopy");
- ret = H5Tset_size(str_tid, (size_t)10);
- CHECK(ret, FAIL, "H5Tset_size");
- ret = H5Tcommit2(fid, "datatype", str_tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Tcommit2");
- ret = H5Tclose(str_tid);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Create dataspace */
- sid = H5Screate_simple(1, dims, NULL);
- CHECK(sid, H5I_INVALID_HID, "H5Screate_simple");
-
- /* Create a dataset with the input tid */
- did = H5Dcreate2(fid, DSET1, tid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the dataset's datatype */
- dtid = H5Dget_type(did);
- CHECK(dtid, H5I_INVALID_HID, "H5Dget_type");
-
- /* Get the internal datatype pointer */
- dtype = (H5T_t *)H5I_object(dtid);
- CHECK_PTR(dtype, "H5I_object");
-
- /* Verify the datatype message version */
- /* H5T_COMPOUND, H5T_ENUM, H5T_ARRAY:
- * --the library will set version according to low_bound
- * --H5T_ARRAY: the earliest version the library will set is 2
- * H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING, H5T_BITFIELD, H5T_OPAQUE, H5T_REFERENCE:
- * --the library will only use basic version
- */
-
- if (dtype->shared->type == H5T_COMPOUND || dtype->shared->type == H5T_ENUM ||
- dtype->shared->type == H5T_ARRAY) {
- if (dtype->shared->type == H5T_ARRAY && low == H5F_LIBVER_EARLIEST)
- VERIFY(dtype->shared->version, H5O_DTYPE_VERSION_2, "H5O_dtype_ver_bounds");
- else
- VERIFY(dtype->shared->version, H5O_dtype_ver_bounds[low], "H5O_dtype_ver_bounds");
- }
- else
- VERIFY(dtype->shared->version, H5O_dtype_ver_bounds[H5F_LIBVER_EARLIEST], "H5O_dtype_ver_bounds");
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the datatype */
- ret = H5Tclose(dtid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a default file access property list */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Set up dataspace and dcpl for creating a chunked dataset */
- sid = H5Screate_simple(2, dims2, max_dims2);
- CHECK(sid, H5I_INVALID_HID, "H5Screate_simple");
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_chunk(dcpl, 2, chunks);
- CHECK(ret, FAIL, "H5Pset_chunk");
-
- /* Loop through all the combinations of low/high bounds */
- /* Open the file and create the chunked dataset with the input tid */
- /* Verify the dataset's datatype message version */
- /* Also verify the committed atatype message version */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- if (ret < 0) /* Invalid low/high combinations */
- continue;
-
- /* Open the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl);
- }
- H5E_END_TRY
-
- if (fid >= 0) { /* The file open succeeds */
-
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* Open the committed datatype */
- str_tid = H5Topen2(fid, "datatype", H5P_DEFAULT);
- CHECK(str_tid, FAIL, "H5Topen2");
- str_dtype = (H5T_t *)H5VL_object(str_tid);
- CHECK_PTR(str_dtype, "H5VL_object");
-
- /* Verify the committed datatype message version */
- VERIFY(str_dtype->shared->version, H5O_dtype_ver_bounds[H5F_LIBVER_EARLIEST],
- "H5O_dtype_ver_bounds");
-
- /* Close the committed datatype */
- ret = H5Tclose(str_tid);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Create the chunked dataset */
- did = H5Dcreate2(fid, DSETNAME, tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(did, H5I_INVALID_HID, "H5Dcreate2");
-
- /* Get the dataset's datatype */
- dtid = H5Dget_type(did);
- CHECK(dtid, H5I_INVALID_HID, "H5Dget_type");
-
- /* Get the internal datatype pointer */
- dtype = (H5T_t *)H5I_object(dtid);
- CHECK_PTR(dtype, "H5I_object");
-
- if (dtype) {
- /* Verify the dataset's datatype message version */
- /* H5T_COMPOUND, H5T_ENUM, H5T_ARRAY:
- * --the library will set version according to low_bound
- * --H5T_ARRAY: the earliest version the library will set is 2
- * H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING, H5T_BITFIELD, H5T_OPAQUE, H5T_REFERENCE:
- * --the library will only use basic version
- */
- if (dtype->shared->type == H5T_COMPOUND || dtype->shared->type == H5T_ENUM ||
- dtype->shared->type == H5T_ARRAY) {
- if (dtype->shared->type == H5T_ARRAY && f->shared->low_bound == H5F_LIBVER_EARLIEST)
- VERIFY(dtype->shared->version, H5O_DTYPE_VERSION_2, "H5O_dtype_ver_bounds");
- else
- VERIFY(dtype->shared->version, H5O_dtype_ver_bounds[f->shared->low_bound],
- "H5O_dtype_ver_bounds");
- }
- else
- VERIFY(dtype->shared->version, H5O_dtype_ver_bounds[H5F_LIBVER_EARLIEST],
- "H5O_dtype_ver_bounds");
- }
-
- /* Close the dataset */
- ret = H5Dclose(did);
- CHECK(ret, FAIL, "H5Dclose");
-
- /* Close the dataset's datatype */
- ret = H5Tclose(dtid);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Delete the dataset */
- ret = H5Ldelete(fid, DSETNAME, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Ldelete");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- } /* end if */
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* end test_libver_bounds_datatype_check() */
-
-/****************************************************************
-**
-** test_libver_bounds_attributes():
-** Verify the attribute message versions:
-**
-** (a) Create a file with default fcpl and the input fapl.
-** Create a group and attach the following three attributes
-** to the group:
-** (1) Attribute with a committed datatype
-** (2) Attribute with integer type
-** (3) Attribute with character encoding set
-** Verify the three attributes' message versions.
-** Close the file.
-**
-** (b) Create a fcpl that has shared datatype message enabled.
-** Create a file with the fcpl and the input fapl.
-** Create a group and attach an attribute with shared
-** integer type to the group.
-** Verify the attribute message version.
-** Close the file
-**
-** (b) Create a new fapl that is set to the 5 pairs of low/high
-** bounds in a "for" loop. For each pair of setting in
-** the new fapl:
-** --Open the same file in (b) with the fapl
-** --Open the group and attach an attribute with integer
-** type to the group
-** --Verify the attribute message version
-** --Delete the attribute
-** --Close the group and the file
-**
-****************************************************************/
-static void
-test_libver_bounds_attributes(hid_t fapl)
-{
- hid_t fid = H5I_INVALID_HID; /* File ID */
- hid_t fcpl = H5I_INVALID_HID; /* File creation property list */
- hid_t new_fapl = H5I_INVALID_HID; /* File access property list */
- hid_t tid = H5I_INVALID_HID; /* Datatype ID */
- hid_t gid = H5I_INVALID_HID; /* Group ID */
- hid_t sid = H5I_INVALID_HID; /* Dataspace ID */
- hid_t aid = H5I_INVALID_HID; /* Attribute ID */
- hid_t attr_cpl = H5I_INVALID_HID; /* Attribute creation property list */
- H5A_t *attr = NULL; /* Internal attribute pointer */
- H5F_t *f = NULL; /* Internal file pointer */
- H5F_libver_t low, high; /* Low and high bounds */
- herr_t ret; /* Return value */
-
- /* Retrieve the low/high bounds from the input fapl */
- ret = H5Pget_libver_bounds(fapl, &low, &high);
- CHECK(ret, FAIL, "H5Pget_libver_bounds");
-
- /* Create the file */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Integer datatype */
- tid = H5Tcopy(H5T_NATIVE_INT);
- CHECK(tid, H5I_INVALID_HID, "H5Tcopy");
-
- /* Create a committed datatype */
- ret = H5Tcommit2(fid, "datatype", tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Tcommit2");
-
- /* Create dataspace */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, H5I_INVALID_HID, "H5Screate");
-
- /* Create a group */
- gid = H5Gcreate2(fid, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, H5I_INVALID_HID, "H5Gcreate2");
-
- /* Attach an attribute to the group with the committed datatype */
- aid = H5Acreate2(gid, "attr1", tid, sid, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(aid, H5I_INVALID_HID, "H5Acreate2");
-
- /* Get the internal attribute pointer */
- attr = (H5A_t *)H5VL_object(aid);
- CHECK_PTR(attr, "H5VL_object");
-
- /* Verify the attribute version */
- if (low == H5F_LIBVER_EARLIEST)
- /* The earliest version the library can set for an attribute with committed datatype is 2 */
- VERIFY(attr->shared->version, H5O_ATTR_VERSION_2, "H5O_attr_ver_bounds");
- else
- VERIFY(attr->shared->version, H5O_attr_ver_bounds[low], "H5O_attr_ver_bounds");
-
- /* Close the attribute */
- ret = H5Aclose(aid);
- CHECK(ret, FAIL, "H5Aclose");
-
- /* Create an attribute to the group with integer type */
- aid = H5Acreate2(gid, "attr2", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(aid, FAIL, "H5Acreate2");
-
- /* Get the internal attribute pointer */
- attr = (H5A_t *)H5VL_object(aid);
- CHECK_PTR(attr, "H5VL_object");
-
- /* Verify attribute version */
- VERIFY(attr->shared->version, H5O_attr_ver_bounds[low], "H5O_attr_ver_bounds");
-
- /* Close the attribute */
- ret = H5Aclose(aid);
- CHECK(ret, FAIL, "H5Aclose");
-
- /* Enable character encoding in attribute creation property list */
- attr_cpl = H5Pcreate(H5P_ATTRIBUTE_CREATE);
- CHECK(attr_cpl, H5I_INVALID_HID, "H5Pcreate");
- ret = H5Pset_char_encoding(attr_cpl, H5T_CSET_UTF8);
- CHECK(ret, FAIL, "H5Pset_char_encoding");
-
- /* Attach an attribute to the group with character encoding set */
- aid = H5Acreate2(gid, "attr3", H5T_NATIVE_INT, sid, attr_cpl, H5P_DEFAULT);
- CHECK(aid, H5I_INVALID_HID, "H5Acreate2");
-
- /* Get internal attribute pointer */
- attr = (H5A_t *)H5VL_object(aid);
- CHECK_PTR(attr, "H5VL_object");
-
- /* Verify attribute version */
- if (low == H5F_LIBVER_EARLIEST)
- /* The earliest version the library can set for an attribute with character encoding is 3 */
- VERIFY(attr->shared->version, H5O_ATTR_VERSION_3, "H5O_attr_ver_bounds");
- else
- VERIFY(attr->shared->version, H5O_attr_ver_bounds[low], "H5O_attr_ver_bounds");
-
- /* Close the attribute */
- ret = H5Aclose(aid);
- CHECK(ret, FAIL, "H5Aclose");
-
- /* Close the attribute creation property list */
- ret = H5Pclose(attr_cpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the datatype */
- ret = H5Tclose(tid);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a copy of the file creation property list */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, H5I_INVALID_HID, "H5Pcreate");
-
- /* Enable shared datatype message */
- ret = H5Pset_shared_mesg_nindexes(fcpl, 1);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_nindexes");
- ret = H5Pset_shared_mesg_index(fcpl, 0, H5O_SHMESG_DTYPE_FLAG, 2);
- CHECK(ret, FAIL, "H5Pset_shared_mesg_index");
-
- /* Create the file with shared datatype message enabled */
- fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(fid, H5I_INVALID_HID, "H5Fcreate");
-
- /* Create an integer datatype */
- tid = H5Tcopy(H5T_NATIVE_INT);
- CHECK(tid, H5I_INVALID_HID, "H5Tcopy");
-
- /* Create dataspace */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, H5I_INVALID_HID, "H5Screate");
-
- /* Create a group */
- gid = H5Gcreate2(fid, GRP_NAME, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(gid, H5I_INVALID_HID, "H5Gcreate2");
-
- /* Attach an attribute to the group with shared integer datatype */
- aid = H5Acreate2(gid, ATTR_NAME, tid, sid, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(aid, H5I_INVALID_HID, "H5Acreate2");
-
- /* Get the internal attribute pointer */
- attr = (H5A_t *)H5VL_object(aid);
- CHECK_PTR(attr, "H5VL_object");
-
- /* Verify the attribute version */
- if (low == H5F_LIBVER_EARLIEST)
- /* The earliest version the library can set for an attribute with shared datatype is 2 */
- VERIFY(attr->shared->version, H5O_ATTR_VERSION_2, "H5O_attr_ver_bounds");
- else
- VERIFY(attr->shared->version, H5O_attr_ver_bounds[low], "H5O_attr_ver_bounds");
-
- /* Close the attribute */
- ret = H5Aclose(aid);
- CHECK(ret, FAIL, "H5Aclose");
-
- /* Close the group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close the datatype */
- ret = H5Tclose(tid);
- CHECK(ret, FAIL, "H5Tclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Create a default file access property list */
- new_fapl = H5Pcreate(H5P_FILE_ACCESS);
- CHECK(new_fapl, FAIL, "H5Pcreate");
-
- /* Create a scalar dataspace to be used later for the attribute */
- sid = H5Screate(H5S_SCALAR);
- CHECK(sid, H5I_INVALID_HID, "H5Screate");
-
- /* Loop through all the combinations of low/high bounds */
- /* Open the file and group and attach an attribute to the group */
- /* Verify the attribute version */
- for (low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
- for (high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
- H5E_BEGIN_TRY
- {
- ret = H5Pset_libver_bounds(new_fapl, low, high);
- }
- H5E_END_TRY
-
- if (ret < 0) /* Invalid low/high combinations */
- continue;
-
- /* Open the file */
- H5E_BEGIN_TRY
- {
- fid = H5Fopen(FILE8, H5F_ACC_RDWR, new_fapl);
- }
- H5E_END_TRY
-
- if (fid >= 0) { /* The file open succeeds */
-
- /* Get the internal file pointer */
- f = (H5F_t *)H5VL_object(fid);
- CHECK_PTR(f, "H5VL_object");
-
- /* Open the group */
- gid = H5Gopen2(fid, GRP_NAME, H5P_DEFAULT);
- CHECK(gid, FAIL, "H5Gopen2");
-
- /* Attach an attribute to the group */
- aid = H5Acreate2(gid, "attr1", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(aid, FAIL, "H5Acreate2");
-
- /* Get the internal attribute pointer */
- attr = (H5A_t *)H5VL_object(aid);
- CHECK_PTR(attr, "H5VL_object");
-
- /* Verify the attribute message version */
- VERIFY(attr->shared->version, H5O_attr_ver_bounds[f->shared->low_bound],
- "H5O_attr_ver_bounds");
-
- /* Close the attribute */
- ret = H5Aclose(aid);
- CHECK(ret, FAIL, "H5Aclose");
-
- /* Delete the attribute */
- ret = H5Adelete(gid, "attr1");
- CHECK(ret, FAIL, "H5Adelete");
-
- /* Close the group */
- ret = H5Gclose(gid);
- CHECK(ret, FAIL, "H5Gclose");
-
- /* Close the file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- } /* end if */
- } /* end for */
- } /* end for */
-
- /* Close the file access property list */
- ret = H5Pclose(new_fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the dataspace */
- ret = H5Sclose(sid);
- CHECK(ret, FAIL, "H5Sclose");
-
-} /* end test_libver_bounds_attributes() */
-
-/****************************************************************
-**
-** test_libver_macros():
-** Verify that H5_VERSION_GE and H5_VERSION_LE work correactly.
-**
-****************************************************************/
-static void
-test_libver_macros(void)
-{
- int major = H5_VERS_MAJOR;
- int minor = H5_VERS_MINOR;
- int release = H5_VERS_RELEASE;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing macros for library version comparison\n"));
-
- VERIFY(H5_VERSION_GE(major, minor, release), true, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major - 1, minor, release), true, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major - 1, minor + 1, release), true, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major - 1, minor, release + 1), true, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major, minor - 1, release), true, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major, minor - 1, release + 1), true, "H5_VERSION_GE");
- if (H5_VERS_RELEASE > 0)
- VERIFY(H5_VERSION_GE(major, minor, release - 1), true, "H5_VERSION_GE");
-
- VERIFY(H5_VERSION_GE(major + 1, minor, release), false, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major + 1, minor - 1, release), false, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major + 1, minor - 1, release - 1), false, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major, minor + 1, release), false, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major, minor + 1, release - 1), false, "H5_VERSION_GE");
- VERIFY(H5_VERSION_GE(major, minor, release + 1), false, "H5_VERSION_GE");
-
- VERIFY(H5_VERSION_LE(major, minor, release), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major + 1, minor, release), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major + 1, minor - 1, release), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major + 1, minor - 1, release - 1), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major, minor + 1, release), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major, minor + 1, release - 1), true, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major, minor, release + 1), true, "H5_VERSION_LE");
-
- VERIFY(H5_VERSION_LE(major - 1, minor, release), false, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major - 1, minor + 1, release), false, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major - 1, minor + 1, release + 1), false, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major, minor - 1, release), false, "H5_VERSION_LE");
- VERIFY(H5_VERSION_LE(major, minor - 1, release + 1), false, "H5_VERSION_LE");
- if (H5_VERS_RELEASE > 0)
- VERIFY(H5_VERSION_LE(major, minor, release - 1), false, "H5_VERSION_LE");
-} /* test_libver_macros() */
-
-/****************************************************************
-**
-** test_libver_macros2():
-** Verify that H5_VERSION_GE works correactly and show how
-** to use it.
-**
-****************************************************************/
-static void
-test_libver_macros2(void)
-{
- hid_t file;
- hid_t grp;
- htri_t status;
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing macros for library version comparison with a file\n"));
-
- /*
- * Create a file.
- */
- file = H5Fcreate(FILE6, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- /*
- * Create a group in the file.
- */
- grp = H5Gcreate2(file, "Group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Gcreate");
-
- /*
- * Close the group
- */
- ret = H5Gclose(grp);
- CHECK(ret, FAIL, "H5Gclose");
-
- /*
- * Delete the group using different function based on the library version.
- * And verify the action.
- */
-#if H5_VERSION_GE(1, 8, 0)
- ret = H5Ldelete(file, "Group", H5P_DEFAULT);
- CHECK(ret, FAIL, "H5Lunlink");
-
- status = H5Lexists(file, "Group", H5P_DEFAULT);
- VERIFY(status, false, "H5Lexists");
-#else
- ret = H5Gunlink(file, "Group");
- CHECK(ret, FAIL, "H5Gunlink");
-
- H5E_BEGIN_TRY
- {
- grp = H5Gopen(file, "Group");
- }
- H5E_END_TRY
- VERIFY(grp, FAIL, "H5Gopen");
-#endif
-
- /*
- * Close the file.
- */
- ret = H5Fclose(file);
- CHECK(ret, FAIL, "H5Fclose");
-
-} /* test_libver_macros2() */
-#endif
-
-#if 0
-/****************************************************************
-**
-** test_filesize():
-** Verify H5Fincrement_filesize() and H5Fget_eoa() works as
-** indicated in the "RFC: Enhancement to the tool h5clear".
-**
-****************************************************************/
-static void
-test_incr_filesize(void)
-{
- hid_t fid; /* File opened with read-write permission */
- h5_stat_size_t filesize; /* Size of file when empty */
- hid_t fcpl; /* File creation property list */
- hid_t fapl; /* File access property list */
- hid_t dspace; /* Dataspace ID */
- hid_t dset; /* Dataset ID */
- hid_t dcpl; /* Dataset creation property list */
- unsigned u; /* Local index variable */
- char filename[FILENAME_LEN]; /* Filename to use */
- char name[32]; /* Dataset name */
- haddr_t stored_eoa; /* The stored EOA value */
- hid_t driver_id = -1; /* ID for this VFD */
- unsigned long driver_flags = 0; /* VFD feature flags */
- herr_t ret; /* Return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing H5Fincrement_filesize() and H5Fget_eoa())\n"));
-
- fapl = h5_fileaccess();
- h5_fixname(FILE8, fapl, filename, sizeof filename);
-
- /* Get the VFD feature flags */
- driver_id = H5Pget_driver(fapl);
- CHECK(driver_id, FAIL, "H5Pget_driver");
-
- ret = H5FDdriver_query(driver_id, &driver_flags);
- CHECK(ret, FAIL, "H5PDdriver_query");
-
- /* Check whether the VFD feature flag supports these two public routines */
- if (driver_flags & H5FD_FEAT_SUPPORTS_SWMR_IO) {
-
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Set file space strategy */
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_FSM_AGGR, false, (hsize_t)1);
- CHECK(ret, FAIL, "H5P_set_file_space_strategy");
-
- /* Create the test file */
- fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(fid, FAIL, "H5Fcreate");
-
- /* Create dataspace for datasets */
- dspace = H5Screate(H5S_SCALAR);
- CHECK(dspace, FAIL, "H5Screate");
-
- /* Create a dataset creation property list */
- dcpl = H5Pcreate(H5P_DATASET_CREATE);
- CHECK(dcpl, FAIL, "H5Pcreate");
-
- /* Set the space allocation time to early */
- ret = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
- CHECK(ret, FAIL, "H5Pset_alloc_time");
-
- /* Create datasets in file */
- for (u = 0; u < 10; u++) {
- snprintf(name, sizeof(name), "Dataset %u", u);
- dset = H5Dcreate2(fid, name, H5T_STD_U32LE, dspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
- CHECK(dset, FAIL, "H5Dcreate2");
-
- ret = H5Dclose(dset);
- CHECK(ret, FAIL, "H5Dclose");
- } /* end for */
-
- /* Close dataspace */
- ret = H5Sclose(dspace);
- CHECK(ret, FAIL, "H5Sclose");
-
- /* Close dataset creation property list */
- ret = H5Pclose(dcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Get the file size */
- filesize = h5_get_file_size(filename, fapl);
-
- /* Open the file */
- fid = H5Fopen(filename, H5F_ACC_RDWR, fapl);
- CHECK(fid, FAIL, "H5Fopen");
-
- /* Get the stored EOA */
- ret = H5Fget_eoa(fid, &stored_eoa);
- CHECK(ret, FAIL, "H5Fget_eoa");
-
- /* Verify the stored EOA is the same as filesize */
- VERIFY(filesize, stored_eoa, "file size");
-
- /* Set the EOA to the MAX(EOA, EOF) + 512 */
- ret = H5Fincrement_filesize(fid, 512);
- CHECK(ret, FAIL, "H5Fincrement_filesize");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- /* Get the file size */
- filesize = h5_get_file_size(filename, fapl);
-
- /* Verify the filesize is the previous stored_eoa + 512 */
- VERIFY(filesize, stored_eoa + 512, "file size");
-
- /* Close the file access property list */
- ret = H5Pclose(fapl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Close the file creation property list */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
- }
-} /* end test_incr_filesize() */
-#endif
-
-/****************************************************************
-**
-** test_min_dset_ohdr():
-** Test API calls to toggle dataset object header minimization.
-**
-** TODO (as separate function?):
-** + setting persists between close and (re)open?
-** + dataset header sizes created while changing value of toggle
-**
-****************************************************************/
-#if 0
-static void
-test_min_dset_ohdr(void)
-{
- const char basename[] = "min_dset_ohdr_testfile";
- char filename[FILENAME_LEN] = "";
- hid_t file_id = -1;
- hid_t file2_id = -1;
- bool minimize;
- herr_t ret;
-
- MESSAGE(5, ("Testing dataset object header minimization\n"));
-
- /*********/
- /* SETUP */
- /*********/
-
- h5_fixname(basename, H5P_DEFAULT, filename, sizeof(filename));
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK_I(file_id, "H5Fcreate");
-
- /*********/
- /* TESTS */
- /*********/
-
- /*----------------------------------------
- * TEST default value
- */
- ret = H5Fget_dset_no_attrs_hint(file_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, false, "minimize flag");
-
- /*----------------------------------------
- * TEST set to true
- */
- ret = H5Fset_dset_no_attrs_hint(file_id, true);
- CHECK(ret, FAIL, "H5Fset_dset_no_attrs_hint");
-
- ret = H5Fget_dset_no_attrs_hint(file_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, true, "minimize flag");
-
- /*----------------------------------------
- * TEST second file open on same filename
- */
- file2_id = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT);
- CHECK_I(file2_id, "H5Fopen");
-
- /* verify true setting on second open
- */
- ret = H5Fget_dset_no_attrs_hint(file_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, true, "minimize flag");
-
- /* re-set to false on first open
- */
- ret = H5Fset_dset_no_attrs_hint(file_id, false);
- CHECK(ret, FAIL, "H5Fset_dset_no_attrs_hint");
-
- /* verify false set on both opens
- */
- ret = H5Fget_dset_no_attrs_hint(file_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, false, "minimize flag");
-
- ret = H5Fget_dset_no_attrs_hint(file2_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, false, "minimize flag");
-
- /* re-set to true on second open
- */
- ret = H5Fset_dset_no_attrs_hint(file2_id, true);
- CHECK(ret, FAIL, "H5Fset_dset_no_attrs_hint");
-
- /* verify true set on both opens
- */
- ret = H5Fget_dset_no_attrs_hint(file_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, true, "minimize flag");
-
- ret = H5Fget_dset_no_attrs_hint(file2_id, &minimize);
- CHECK(ret, FAIL, "H5Fget_dset_no_attrs_hint");
- VERIFY(minimize, true, "minimize flag");
-
- /*----------------------------------------
- * TEST error cases
- */
-
- /* trying to set with invalid file ID */
- H5E_BEGIN_TRY
- {
- ret = H5Fset_dset_no_attrs_hint(-1, true);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fset_dset_no_attrs_hint");
-
- /* trying to get with invalid file ID */
- H5E_BEGIN_TRY
- {
- ret = H5Fget_dset_no_attrs_hint(-1, &minimize);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fget_dset_no_attrs_hint");
-
- /* trying to get with invalid pointer */
- H5E_BEGIN_TRY
- {
- ret = H5Fget_dset_no_attrs_hint(file_id, NULL);
- }
- H5E_END_TRY
- VERIFY(ret, FAIL, "H5Fget_dset_no_attrs_hint");
-
- /************/
- /* TEARDOWN */
- /************/
-
- ret = H5Fclose(file_id);
- CHECK(ret, FAIL, "H5Fclose");
- ret = H5Fclose(file2_id);
- CHECK(ret, FAIL, "H5Fclose");
-} /* end test_min_dset_ohdr() */
-#endif
-
-/****************************************************************
-**
-** test_deprec():
-** Test deprecated functionality.
-**
-****************************************************************/
-#if 0
-#ifndef H5_NO_DEPRECATED_SYMBOLS
-static void
-test_deprec(const char *env_h5_drvr)
-{
- hid_t file; /* File IDs for old & new files */
- hid_t fcpl; /* File creation property list */
- hid_t fapl; /* File creation property list */
- hid_t new_fapl;
- hsize_t align;
- unsigned super; /* Superblock version # */
- unsigned freelist; /* Free list version # */
- unsigned stab; /* Symbol table entry version # */
- unsigned shhdr; /* Shared object header version # */
- H5F_info1_t finfo; /* global information about file */
- herr_t ret; /* Generic return value */
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing deprecated routines\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(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- /* Get the file's version information */
- ret = H5Fget_info1(file, &finfo);
- CHECK(ret, FAIL, "H5Fget_info1");
- VERIFY(finfo.super_ext_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.hdr_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.index_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.heap_size, 0, "H5Fget_info1");
-
- /* 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");
-
- /* Only run this part of the test with the sec2/default driver */
- if (h5_using_default_driver(env_h5_drvr)) {
- /* Create a file creation property list */
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- /* Set a property in the FCPL that will push the superblock version up */
- ret = H5Pset_file_space_strategy(fcpl, H5F_FSPACE_STRATEGY_PAGE, 1, (hsize_t)0);
- ret = H5Pset_file_space_page_size(fcpl, (hsize_t)512);
- CHECK(ret, FAIL, "H5Pset_file_space_strategy");
-
- fapl = H5Pcreate(H5P_FILE_ACCESS);
- ret = H5Pset_alignment(fapl, (hsize_t)1, (hsize_t)1024);
- CHECK(ret, FAIL, "H5Pset_alignment");
-
- /* Creating a file with the non-default file creation property list should
- * create a version 2 superblock
- */
-
- /* Create file with custom file creation property list */
- file = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, fapl);
- CHECK(file, FAIL, "H5Fcreate");
-
- new_fapl = H5Fget_access_plist(file);
- H5Pget_alignment(new_fapl, NULL, &align);
-
- /* Close FCPL */
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Get the file's version information */
- ret = H5Fget_info1(file, &finfo);
- CHECK(ret, FAIL, "H5Fget_info1");
- VERIFY(finfo.super_ext_size, 152, "H5Fget_info1");
- VERIFY(finfo.sohm.hdr_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.index_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.heap_size, 0, "H5Fget_info1");
-
- /* 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, 2, "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(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- /* Get the file's version information */
- ret = H5Fget_info1(file, &finfo);
- CHECK(ret, FAIL, "H5Fget_info1");
- VERIFY(finfo.super_ext_size, 152, "H5Fget_info1");
- VERIFY(finfo.sohm.hdr_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.index_size, 0, "H5Fget_info1");
- VERIFY(finfo.sohm.msgs_info.heap_size, 0, "H5Fget_info1");
-
- /* Get the file's 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, 2, "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");
-
- { /* Test deprecated H5Pget/set_file_space() */
-
- H5F_file_space_type_t old_strategy;
- hsize_t old_threshold;
- hid_t fid;
- hid_t ffcpl;
-
- fcpl = H5Pcreate(H5P_FILE_CREATE);
- CHECK(fcpl, FAIL, "H5Pcreate");
-
- ret = H5Pget_file_space(fcpl, &old_strategy, &old_threshold);
- CHECK(ret, FAIL, "H5Pget_file_space");
- VERIFY(old_strategy, H5F_FILE_SPACE_ALL, "H5Pget_file_space");
- VERIFY(old_threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space");
-
- /* Set file space strategy and free space section threshold */
- ret = H5Pset_file_space(fcpl, H5F_FILE_SPACE_ALL_PERSIST, (hsize_t)0);
- CHECK(ret, FAIL, "H5Pget_file_space");
-
- /* Get the file space info from the creation property */
- ret = H5Pget_file_space(fcpl, &old_strategy, &old_threshold);
- CHECK(ret, FAIL, "H5Pget_file_space");
- VERIFY(old_strategy, H5F_FILE_SPACE_ALL_PERSIST, "H5Pget_file_space");
- VERIFY(old_threshold, H5F_FREE_SPACE_THRESHOLD_DEF, "H5Pget_file_space");
-
- ret = H5Pset_file_space(fcpl, H5F_FILE_SPACE_DEFAULT, (hsize_t)3);
- CHECK(ret, FAIL, "H5Pget_file_space");
-
- ret = H5Pget_file_space(fcpl, &old_strategy, &old_threshold);
- CHECK(ret, FAIL, "H5Pget_file_space");
- VERIFY(old_strategy, H5F_FILE_SPACE_ALL_PERSIST, "H5Pget_file_space");
- VERIFY(old_threshold, 3, "H5Pget_file_space");
-
- /* Create a file */
- fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT);
- CHECK(file, FAIL, "H5Fcreate");
-
- old_strategy = H5F_FILE_SPACE_DEFAULT;
- old_threshold = 0;
- ffcpl = H5Fget_create_plist(fid);
- ret = H5Pget_file_space(ffcpl, &old_strategy, &old_threshold);
- CHECK(ret, FAIL, "H5Pget_file_space");
- VERIFY(old_strategy, H5F_FILE_SPACE_ALL_PERSIST, "H5Pget_file_space");
- VERIFY(old_threshold, 3, "H5Pget_file_space");
-
- /* Close file */
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
-
- ret = H5Pclose(ffcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- ret = H5Pclose(fcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- /* Reopen the file */
- fid = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
- CHECK(fid, FAIL, "H5Fcreate");
-
- old_strategy = H5F_FILE_SPACE_DEFAULT;
- old_threshold = 0;
- ffcpl = H5Fget_create_plist(fid);
- ret = H5Pget_file_space(ffcpl, &old_strategy, &old_threshold);
- CHECK(ret, FAIL, "H5Pget_file_space");
- VERIFY(old_strategy, H5F_FILE_SPACE_ALL_PERSIST, "H5Pget_file_space");
- VERIFY(old_threshold, 3, "H5Pget_file_space");
-
- ret = H5Pclose(ffcpl);
- CHECK(ret, FAIL, "H5Pclose");
-
- ret = H5Fclose(fid);
- CHECK(ret, FAIL, "H5Fclose");
- }
- }
-
-} /* test_deprec */
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
-#endif
-
-/****************************************************************
-**
-** test_file(): Main low-level file I/O test routine.
-**
-****************************************************************/
-void
-test_file(void)
-{
- const char *env_h5_drvr; /* File Driver value from environment */
- hid_t fapl_id = H5I_INVALID_HID; /* VFD-dependent fapl ID */
- bool driver_is_default_compatible;
- herr_t ret;
-
- /* Output message about test being performed */
- MESSAGE(5, ("Testing Low-Level File I/O\n"));
-
- /* Get the VFD to use */
- env_h5_drvr = getenv(HDF5_DRIVER);
- if (env_h5_drvr == NULL)
- env_h5_drvr = "nomatch";
-
- /* Improved version of VFD-dependent checks */
- fapl_id = h5_fileaccess();
- CHECK(fapl_id, H5I_INVALID_HID, "h5_fileaccess");
-
- ret = h5_driver_is_default_vfd_compatible(fapl_id, &driver_is_default_compatible);
- CHECK(ret, FAIL, "h5_driver_is_default_vfd_compatible");
-
- test_file_create(); /* Test file creation(also creation templates)*/
- test_file_open(env_h5_drvr); /* Test file opening */
- test_file_reopen(); /* Test file reopening */
- test_file_close(); /* Test file close behavior */
- test_get_file_id(); /* Test H5Iget_file_id */
- test_get_obj_ids(); /* Test H5Fget_obj_ids for Jira Issue 8528 */
- test_file_perm(); /* Test file access permissions */
- test_file_perm2(); /* Test file access permission again */
- test_file_is_accessible(env_h5_drvr); /* Test detecting HDF5 files correctly */
- test_file_delete(fapl_id); /* Test H5Fdelete */
- test_file_open_dot(); /* Test opening objects with "." for a name */
- test_file_open_overlap(); /* Test opening files in an overlapping manner */
- test_file_getname(); /* Test basic H5Fget_name() functionality */
- test_file_double_root_open(); /* Test opening root group from two files works properly */
- test_file_double_group_open(); /* Test opening same group from two files works properly */
- test_file_double_dataset_open(); /* Test opening same dataset from two files works properly */
- test_file_double_datatype_open(); /* Test opening same named datatype from two files works properly */
- test_file_double_file_dataset_open(true);
- test_file_double_file_dataset_open(false);
-#if 0
- test_userblock_file_size(
- env_h5_drvr); /* Tests that files created with a userblock have the correct size */
- test_cached_stab_info(); /* Tests that files are created with cached stab info in the superblock */
-
- if (driver_is_default_compatible) {
- test_rw_noupdate(); /* Test to ensure that RW permissions don't write the file unless dirtied */
- }
-
- test_userblock_alignment(
- env_h5_drvr); /* Tests that files created with a userblock and alignment interact properly */
- test_userblock_alignment_paged(env_h5_drvr); /* Tests files created with a userblock and alignment (via
- paged aggregation) interact properly */
- test_filespace_info(env_h5_drvr); /* Test file creation public routines: */
- /* H5Pget/set_file_space_strategy() & H5Pget/set_file_space_page_size() */
- /* Skipped testing for multi/split drivers */
- test_file_freespace(env_h5_drvr); /* Test file public routine H5Fget_freespace() */
- /* Skipped testing for multi/split drivers */
- /* Setup for multi/split drivers are there already */
- test_sects_freespace(env_h5_drvr,
- true); /* Test file public routine H5Fget_free_sections() for new format */
- /* Skipped testing for multi/split drivers */
- /* Setup for multi/split drivers are there already */
- test_sects_freespace(env_h5_drvr, false); /* Test file public routine H5Fget_free_sections() */
- /* Skipped testing for multi/split drivers */
-
- if (driver_is_default_compatible) {
- test_filespace_compatible(); /* Test compatibility for file space management */
-
- test_filespace_round_compatible(); /* Testing file space compatibility for files from trunk to 1_8 to
- trunk */
- test_filespace_1_10_0_compatible(); /* Testing file space compatibility for files from release 1.10.0
- */
- }
-
- test_libver_bounds(); /* Test compatibility for file space management */
- test_libver_bounds_low_high(env_h5_drvr);
- test_libver_macros(); /* Test the macros for library version comparison */
- test_libver_macros2(); /* Test the macros for library version comparison */
- test_incr_filesize(); /* Test H5Fincrement_filesize() and H5Fget_eoa() */
- test_min_dset_ohdr(); /* Test dataset object header minimization */
-#ifndef H5_NO_DEPRECATED_SYMBOLS
- test_file_ishdf5(env_h5_drvr); /* Test detecting HDF5 files correctly */
- test_deprec(env_h5_drvr); /* Test deprecated routines */
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
-#endif
-
- ret = H5Pclose(fapl_id);
- CHECK(ret, FAIL, "H5Pclose");
-
-} /* test_file() */
-
-/*-------------------------------------------------------------------------
- * Function: cleanup_file
- *
- * Purpose: Cleanup temporary test files
- *
- * Return: none
- *-------------------------------------------------------------------------
- */
-void
-cleanup_file(void)
-{
- H5E_BEGIN_TRY
- {
- H5Fdelete(SFILE1, H5P_DEFAULT);
- H5Fdelete(FILE1, H5P_DEFAULT);
- H5Fdelete(FILE2, H5P_DEFAULT);
- H5Fdelete(FILE3, H5P_DEFAULT);
- H5Fdelete(FILE4, H5P_DEFAULT);
- H5Fdelete(FILE5, H5P_DEFAULT);
- H5Fdelete(FILE6, H5P_DEFAULT);
- H5Fdelete(FILE7, H5P_DEFAULT);
- H5Fdelete(DST_FILE, H5P_DEFAULT);
- }
- H5E_END_TRY
-}