diff options
author | jhendersonHDF <jhenderson@hdfgroup.org> | 2023-05-26 20:29:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-26 20:29:02 (GMT) |
commit | 79bb60c3f6f67411e5d70b84743fc9f6b6143cbc (patch) | |
tree | dce0c97c567cb20eeb65de917e21347376979f18 /test/API/th5s.c | |
parent | 77e64e0df46bb7498be014b1005efd49c4ad7518 (diff) | |
download | hdf5-79bb60c3f6f67411e5d70b84743fc9f6b6143cbc.zip hdf5-79bb60c3f6f67411e5d70b84743fc9f6b6143cbc.tar.gz hdf5-79bb60c3f6f67411e5d70b84743fc9f6b6143cbc.tar.bz2 |
API test updates (#3018)
* Remove macros from api tests (#2929)
* Remove macros and undefined callbacks (#2959)
* Remove remaining macros from H5_api_tests_disabled.h (#2968)
* Put some vol capability checks in testpar tests and remove remaining warnings (#2995)
* API tests datatype generation cleanup
* Clean up API tests' random datatype generation and fix bug with enum
datatype generation
* Init parallel API tests with MPI_THREAD_MULTIPLE
* HDF5 API tests - Check VOL connector registration
* Determine whether a VOL connector failed to load before running API
tests
* Cleanup some usages of H5VL_CAP_FLAG_CREATION_ORDER in API tests
* Remove some now-unused macros from H5_api_tests_disabled.h
* Enable HDF5 API tests by default
* Implement CMake option to install HDF5 API tests
* Check for invalid AAPL from H5Acreate
* Enable building of VOL connectors alongside HDF5 in CMake
* Prepend CMake VOL URL option indices with 0s so they come in order
* Don't turn on API tests by default yet
* Document VOL connector FetchContent functionality
* Add release note for API test updates
* Only install testing library if API tests are installed
* Fix grammar
Diffstat (limited to 'test/API/th5s.c')
-rw-r--r-- | test/API/th5s.c | 236 |
1 files changed, 123 insertions, 113 deletions
diff --git a/test/API/th5s.c b/test/API/th5s.c index cb1c899..f09cfeb 100644 --- a/test/API/th5s.c +++ b/test/API/th5s.c @@ -115,13 +115,11 @@ struct space4_struct { static void test_h5s_basic(void) { - hid_t fid1; /* HDF5 File IDs */ - hid_t sid1, sid2; /* Dataspace ID */ - hid_t dset1; /* Dataset ID */ -#ifndef NO_VALIDATE_DATASPACE - hid_t aid1; /* Attribute ID */ -#endif - int rank; /* Logical rank of dataspace */ + hid_t fid1; /* HDF5 File IDs */ + hid_t sid1, sid2; /* Dataspace ID */ + hid_t dset1; /* Dataset ID */ + hid_t aid1; /* Attribute ID */ + int rank; /* Logical rank of dataspace */ hsize_t dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3}; hsize_t dims2[] = {SPACE2_DIM1, SPACE2_DIM2, SPACE2_DIM3, SPACE2_DIM4}; hsize_t dims3[H5S_MAX_RANK + 1]; @@ -254,15 +252,18 @@ test_h5s_basic(void) CHECK(sid1, FAIL, "H5Screate"); sid2 = H5Screate_simple(1, dims1, dims1); CHECK(sid2, FAIL, "H5Screate"); -#ifndef NO_VALIDATE_DATASPACE - /* This dataset's space has no extent; it should not be created */ - H5E_BEGIN_TRY - { - dset1 = H5Dcreate2(fid1, BASICDATASET, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + + if (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) { + /* This dataset's space has no extent; it should not be created */ + H5E_BEGIN_TRY + { + dset1 = + H5Dcreate2(fid1, BASICDATASET, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + VERIFY(dset1, FAIL, "H5Dcreate2"); } - H5E_END_TRY - VERIFY(dset1, FAIL, "H5Dcreate2"); -#endif + dset1 = H5Dcreate2(fid1, BASICDATASET2, H5T_NATIVE_INT, sid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); CHECK(dset1, FAIL, "H5Dcreate2"); @@ -273,21 +274,23 @@ test_h5s_basic(void) } H5E_END_TRY VERIFY(ret, FAIL, "H5Dwrite"); -#ifndef NO_VALIDATE_DATASPACE - H5E_BEGIN_TRY - { - ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n); - } - H5E_END_TRY - VERIFY(ret, FAIL, "H5Dwrite"); - H5E_BEGIN_TRY - { - ret = H5Dwrite(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n); + if (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) { + H5E_BEGIN_TRY + { + ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n); + } + H5E_END_TRY + VERIFY(ret, FAIL, "H5Dwrite"); + + H5E_BEGIN_TRY + { + ret = H5Dwrite(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n); + } + H5E_END_TRY + VERIFY(ret, FAIL, "H5Dwrite"); } - H5E_END_TRY - VERIFY(ret, FAIL, "H5Dwrite"); -#endif + /* Try to iterate using the bad dataspace */ H5E_BEGIN_TRY { @@ -303,15 +306,17 @@ test_h5s_basic(void) } H5E_END_TRY VERIFY(ret, FAIL, "H5Dfill"); -#ifndef NO_VALIDATE_DATASPACE - /* Now use the bad dataspace as the space for an attribute */ - H5E_BEGIN_TRY - { - aid1 = H5Acreate2(dset1, BASICATTR, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT); + + if ((vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) && (vol_cap_flags_g & H5VL_CAP_FLAG_ATTR_BASIC)) { + /* Now use the bad dataspace as the space for an attribute */ + H5E_BEGIN_TRY + { + aid1 = H5Acreate2(dset1, BASICATTR, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT); + } + H5E_END_TRY + VERIFY(aid1, FAIL, "H5Acreate2"); } - H5E_END_TRY - VERIFY(aid1, FAIL, "H5Acreate2"); -#endif + /* Make sure that dataspace reads using the bad dataspace fail */ H5E_BEGIN_TRY { @@ -319,21 +324,23 @@ test_h5s_basic(void) } H5E_END_TRY VERIFY(ret, FAIL, "H5Dread"); -#ifndef NO_VALIDATE_DATASPACE - H5E_BEGIN_TRY - { - ret = H5Dread(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n); - } - H5E_END_TRY - VERIFY(ret, FAIL, "H5Dread"); - H5E_BEGIN_TRY - { - ret = H5Dread(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n); + if (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) { + H5E_BEGIN_TRY + { + ret = H5Dread(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n); + } + H5E_END_TRY + VERIFY(ret, FAIL, "H5Dread"); + + H5E_BEGIN_TRY + { + ret = H5Dread(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n); + } + H5E_END_TRY + VERIFY(ret, FAIL, "H5Dread"); } - H5E_END_TRY - VERIFY(ret, FAIL, "H5Dread"); -#endif + /* Clean up */ ret = H5Dclose(dset1); CHECK(ret, FAIL, "H5Dclose"); @@ -577,35 +584,33 @@ test_h5s_null(void) static void test_h5s_zero_dim(void) { - hid_t fid1; /* HDF5 File IDs */ - hid_t sid1, attr_sid; /* Dataspace ID */ - hid_t sid_chunk; /* Dataspace ID for chunked dataset */ - hid_t dset1; /* Dataset ID */ - hid_t plist_id; /* Dataset creation property list */ - hid_t attr; /* Attribute ID */ - int rank; /* Logical rank of dataspace */ - hsize_t dims1[] = {0, SPACE1_DIM2, SPACE1_DIM3}; - hsize_t max_dims[] = {SPACE1_DIM1 + 1, SPACE1_DIM2, SPACE1_DIM3}; - hsize_t extend_dims[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3}; - hsize_t chunk_dims[] = {SPACE1_DIM1, SPACE1_DIM2 / 3, SPACE1_DIM3}; - hsize_t tdims[SPACE1_RANK]; /* Dimension array to test with */ - int wdata[SPACE1_DIM2][SPACE1_DIM3]; - int rdata[SPACE1_DIM2][SPACE1_DIM3]; - short wdata_short[SPACE1_DIM2][SPACE1_DIM3]; - short rdata_short[SPACE1_DIM2][SPACE1_DIM3]; - int wdata_real[SPACE1_DIM1][SPACE1_DIM2][SPACE1_DIM3]; - int rdata_real[SPACE1_DIM1][SPACE1_DIM2][SPACE1_DIM3]; -#ifndef NO_CHECK_SELECTION_BOUNDS - int val = 3; - hsize_t start[] = {0, 0, 0}; - hsize_t count[] = {3, 15, 13}; - hsize_t coord[1][3]; /* Coordinates for point selection */ -#endif - hssize_t nelem; /* Number of elements */ - H5S_sel_type sel_type; /* Type of selection currently */ - H5S_class_t stype; /* dataspace type */ - H5D_alloc_time_t alloc_time; /* Space allocation time */ - herr_t ret; /* Generic return value */ + hid_t fid1; /* HDF5 File IDs */ + hid_t sid1, attr_sid; /* Dataspace ID */ + hid_t sid_chunk; /* Dataspace ID for chunked dataset */ + hid_t dset1; /* Dataset ID */ + hid_t plist_id; /* Dataset creation property list */ + hid_t attr; /* Attribute ID */ + int rank; /* Logical rank of dataspace */ + hsize_t dims1[] = {0, SPACE1_DIM2, SPACE1_DIM3}; + hsize_t max_dims[] = {SPACE1_DIM1 + 1, SPACE1_DIM2, SPACE1_DIM3}; + hsize_t extend_dims[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3}; + hsize_t chunk_dims[] = {SPACE1_DIM1, SPACE1_DIM2 / 3, SPACE1_DIM3}; + hsize_t tdims[SPACE1_RANK]; /* Dimension array to test with */ + int wdata[SPACE1_DIM2][SPACE1_DIM3]; + int rdata[SPACE1_DIM2][SPACE1_DIM3]; + short wdata_short[SPACE1_DIM2][SPACE1_DIM3]; + short rdata_short[SPACE1_DIM2][SPACE1_DIM3]; + int wdata_real[SPACE1_DIM1][SPACE1_DIM2][SPACE1_DIM3]; + int rdata_real[SPACE1_DIM1][SPACE1_DIM2][SPACE1_DIM3]; + int val = 3; + hsize_t start[] = {0, 0, 0}; + hsize_t count[] = {3, 15, 13}; + hsize_t coord[1][3]; /* Coordinates for point selection */ + hssize_t nelem; /* Number of elements */ + H5S_sel_type sel_type; /* Type of selection currently */ + H5S_class_t stype; /* dataspace type */ + H5D_alloc_time_t alloc_time; /* Space allocation time */ + herr_t ret; /* Generic return value */ unsigned int i, j, k; /* Output message about test being performed */ @@ -743,38 +748,42 @@ test_h5s_zero_dim(void) } } } -#ifndef NO_CHECK_SELECTION_BOUNDS - /* Select a hyperslab beyond its current dimension sizes, then try to write - * the data. It should fail. */ - ret = H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL); - CHECK(ret, FAIL, "H5Sselect_hyperslab"); - H5E_BEGIN_TRY - { - ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, wdata); + if (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) { + /* Select a hyperslab beyond its current dimension sizes, then try to write + * the data. It should fail. */ + ret = H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL); + CHECK(ret, FAIL, "H5Sselect_hyperslab"); + + H5E_BEGIN_TRY + { + ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, wdata); + } + H5E_END_TRY; + VERIFY(ret, FAIL, "H5Dwrite"); } - H5E_END_TRY; - VERIFY(ret, FAIL, "H5Dwrite"); -#endif + /* Change to "none" selection */ ret = H5Sselect_none(sid1); CHECK(ret, FAIL, "H5Sselect_none"); -#ifndef NO_CHECK_SELECTION_BOUNDS - /* Select a point beyond the dimension size, then try to write the data. - * It should fail. */ - coord[0][0] = 2; - coord[0][1] = 5; - coord[0][2] = 3; - ret = H5Sselect_elements(sid1, H5S_SELECT_SET, (size_t)1, (const hsize_t *)coord); - CHECK(ret, FAIL, "H5Sselect_elements"); - H5E_BEGIN_TRY - { - ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &val); + if (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) { + /* Select a point beyond the dimension size, then try to write the data. + * It should fail. */ + coord[0][0] = 2; + coord[0][1] = 5; + coord[0][2] = 3; + ret = H5Sselect_elements(sid1, H5S_SELECT_SET, (size_t)1, (const hsize_t *)coord); + CHECK(ret, FAIL, "H5Sselect_elements"); + + H5E_BEGIN_TRY + { + ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &val); + } + H5E_END_TRY; + VERIFY(ret, FAIL, "H5Dwrite"); } - H5E_END_TRY; - VERIFY(ret, FAIL, "H5Dwrite"); -#endif + /* Restore the selection to all */ ret = H5Sselect_all(sid1); CHECK(ret, FAIL, "H5Sselect_all"); @@ -864,17 +873,18 @@ test_h5s_zero_dim(void) HDprintf("element [%d][%d] is %d but should have been 7\n", i, j, rdata[i][j]); } } -#ifndef NO_CHECK_SELECTION_BOUNDS - /* Now extend the first dimension size of the dataset to SPACE1_DIM1*3 past the maximal size. - * It is supposed to fail. */ - extend_dims[0] = SPACE1_DIM1 * 3; - H5E_BEGIN_TRY - { - ret = H5Dset_extent(dset1, extend_dims); + if ((vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_BASIC) && + (vol_cap_flags_g & H5VL_CAP_FLAG_DATASET_MORE)) { + /* Now extend the first dimension size of the dataset to SPACE1_DIM1*3 past the maximal size. + * It is supposed to fail. */ + extend_dims[0] = SPACE1_DIM1 * 3; + H5E_BEGIN_TRY + { + ret = H5Dset_extent(dset1, extend_dims); + } + H5E_END_TRY; + VERIFY(ret, FAIL, "H5Dset_extent"); } - H5E_END_TRY; - VERIFY(ret, FAIL, "H5Dset_extent"); -#endif ret = H5Pclose(plist_id); CHECK(ret, FAIL, "H5Pclose"); |