diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeTests.cmake | 14 | ||||
-rw-r--r-- | test/cmpd_dset.c | 73 | ||||
-rw-r--r-- | test/dtypes.c | 84 | ||||
-rw-r--r-- | test/select_io_dset.c | 5 |
4 files changed, 132 insertions, 44 deletions
diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake index 296d430..ec92a76 100644 --- a/test/CMakeTests.cmake +++ b/test/CMakeTests.cmake @@ -344,7 +344,7 @@ set (H5TEST_SEPARATE_TESTS ) foreach (h5_test ${H5_TESTS}) if (NOT h5_test IN_LIST H5TEST_SEPARATE_TESTS) - if (HDF5_ENABLE_USING_MEMCHECKER) + if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-${h5_test} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${h5_test}>) set_tests_properties (H5TEST-${h5_test} PROPERTIES FIXTURES_REQUIRED clear_H5TEST @@ -403,7 +403,7 @@ if (NOT CYGWIN) WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-cache-clean-objects PROPERTIES FIXTURES_CLEANUP clear_cache) - if (HDF5_ENABLE_USING_MEMCHECKER) + if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-cache COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:cache>) else () add_test (NAME H5TEST-cache COMMAND "${CMAKE_COMMAND}" @@ -477,7 +477,7 @@ add_test ( WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-external_env-clean-objects PROPERTIES FIXTURES_CLEANUP clear_external_env) -if (HDF5_ENABLE_USING_MEMCHECKER) +if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-external_env COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:external_env>) else () add_test (NAME H5TEST-external_env COMMAND "${CMAKE_COMMAND}" @@ -512,7 +512,7 @@ add_test ( ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-vds_env-clean-objects PROPERTIES FIXTURES_CLEANUP clear_vds_env) -if (HDF5_ENABLE_USING_MEMCHECKER) +if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-vds_env COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:vds_env>) else () add_test (NAME H5TEST-vds_env COMMAND "${CMAKE_COMMAND}" @@ -559,7 +559,7 @@ add_test (NAME H5TEST-flush-clean-objects WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-flush-clean-objects PROPERTIES FIXTURES_CLEANUP clear_flush) -if (HDF5_ENABLE_USING_MEMCHECKER) +if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-flush1 COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:flush1>) else () add_test (NAME H5TEST-flush1 COMMAND "${CMAKE_COMMAND}" @@ -581,7 +581,7 @@ set_tests_properties (H5TEST-flush1 PROPERTIES if ("H5TEST-flush1" MATCHES "${HDF5_DISABLE_TESTS_REGEX}") set_tests_properties (H5TEST-flush1 PROPERTIES DISABLED true) endif () -if (HDF5_ENABLE_USING_MEMCHECKER) +if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-flush2 COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:flush2>) else () add_test (NAME H5TEST-flush2 COMMAND "${CMAKE_COMMAND}" @@ -814,7 +814,7 @@ add_test (NAME H5TEST-links_env-clean-objects ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-links_env-clean-objects PROPERTIES FIXTURES_CLEANUP clear_links_env) -if (HDF5_ENABLE_USING_MEMCHECKER) +if (HDF5_USING_ANALYSIS_TOOL) add_test (NAME H5TEST-links_env COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:links_env>) else () add_test (NAME H5TEST-links_env COMMAND "${CMAKE_COMMAND}" diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index 460c8ae..227b0c3 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -450,9 +450,12 @@ test_select_src_subset(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fill hsize_t dims[2] = {NX, NY}; hsize_t chunk_dims[2] = {NX / 10, NY / 10}; unsigned char *rew_buf = NULL, *save_rew_buf = NULL, *rbuf = NULL; - int fillvalue = (-1); + stype1 fillvalue; size_t ss, ss1, ss2; + /* Initialize the fill value */ + memset(&fillvalue, 0, sizeof(stype1)); + /* Create the file for this test */ if ((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) goto error; @@ -625,9 +628,12 @@ test_select_dst_subset(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fill hsize_t dims[2] = {NX, NY}; hsize_t chunk_dims[2] = {NX / 10, NY / 10}; unsigned char *rew_buf = NULL, *save_rew_buf = NULL, *rbuf = NULL; - int fillvalue = (-1); + stype2 fillvalue; size_t ss, ss1, ss2; + /* Initialize the fill value */ + memset(&fillvalue, 0, sizeof(stype2)); + /* Create the file for this test */ if ((fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) goto error; @@ -810,17 +816,22 @@ test_select_compound(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fillva /* Other variables */ unsigned int i; - hid_t fid = H5I_INVALID_HID; - hid_t did = H5I_INVALID_HID; - hid_t sid = H5I_INVALID_HID; - hid_t dcpl = H5I_INVALID_HID; - hid_t dxpl = H5I_INVALID_HID; - hid_t array_dt = H5I_INVALID_HID; - static hsize_t dim[] = {NX, NY}; - int fillvalue = (-1); + hid_t fid = H5I_INVALID_HID; + hid_t did = H5I_INVALID_HID; + hid_t sid = H5I_INVALID_HID; + hid_t dcpl = H5I_INVALID_HID; + hid_t dxpl = H5I_INVALID_HID; + hid_t array_dt = H5I_INVALID_HID; + static hsize_t dim[] = {NX, NY}; + s1_t fillvalue1; + s7_t fillvalue7; size_t ss = 0, ss1 = 0, ss2 = 0; hsize_t memb_size[1] = {4}; + /* Initialize the fill values */ + memset(&fillvalue1, 0, sizeof(s1_t)); + memset(&fillvalue7, 0, sizeof(s7_t)); + /* Allocate buffers */ if (NULL == (s1 = (s1_t *)calloc(NX * NY, sizeof(s1_t)))) goto error; @@ -900,7 +911,7 @@ test_select_compound(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fillva /* Set fill value accordingly */ if (set_fillvalue) { - if (H5Pset_fill_value(dcpl, s1_tid, &fillvalue) < 0) + if (H5Pset_fill_value(dcpl, s1_tid, &fillvalue1) < 0) goto error; } @@ -1022,7 +1033,7 @@ test_select_compound(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fillva /* Set fill value accordingly */ if (set_fillvalue) { - if (H5Pset_fill_value(dcpl, s7_tid, &fillvalue) < 0) + if (H5Pset_fill_value(dcpl, s7_tid, &fillvalue7) < 0) goto error; } @@ -1115,6 +1126,7 @@ test_select_compound(char *fname, hid_t fapl, hid_t in_dxpl, unsigned set_fillva /* Release buffers */ free(s1); + free(save_s1); free(s3); free(save_s3); free(rbuf1); @@ -1145,30 +1157,19 @@ error: H5E_END_TRY /* Release resources */ - if (s1) - free(s1); - if (s3) - free(s3); - if (save_s3) - free(save_s3); - if (rbuf1) - free(rbuf1); - if (rbuf3) - free(rbuf3); - if (s7) - free(s7); - if (save_s7) - free(save_s7); - if (s8) - free(s8); - if (save_s8) - free(save_s8); - if (rbuf7) - free(rbuf7); - if (rbuf8) - free(rbuf8); - if (save_rbuf8) - free(save_rbuf8); + free(s1); + free(save_s1); + free(s3); + free(save_s3); + free(rbuf1); + free(rbuf3); + free(s7); + free(save_s7); + free(s8); + free(save_s8); + free(rbuf7); + free(rbuf8); + free(save_rbuf8); printf("\n*** SELECT COMPOUND DATASET TESTS FAILED ***\n"); return 1; diff --git a/test/dtypes.c b/test/dtypes.c index ac8697e..7aa3b17 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -4157,6 +4157,89 @@ error: } /*------------------------------------------------------------------------- + * Function: test_set_fields_offset + * + * Purpose: Tests for a bug in H5Tset_fields in which the function + * didn't account for an offset set for a floating-point + * datatype when checking whether the values set for the + * floating-point fields make sense for the datatype. + * + * Return: Success: 0 + * Failure: number of errors + * + *------------------------------------------------------------------------- + */ +static int +test_set_fields_offset(void) +{ + hid_t tid = H5I_INVALID_HID; + + if ((tid = H5Tcopy(H5T_NATIVE_FLOAT)) < 0) { + H5_FAILED(); + printf("Can't copy datatype\n"); + goto error; + } + + /* Create a custom 128-bit floating-point datatype */ + if (H5Tset_size(tid, 16) < 0) { + H5_FAILED(); + printf("Can't set datatype size\n"); + goto error; + } + + /* We will have 7 bytes of MSB padding + 5 bytes of offset padding */ + if (H5Tset_precision(tid, 116) < 0) { + H5_FAILED(); + printf("Can't set datatype size\n"); + goto error; + } + + if (H5Tset_offset(tid, 5) < 0) { + H5_FAILED(); + printf("Can't set datatype offset\n"); + goto error; + } + + if (H5Tset_ebias(tid, 16383) < 0) { + H5_FAILED(); + printf("Can't set datatype exponent bias\n"); + goto error; + } + + /* + * Floating-point type with the following: + * + * - 5 bits of LSB padding (bits 0 - 4) + * - 100-bit mantissa starting at bit 5 + * - 15-bit exponent starting at bit 105 + * - 1 sign bit at bit 120 + * - 7 bits of MSB padding + */ + if (H5Tset_fields(tid, 120, 105, 15, 5, 100) < 0) { + H5_FAILED(); + printf("Can't set datatype's floating-point fields\n"); + goto error; + } + + if (H5Tclose(tid) < 0) { + H5_FAILED(); + printf("Can't close datatype\n"); + goto error; + } + + return 0; + +error: + H5E_BEGIN_TRY + { + H5Tclose(tid); + } + H5E_END_TRY; + + return 1; +} + +/*------------------------------------------------------------------------- * Function: test_transient * * Purpose: Tests transient datatypes. @@ -9032,6 +9115,7 @@ main(void) nerrors += test_detect(); nerrors += test_compound_1(); nerrors += test_query(); + nerrors += test_set_fields_offset(); nerrors += test_transient(fapl); nerrors += test_named(fapl); nerrors += test_encode(); diff --git a/test/select_io_dset.c b/test/select_io_dset.c index 33b1c84..1ff7fe2 100644 --- a/test/select_io_dset.c +++ b/test/select_io_dset.c @@ -773,7 +773,10 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf) s2_t *s2_wbuf_bak = NULL; s2_t *s2_rbuf = NULL; char dset_name[DSET_NAME_LEN]; - int fillvalue = -1; + s1_t fillvalue; + + /* Initialize the fill value */ + memset(&fillvalue, 0, sizeof(s1_t)); /* Create dataset transfer property list */ if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0) |