mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
Merging in latest from upstream (HDFFV/hdf5:refs/heads/develop)
* commit '0e34f0feaaeb6d2286f87f695f25fae45c070a42': (26 commits) HDFFV-10664 update reference file HDFFV-10664 update reference files HDFFV-10664 add missing function and check for restriction Remove "bad" statements at end of TEST_ERROR. Formerly arguments to FAIL_PUTS_ERROR Add RELEASE.txt entry for HDFFV-10596. Add semicolon at end of TEST_ERROR() invocation for consistency. Uninstall should remove the libhdf5_hl_fortran links. Add symlinks named libhdf5_hl_fortran* to libhdf5hl_fortran in Makefile.am to match cmake install and the name pattern for other hl lib files. Change FAIL_PUTS_ERROR to TEST_ERROR. Cleaned up the parallel flush test and set t_pflush1 to always fail. Also set CMake to handle this. Update calls: H5Dcreate to H5Dcreate2, H5Acreate to H5Acreate2. Removed a comment. Fix comment Align H5Lcreate_ud behavior with documentation for NULL udata pointer Update toolchain comment Use c99 standard cmake variable Add PGI toolchain Correction based on code review. HDFFV-10664 add check for state before set call HDFFV-10546 refactor variable name ...
This commit is contained in:
commit
cceb9f06b8
4
MANIFEST
4
MANIFEST
@ -968,6 +968,7 @@
|
||||
./test/cross_read.c
|
||||
./test/dangle.c
|
||||
./test/deflate.h5
|
||||
./test/del_many_dense_attrs.c
|
||||
./test/direct_chunk.c
|
||||
./test/dsets.c
|
||||
./test/dt_arith.c
|
||||
@ -1102,10 +1103,10 @@
|
||||
./test/tcheck_version.c
|
||||
./test/tconfig.c
|
||||
./test/tcoords.c
|
||||
./test/testabort_fail.sh.in
|
||||
./test/testcheck_version.sh.in
|
||||
./test/testerror.sh.in
|
||||
./test/testlinks_env.sh.in
|
||||
./test/test_filenotclosed.sh.in
|
||||
./test/test_filter_plugin.sh.in
|
||||
./test/test_filters_le.h5
|
||||
./test/test_filters_be.h5
|
||||
@ -3191,6 +3192,7 @@
|
||||
./config/toolchain/crayle.cmake
|
||||
./config/toolchain/GCC.cmake
|
||||
./config/toolchain/intel.cmake
|
||||
./config/toolchain/PGI.cmake
|
||||
|
||||
./config/cmake/cacheinit.cmake
|
||||
./config/cmake/CMakeFindJavaCommon.cmake
|
||||
|
@ -53,8 +53,7 @@
|
||||
* <br />
|
||||
* \section install_sec Installation
|
||||
*
|
||||
* The HDF5 C++ API is included with the HDF5 source code and can
|
||||
* be obtained from
|
||||
* The HDF5 C++ API is included with the HDF5 source code.
|
||||
*
|
||||
* Please refer to the release_docs/INSTALL file under the top directory
|
||||
* of the HDF5 source code for information about installing, building,
|
||||
|
@ -18,16 +18,6 @@ ENABLE_LANGUAGE (Fortran)
|
||||
set (HDF_PREFIX "H5")
|
||||
include (CheckFortranFunctionExists)
|
||||
|
||||
## Check for non-standard extenstion quadmath.h
|
||||
|
||||
CHECK_INCLUDE_FILES(quadmath.h C_HAVE_QUADMATH)
|
||||
|
||||
if (${C_HAVE_QUADMATH})
|
||||
set(${HDF_PREFIX}_HAVE_QUADMATH_H 1)
|
||||
else ()
|
||||
set(${HDF_PREFIX}_HAVE_QUADMATH_H 0)
|
||||
endif ()
|
||||
|
||||
# The provided CMake Fortran macros don't provide a general compile/run function
|
||||
# so this one is used.
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -40,7 +30,7 @@ macro (FORTRAN_RUN FUNCTION_NAME SOURCE_CODE RUN_RESULT_VAR1 COMPILE_RESULT_VAR1
|
||||
TRY_RUN (RUN_RESULT_VAR COMPILE_RESULT_VAR
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranCompiler1.f90
|
||||
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
|
||||
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
|
||||
)
|
||||
|
||||
if (${COMPILE_RESULT_VAR})
|
||||
@ -367,9 +357,9 @@ ENABLE_LANGUAGE (C)
|
||||
#-----------------------------------------------------------------------------
|
||||
macro (C_RUN FUNCTION_NAME SOURCE_CODE RETURN_VAR)
|
||||
message (STATUS "Detecting C ${FUNCTION_NAME}")
|
||||
if (CMAKE_REQUIRED_LIBRARIES)
|
||||
if (HDF5_REQUIRED_LIBRARIES)
|
||||
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
|
||||
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||
"-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
|
||||
else ()
|
||||
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
|
||||
endif ()
|
||||
|
@ -9,16 +9,16 @@
|
||||
# If you do not have access to either file, you may request a copy from
|
||||
# help@hdfgroup.org.
|
||||
#
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_C_STANDARD_REQUIRED TRUE)
|
||||
|
||||
message (STATUS "Warnings Configuration:")
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C99_STANDARD_COMPILE_OPTION} ${CMAKE_C_FLAGS}")
|
||||
#-----------------------------------------------------------------------------
|
||||
# Compiler specific flags : Shouldn't there be compiler tests for these
|
||||
#-----------------------------------------------------------------------------
|
||||
if (CMAKE_COMPILER_IS_GNUCC)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
|
||||
if (NOT CYGWIN)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||
endif ()
|
||||
if (${HDF_CFG_NAME} MATCHES "Debug")
|
||||
if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ftrapv -fno-common")
|
||||
|
@ -70,7 +70,7 @@ if (WIN32)
|
||||
set (CMAKE_REQUIRED_FLAGS "-DWIN32_LEAN_AND_MEAN=1 -DNOGDI=1")
|
||||
endif ()
|
||||
set (${HDF_PREFIX}_HAVE_WIN32_API 1)
|
||||
set (CMAKE_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
|
||||
set (HDF5_REQUIRED_LIBRARIES "ws2_32.lib;wsock32.lib")
|
||||
if (NOT UNIX AND NOT MINGW)
|
||||
set (WINDOWS 1)
|
||||
set (CMAKE_REQUIRED_FLAGS "/DWIN32_LEAN_AND_MEAN=1 /DNOGDI=1")
|
||||
@ -109,84 +109,10 @@ endif ()
|
||||
# END of WINDOWS Hard code Values
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
if (CYGWIN)
|
||||
set (${HDF_PREFIX}_HAVE_LSEEK64 0)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check for the math library "m"
|
||||
#-----------------------------------------------------------------------------
|
||||
if (NOT WINDOWS)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32)
|
||||
endif ()
|
||||
|
||||
# UCB (BSD) compatibility library
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB)
|
||||
|
||||
# For other tests to use the same libraries
|
||||
set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LINK_LIBS})
|
||||
|
||||
set (USE_INCLUDES "")
|
||||
if (WINDOWS)
|
||||
set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
|
||||
endif ()
|
||||
|
||||
if (NOT WINDOWS)
|
||||
TEST_BIG_ENDIAN (${HDF_PREFIX}_WORDS_BIGENDIAN)
|
||||
endif ()
|
||||
|
||||
# For other specific tests, use this MACRO.
|
||||
macro (HDF_FUNCTION_TEST OTHER_TEST)
|
||||
if (NOT DEFINED ${HDF_PREFIX}_${OTHER_TEST})
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
|
||||
|
||||
foreach (def
|
||||
HAVE_SYS_TIME_H
|
||||
HAVE_UNISTD_H
|
||||
HAVE_SYS_TYPES_H
|
||||
HAVE_SYS_SOCKET_H
|
||||
)
|
||||
if ("${${HDF_PREFIX}_${def}}")
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
if (LARGEFILE)
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||
"${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
|
||||
)
|
||||
endif ()
|
||||
|
||||
#message (STATUS "Performing ${OTHER_TEST}")
|
||||
TRY_COMPILE (${OTHER_TEST}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
|
||||
COMPILE_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS}"
|
||||
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
)
|
||||
if (${OTHER_TEST})
|
||||
set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
|
||||
message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
|
||||
else ()
|
||||
message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
|
||||
set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
|
||||
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Performing Other Test ${OTHER_TEST} failed with the following output:\n"
|
||||
"${OUTPUT}\n"
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check for these functions before the time headers are checked
|
||||
#-----------------------------------------------------------------------------
|
||||
HDF_FUNCTION_TEST (STDC_HEADERS)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check IF header file exists and add it to the list.
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -243,6 +169,91 @@ CHECK_INCLUDE_FILE_CONCAT ("memory.h" ${HDF_PREFIX}_HAVE_MEMORY_H)
|
||||
CHECK_INCLUDE_FILE_CONCAT ("dlfcn.h" ${HDF_PREFIX}_HAVE_DLFCN_H)
|
||||
CHECK_INCLUDE_FILE_CONCAT ("inttypes.h" ${HDF_PREFIX}_HAVE_INTTYPES_H)
|
||||
CHECK_INCLUDE_FILE_CONCAT ("netinet/in.h" ${HDF_PREFIX}_HAVE_NETINET_IN_H)
|
||||
# _Bool type support
|
||||
CHECK_INCLUDE_FILE_CONCAT (stdbool.h ${HDF_PREFIX}_HAVE_STDBOOL_H)
|
||||
|
||||
## Check for non-standard extenstion quadmath.h
|
||||
|
||||
CHECK_INCLUDE_FILES(quadmath.h C_HAVE_QUADMATH)
|
||||
if (${C_HAVE_QUADMATH})
|
||||
set(${HDF_PREFIX}_HAVE_QUADMATH_H 1)
|
||||
else ()
|
||||
set(${HDF_PREFIX}_HAVE_QUADMATH_H 0)
|
||||
endif ()
|
||||
|
||||
if (CYGWIN)
|
||||
set (${HDF_PREFIX}_HAVE_LSEEK64 0)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check for the math library "m"
|
||||
#-----------------------------------------------------------------------------
|
||||
if (NOT WINDOWS)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("m" ceil ${HDF_PREFIX}_HAVE_LIBM)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("dl" dlopen ${HDF_PREFIX}_HAVE_LIBDL)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("ws2_32" WSAStartup ${HDF_PREFIX}_HAVE_LIBWS2_32)
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("wsock32" gethostbyname ${HDF_PREFIX}_HAVE_LIBWSOCK32)
|
||||
endif ()
|
||||
|
||||
# UCB (BSD) compatibility library
|
||||
CHECK_LIBRARY_EXISTS_CONCAT ("ucb" gethostname ${HDF_PREFIX}_HAVE_LIBUCB)
|
||||
|
||||
# For other tests to use the same libraries
|
||||
set (HDF5_REQUIRED_LIBRARIES ${HDF5_REQUIRED_LIBRARIES} ${LINK_LIBS})
|
||||
|
||||
set (USE_INCLUDES "")
|
||||
if (WINDOWS)
|
||||
set (USE_INCLUDES ${USE_INCLUDES} "windows.h")
|
||||
endif ()
|
||||
|
||||
# For other specific tests, use this MACRO.
|
||||
macro (HDF_FUNCTION_TEST OTHER_TEST)
|
||||
if (NOT DEFINED ${HDF_PREFIX}_${OTHER_TEST})
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
|
||||
|
||||
foreach (def
|
||||
HAVE_SYS_TIME_H
|
||||
HAVE_UNISTD_H
|
||||
HAVE_SYS_TYPES_H
|
||||
HAVE_SYS_SOCKET_H
|
||||
)
|
||||
if ("${${HDF_PREFIX}_${def}}")
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS} -D${def}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
if (LARGEFILE)
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||
"${MACRO_CHECK_FUNCTION_DEFINITIONS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE"
|
||||
)
|
||||
endif ()
|
||||
|
||||
#message (STATUS "Performing ${OTHER_TEST}")
|
||||
TRY_COMPILE (${OTHER_TEST}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
|
||||
COMPILE_DEFINITIONS "${MACRO_CHECK_FUNCTION_DEFINITIONS}"
|
||||
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
|
||||
OUTPUT_VARIABLE OUTPUT
|
||||
)
|
||||
if (${OTHER_TEST})
|
||||
set (${HDF_PREFIX}_${OTHER_TEST} 1 CACHE INTERNAL "Other test ${FUNCTION}")
|
||||
message (STATUS "Performing Other Test ${OTHER_TEST} - Success")
|
||||
else ()
|
||||
message (STATUS "Performing Other Test ${OTHER_TEST} - Failed")
|
||||
set (${HDF_PREFIX}_${OTHER_TEST} "" CACHE INTERNAL "Other test ${FUNCTION}")
|
||||
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Performing Other Test ${OTHER_TEST} failed with the following output:\n"
|
||||
"${OUTPUT}\n"
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check for these functions before the time headers are checked
|
||||
#-----------------------------------------------------------------------------
|
||||
HDF_FUNCTION_TEST (STDC_HEADERS)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Check for large file support
|
||||
@ -408,7 +419,6 @@ endif ()
|
||||
#-----------------------------------------------------------------------------
|
||||
|
||||
# _Bool type support
|
||||
CHECK_INCLUDE_FILE_CONCAT (stdbool.h ${HDF_PREFIX}_HAVE_STDBOOL_H)
|
||||
if (HAVE_STDBOOL_H)
|
||||
set (CMAKE_EXTRA_INCLUDE_FILES stdbool.h)
|
||||
HDF_CHECK_TYPE_SIZE (bool ${HDF_PREFIX}_SIZEOF_BOOL)
|
||||
@ -580,7 +590,7 @@ if (WINDOWS)
|
||||
${CMAKE_BINARY_DIR}
|
||||
${HDF_RESOURCES_EXT_DIR}/HDFTests.c
|
||||
COMPILE_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} ${MACRO_CHECK_FUNCTION_DEFINITIONS}"
|
||||
LINK_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}"
|
||||
LINK_LIBRARIES "${HDF5_REQUIRED_LIBRARIES}"
|
||||
CMAKE_FLAGS "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES} -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}"
|
||||
COMPILE_OUTPUT_VARIABLE OUTPUT
|
||||
)
|
||||
|
@ -48,8 +48,8 @@ macro (HDF_CXX_FUNCTION_TEST OTHER_TEST)
|
||||
if (NOT DEFINED ${OTHER_TEST})
|
||||
set (MACRO_CHECK_FUNCTION_DEFINITIONS "-D${OTHER_TEST} ${CMAKE_REQUIRED_FLAGS}")
|
||||
set (OTHER_TEST_ADD_LIBRARIES)
|
||||
if (CMAKE_REQUIRED_LIBRARIES)
|
||||
set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||
if (HDF5_REQUIRED_LIBRARIES)
|
||||
set (OTHER_TEST_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
|
||||
endif ()
|
||||
|
||||
foreach (def
|
||||
|
@ -48,9 +48,9 @@ set (H5_FC_FUNC_ "H5_FC_FUNC_(name,NAME) ${CMAKE_MATCH_1}")
|
||||
#-----------------------------------------------------------------------------
|
||||
macro (CHECK_FORTRAN_FEATURE FUNCTION CODE VARIABLE)
|
||||
message (STATUS "Testing Fortran ${FUNCTION}")
|
||||
if (CMAKE_REQUIRED_LIBRARIES)
|
||||
if (HDF5_REQUIRED_LIBRARIES)
|
||||
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES
|
||||
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||
"-DLINK_LIBRARIES:STRING=${HDF5_REQUIRED_LIBRARIES}")
|
||||
else ()
|
||||
set (CHECK_FUNCTION_EXISTS_ADD_LIBRARIES)
|
||||
endif ()
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Uncomment the following to use cross-compiling
|
||||
# Uncomment the following line and the correct system name to use cross-compiling
|
||||
#set(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
set(CMAKE_COMPILER_VENDOR "GCC")
|
||||
|
||||
set(CMAKE_C_COMPILER cc)
|
||||
|
11
config/toolchain/PGI.cmake
Normal file
11
config/toolchain/PGI.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
# Uncomment the following to use cross-compiling
|
||||
#set(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
set(CMAKE_COMPILER_VENDOR "PGI")
|
||||
|
||||
set(CMAKE_C_COMPILER pgcc)
|
||||
set(CMAKE_CXX_COMPILER pgc++)
|
||||
set(CMAKE_Fortran_COMPILER pgf90)
|
||||
|
||||
# the following is used if cross-compiling
|
||||
set(CMAKE_CROSSCOMPILING_EMULATOR "")
|
@ -1,5 +1,6 @@
|
||||
# Uncomment the following to use cross-compiling
|
||||
# The following line will use cross-compiling
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
set(CMAKE_COMPILER_VENDOR "CrayLinuxEnvironment")
|
||||
|
||||
set(CMAKE_C_COMPILER cc)
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Uncomment the following to use cross-compiling
|
||||
#set(CMAKE_SYSTEM_NAME Linux)
|
||||
|
||||
set(CMAKE_COMPILER_VENDOR "intel")
|
||||
|
||||
set(CMAKE_C_COMPILER icc)
|
||||
|
@ -3399,6 +3399,7 @@ AC_CONFIG_FILES([src/libhdf5.settings
|
||||
src/Makefile
|
||||
test/Makefile
|
||||
test/H5srcdir_str.h
|
||||
test/testabort_fail.sh
|
||||
test/testcheck_version.sh
|
||||
test/testerror.sh
|
||||
test/testflushrefresh.sh
|
||||
@ -3406,7 +3407,6 @@ AC_CONFIG_FILES([src/libhdf5.settings
|
||||
test/testlinks_env.sh
|
||||
test/testswmr.sh
|
||||
test/testvdsswmr.sh
|
||||
test/test_filenotclosed.sh
|
||||
test/test_filter_plugin.sh
|
||||
test/test_usecases.sh
|
||||
test/test_vol_plugin.sh
|
||||
|
@ -50,6 +50,19 @@ libhdf5hl_fortran_la_SOURCES=H5DSfc.c H5LTfc.c H5IMfc.c H5IMcc.c H5TBfc.c \
|
||||
# HDF5 HL Fortran library depends on HDF5 Library.
|
||||
libhdf5hl_fortran_la_LIBADD=$(LIBH5_HL) $(LIBH5F)
|
||||
|
||||
# The name of the lib file doesn't follow the same pattern as the other hl lib
|
||||
# files, namely libhdf5_hl_*. Add a symlink with the compliant name to the
|
||||
# actual lib file.
|
||||
install-exec-hook:
|
||||
cd $(DESTDIR)$(libdir) && \
|
||||
if test -f libhdf5hl_fortran.a; then \
|
||||
$(LN_S) libhdf5hl_fortran.a libhdf5_hl_fortran.a; \
|
||||
fi; \
|
||||
if test -f libhdf5hl_fortran.so; then \
|
||||
$(LN_S) libhdf5hl_fortran.so libhdf5_hl_fortran.so; \
|
||||
fi;
|
||||
|
||||
|
||||
# Fortran module files can have different extensions and different names
|
||||
# (e.g., different capitalizations) on different platforms. Write rules
|
||||
# for them explicitly rather than trying to teach automake about them.
|
||||
@ -72,6 +85,7 @@ uninstall-local:
|
||||
set -x; $(RM) $(includedir)/*.$(F9XMODEXT); \
|
||||
fi; \
|
||||
fi
|
||||
$(RM) $(DESTDIR)$(libdir)/libhdf5_hl_fortran*
|
||||
|
||||
# These are the helper programs we need to build.
|
||||
noinst_PROGRAMS = H5HL_buildiface
|
||||
|
@ -3229,13 +3229,56 @@ public class H5 implements java.io.Serializable {
|
||||
public synchronized static native void H5Fget_mdc_logging_status(long file_id, boolean[] mdc_logging_status)
|
||||
throws HDF5LibraryException, NullPointerException;
|
||||
|
||||
/**
|
||||
* H5Fget_dset_no_attrs_hint gets the file-level setting to create minimized dataset object headers.
|
||||
*
|
||||
* @param file_id
|
||||
* IN: Identifier of the target file.
|
||||
*
|
||||
* @exception HDF5LibraryException
|
||||
* - Error from the HDF-5 Library.
|
||||
**/
|
||||
public synchronized static native boolean H5Fget_dset_no_attrs_hint(long file_id)
|
||||
throws HDF5LibraryException;
|
||||
|
||||
|
||||
/**
|
||||
* H5Fset_dset_no_attrs_hint sets the file-level setting to create minimized dataset object headers.
|
||||
*
|
||||
* @param file_id
|
||||
* IN: Identifier of the target file.
|
||||
* @param minimize
|
||||
* the minimize hint setting
|
||||
*
|
||||
* @exception HDF5LibraryException
|
||||
* - Error from the HDF-5 Library.
|
||||
**/
|
||||
public synchronized static native void H5Fset_dset_no_attrs_hint(long file_id, boolean minimize)
|
||||
throws HDF5LibraryException;
|
||||
|
||||
|
||||
/**
|
||||
* H5Fset_libver_bounds sets a different low and high bounds while a file is open.
|
||||
*
|
||||
* @param file_id
|
||||
* IN: Identifier of the target file.
|
||||
* @param low
|
||||
* IN: The earliest version of the library that will be used for writing objects
|
||||
* @param high
|
||||
* IN: The latest version of the library that will be used for writing objects.
|
||||
*
|
||||
* @exception HDF5LibraryException
|
||||
* - Error from the HDF-5 Library.
|
||||
**/
|
||||
public synchronized static native void H5Fset_libver_bounds(long file_id, int low, int high)
|
||||
throws HDF5LibraryException;
|
||||
|
||||
// /////// unimplemented ////////
|
||||
// herr_t H5Fget_eoa(hid_t file_id, haddr_t *eoa);
|
||||
// herr_t H5Fincrement_filesize(hid_t file_id, hsize_t increment);
|
||||
// ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
|
||||
// herr_t H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info);
|
||||
// ssize_t H5Fget_free_sections(hid_t file_id, H5F_mem_t type, size_t nsects, H5F_sect_info_t *sect_info/*out*/);
|
||||
// herr_t H5Fset_libver_bounds(hid_t file_id, H5F_libver_t low, H5F_libver_t high);
|
||||
// herr_t H5Fformat_convert(hid_t fid);
|
||||
// herr_t H5Freset_page_buffering_stats(hid_t file_id);
|
||||
// herr_t H5Fget_page_buffering_stats(hid_t file_id, unsigned accesses[2],
|
||||
@ -6922,8 +6965,6 @@ public class H5 implements java.io.Serializable {
|
||||
public synchronized static native int H5Pset_fill_time(long plist_id, int fill_time) throws HDF5LibraryException,
|
||||
NullPointerException;
|
||||
|
||||
// /////// Dataset creation property list (DCPL) routines ///////
|
||||
|
||||
/**
|
||||
* H5Pset_chunk_opts Sets the edge chunk option in a dataset creation property list.
|
||||
*
|
||||
@ -6952,6 +6993,36 @@ public class H5 implements java.io.Serializable {
|
||||
**/
|
||||
public synchronized static native int H5Pget_chunk_opts(long dcpl_id) throws HDF5LibraryException;
|
||||
|
||||
/**
|
||||
* H5Pget_dset_no_attrs_hint accesses the flag for whether or not datasets created by the given dcpl
|
||||
* will be created with a "minimized" object header.
|
||||
*
|
||||
* @param dcpl_id
|
||||
* IN: Dataset creation property list
|
||||
*
|
||||
* @exception HDF5LibraryException
|
||||
* - Error from the HDF-5 Library.
|
||||
**/
|
||||
public synchronized static native boolean H5Pget_dset_no_attrs_hint(long dcpl_id)
|
||||
throws HDF5LibraryException;
|
||||
|
||||
|
||||
/**
|
||||
* H5Pset_dset_no_attrs_hint sets the dcpl to minimize (or explicitly to not minimized) dataset object
|
||||
* headers upon creation.
|
||||
*
|
||||
* @param dcpl_id
|
||||
* IN: Dataset creation property list
|
||||
*
|
||||
* @param minimize
|
||||
* the minimize hint setting
|
||||
*
|
||||
* @exception HDF5LibraryException
|
||||
* - Error from the HDF-5 Library.
|
||||
**/
|
||||
public synchronized static native void H5Pset_dset_no_attrs_hint(long dcpl_id, boolean minimize)
|
||||
throws HDF5LibraryException;
|
||||
|
||||
// /////// Dataset access property list (DAPL) routines ///////
|
||||
|
||||
/**
|
||||
|
@ -149,6 +149,9 @@ Java_hdf_hdf5lib_H5_H5Fis_1hdf5
|
||||
(JNIEnv *env, jclass clss, jstring name)
|
||||
{
|
||||
htri_t bval = JNI_FALSE;
|
||||
#ifdef H5_NO_DEPRECATED_SYMBOLS
|
||||
h5unimplemented(env, "H5Fis_hdf5: not implemented");
|
||||
#else
|
||||
const char *fileName;
|
||||
|
||||
PIN_JAVA_STRING(name, fileName);
|
||||
@ -162,7 +165,7 @@ Java_hdf_hdf5lib_H5_H5Fis_1hdf5
|
||||
else if (bval < 0)
|
||||
h5libraryError(env);
|
||||
}
|
||||
|
||||
#endif
|
||||
return (jboolean)bval;
|
||||
} /* end Java_hdf_hdf5lib_H5_H5Fis_1hdf5 */
|
||||
|
||||
@ -636,6 +639,66 @@ Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status
|
||||
} /* end else */
|
||||
} /* end Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status */
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fset_dset_no_attrs_hint
|
||||
* Signature: (JZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fset_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *env, jclass clss, jlong file_id, jboolean minimize)
|
||||
{
|
||||
herr_t retVal = -1;
|
||||
hbool_t minimize_val;
|
||||
|
||||
if (minimize == JNI_TRUE)
|
||||
minimize_val = TRUE;
|
||||
else
|
||||
minimize_val = FALSE;
|
||||
|
||||
retVal = H5Fset_dset_no_attrs_hint((hid_t)file_id, (hbool_t)minimize_val);
|
||||
if (retVal < 0)
|
||||
h5libraryError(env);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fget_dset_no_attrs_hint
|
||||
* Signature: (J)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fget_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *env, jclass clss, jlong file_id)
|
||||
{
|
||||
hbool_t minimize = FALSE;
|
||||
jboolean bval = JNI_FALSE;
|
||||
|
||||
if (H5Fget_dset_no_attrs_hint((hid_t)file_id, (hbool_t *)&minimize) < 0) {
|
||||
h5libraryError(env);
|
||||
}
|
||||
else {
|
||||
if (minimize == TRUE)
|
||||
bval = JNI_TRUE;
|
||||
} /* end else */
|
||||
|
||||
return bval;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fset_libver_bounds
|
||||
* Signature: (JII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds
|
||||
(JNIEnv *env, jclass clss, jlong file_id, jint low, jint high)
|
||||
{
|
||||
herr_t retVal = -1;
|
||||
|
||||
retVal = H5Fset_libver_bounds((hid_t)file_id, (H5F_libver_t)low, (H5F_libver_t)high);
|
||||
if(retVal < 0)
|
||||
h5libraryError(env);
|
||||
} /* end Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -255,6 +255,33 @@ JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status
|
||||
(JNIEnv *, jclass, jlong, jbooleanArray);
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fset_dset_no_attrs_hint
|
||||
* Signature: (JZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fset_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *, jclass, jlong, jboolean);
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fget_dset_no_attrs_hint
|
||||
* Signature: (J)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fget_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *, jclass, jlong);
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Fset_libver_bounds
|
||||
* Signature: (JII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Fset_1libver_1bounds
|
||||
(JNIEnv *, jclass, jlong, jint, jint);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
#endif /* __cplusplus */
|
||||
|
@ -5946,6 +5946,51 @@ Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts
|
||||
return (jint)opts;
|
||||
} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts */
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Pset_dset_no_attrs_hint
|
||||
* Signature: (JZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *env, jclass clss, jlong dcpl_id, jboolean minimize)
|
||||
{
|
||||
herr_t retVal = -1;
|
||||
hbool_t minimize_val;
|
||||
|
||||
if (minimize == JNI_TRUE)
|
||||
minimize_val = TRUE;
|
||||
else
|
||||
minimize_val = FALSE;
|
||||
|
||||
retVal = H5Pset_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t)minimize_val);
|
||||
if (retVal < 0)
|
||||
h5libraryError(env);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Pget_dset_no_attrs_hint
|
||||
* Signature: (J)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *env, jclass clss, jlong dcpl_id)
|
||||
{
|
||||
hbool_t minimize = FALSE;
|
||||
jboolean bval = JNI_FALSE;
|
||||
|
||||
if (H5Pget_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t *)&minimize) < 0) {
|
||||
h5libraryError(env);
|
||||
}
|
||||
else {
|
||||
if (minimize == TRUE)
|
||||
bval = JNI_TRUE;
|
||||
} /* end else */
|
||||
|
||||
return bval;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
#endif /* __cplusplus */
|
||||
|
@ -1614,6 +1614,24 @@ JNIEXPORT jint JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts
|
||||
(JNIEnv *, jclass, jlong);
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Pset_dset_no_attrs_hint
|
||||
* Signature: (JZ)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *, jclass, jlong, jboolean);
|
||||
|
||||
/*
|
||||
* Class: hdf_hdf5lib_H5
|
||||
* Method: H5Pget_dset_no_attrs_hint
|
||||
* Signature: (J)Z
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint
|
||||
(JNIEnv *, jclass, jlong);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
package test;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
@ -211,4 +212,23 @@ public class TestH5Dplist {
|
||||
assertTrue("testH5Dset_extent - H5.H5Dread: ", extend_dset_data[4][8] == 99);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testH5P_dset_no_attrs_hint() {
|
||||
boolean ret_val_id = true;
|
||||
|
||||
_createPDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DATASET_CREATE);
|
||||
|
||||
try {
|
||||
ret_val_id = H5.H5Pget_dset_no_attrs_hint(H5dcpl_id);
|
||||
assertFalse("H5P_dset_no_attrs_hint", ret_val_id);
|
||||
H5.H5Pset_dset_no_attrs_hint(H5dcpl_id, true);
|
||||
ret_val_id = H5.H5Pget_dset_no_attrs_hint(H5dcpl_id);
|
||||
assertTrue("H5P_dset_no_attrs_hint", ret_val_id);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
err.printStackTrace();
|
||||
fail("H5P_dset_no_attrs_hint: " + err);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
package test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
@ -68,19 +69,6 @@ public class TestH5Fbasic {
|
||||
assertTrue(H5fid > 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testH5Fis_hdf5() {
|
||||
boolean isH5 = false;
|
||||
|
||||
try {
|
||||
isH5 = H5.H5Fis_hdf5(H5_FILE);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
fail("H5.H5Fis_hdf5 failed on " + H5_FILE + ": " + err);
|
||||
}
|
||||
assertTrue(isH5 == true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testH5Fis_accessible() {
|
||||
boolean isH5 = false;
|
||||
@ -328,4 +316,20 @@ public class TestH5Fbasic {
|
||||
fail("H5.H5Freset_mdc_hit_rate_stats: " + err);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testH5F_dset_no_attrs_hint() {
|
||||
boolean ret_val_id = true;
|
||||
try {
|
||||
ret_val_id = H5.H5Fget_dset_no_attrs_hint(H5fid);
|
||||
assertFalse("H5F_dset_no_attrs_hint", ret_val_id);
|
||||
H5.H5Fset_dset_no_attrs_hint(H5fid, true);
|
||||
ret_val_id = H5.H5Fget_dset_no_attrs_hint(H5fid);
|
||||
assertTrue("H5F_dset_no_attrs_hint", ret_val_id);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
err.printStackTrace();
|
||||
fail("H5F_dset_no_attrs_hint: " + err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,10 +22,12 @@ import java.io.File;
|
||||
|
||||
import hdf.hdf5lib.H5;
|
||||
import hdf.hdf5lib.HDF5Constants;
|
||||
import hdf.hdf5lib.exceptions.HDF5FunctionArgumentException;
|
||||
import hdf.hdf5lib.structs.H5F_info2_t;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TestName;
|
||||
@ -54,11 +56,6 @@ public class TestH5Fparams {
|
||||
H5.H5Fopen(null, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
|
||||
}
|
||||
|
||||
@Test(expected = NullPointerException.class)
|
||||
public void testH5Fis_hdf5_null() throws Throwable {
|
||||
H5.H5Fis_hdf5(null);
|
||||
}
|
||||
|
||||
@Test(expected = NullPointerException.class)
|
||||
public void testH5Fis_accessible_null() throws Throwable {
|
||||
H5.H5Fis_accessible(null, -1);
|
||||
@ -74,7 +71,7 @@ public class TestH5Fparams {
|
||||
H5.H5Funmount(-1, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void testH5Fis_hdf5_text() {
|
||||
File txtFile = null;
|
||||
boolean isH5 = false;
|
||||
@ -195,7 +192,7 @@ public class TestH5Fparams {
|
||||
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
fail("H5.H5Fopen: " + err);
|
||||
fail("H5.H5Fcreate: " + err);
|
||||
}
|
||||
|
||||
try {
|
||||
@ -215,4 +212,42 @@ public class TestH5Fparams {
|
||||
try {H5.H5Fclose(fid);} catch (Exception ex) {}
|
||||
}
|
||||
}
|
||||
|
||||
@Ignore//(expected = HDF5FunctionArgumentException.class)
|
||||
public void testH5Fset_libver_bounds_invalidlow() throws Throwable {
|
||||
long fid = -1;
|
||||
|
||||
try {
|
||||
try {
|
||||
fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
|
||||
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
fail("H5.H5Fcreate: " + err);
|
||||
}
|
||||
H5.H5Fset_libver_bounds(fid, 5, HDF5Constants.H5F_LIBVER_LATEST);
|
||||
}
|
||||
finally {
|
||||
try {H5.H5Fclose(fid);} catch (Exception ex) {}
|
||||
}
|
||||
}
|
||||
|
||||
@Ignore//(expected = HDF5FunctionArgumentException.class)
|
||||
public void testH5Fset_libver_bounds_invalidhigh() throws Throwable {
|
||||
long fid = -1;
|
||||
|
||||
try {
|
||||
try {
|
||||
fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
|
||||
HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
|
||||
}
|
||||
catch (Throwable err) {
|
||||
fail("H5.H5Fcreate: " + err);
|
||||
}
|
||||
H5.H5Fset_libver_bounds(fid, HDF5Constants.H5F_LIBVER_V110, HDF5Constants.H5F_LIBVER_V110+1);
|
||||
}
|
||||
finally {
|
||||
try {H5.H5Fclose(fid);} catch (Exception ex) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
JUnit version 4.11
|
||||
.testH5P_dset_no_attrs_hint
|
||||
.testH5Dset_extent
|
||||
|
||||
Time: XXXX
|
||||
|
||||
OK (1 test)
|
||||
OK (2 tests)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
JUnit version 4.11
|
||||
.testH5Fget_mdc_size
|
||||
.testH5Fget_mdc_hit_rate
|
||||
.testH5Fis_hdf5
|
||||
.testH5F_dset_no_attrs_hint
|
||||
.testH5Fget_freespace
|
||||
.testH5Fclose
|
||||
.testH5Fget_filesize
|
||||
|
@ -9,10 +9,8 @@ JUnit version 4.11
|
||||
.testH5Funmount_null
|
||||
.testH5Fclose_negative
|
||||
.testH5Fopen_null
|
||||
.testH5Fis_hdf5_null
|
||||
.testH5Fis_hdf5_text
|
||||
|
||||
Time: XXXX
|
||||
|
||||
OK (12 tests)
|
||||
OK (10 tests)
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
HDF5 version 1.11.4 currently under development
|
||||
version 1.11.4 currently under development
|
||||
================================================================================
|
||||
|
||||
|
||||
@ -243,6 +243,19 @@ Bug Fixes since HDF5-1.10.3 release
|
||||
|
||||
Library
|
||||
-------
|
||||
- Deleting attributes in dense storage
|
||||
|
||||
The library aborts with "infinite loop closing library" after
|
||||
attributes in dense storage are created and then deleted.
|
||||
|
||||
When deleting the attribute nodes from the name index v2 B-tree,
|
||||
if an attribute is found in the intermediate B-tree nodes,
|
||||
which may be merged/redistributed in the process, we need to
|
||||
free the dynamically allocated spaces for the intermediate
|
||||
decoded attribute.
|
||||
|
||||
(VC - 2018/12/26, HDFFV-10659)
|
||||
|
||||
- Allow H5detect and H5make_libsettings to take a file as an argument.
|
||||
|
||||
Rather than only writing to stdout, add a command argument to name
|
||||
@ -314,6 +327,15 @@ Bug Fixes since HDF5-1.10.3 release
|
||||
|
||||
Fortran
|
||||
--------
|
||||
- Added symbolic links libhdf5_hl_fortran.so to libhdf5hl_fortran.so and
|
||||
libhdf5_hl_fortran.a to libhdf5hl_fortran.a in hdf5/lib directory for
|
||||
autotools installs. These were added to match the name of the files
|
||||
installed by cmake and the general pattern of hl lib files. We will
|
||||
change the names of the installed lib files to the matching name in
|
||||
the next major release.
|
||||
|
||||
(LRK - 2019/01/04, HDFFV-10596)
|
||||
|
||||
- Made Fortran specific subroutines PRIVATE in generic procedures.
|
||||
|
||||
Effected generic procedures were functions in H5A, H5D, H5P, H5R and H5T.
|
||||
|
@ -300,18 +300,49 @@ static herr_t
|
||||
H5A__dense_fnd_cb(const H5A_t *attr, hbool_t *took_ownership, void *_user_attr)
|
||||
{
|
||||
H5A_t const **user_attr = (H5A_t const **)_user_attr; /* User data from v2 B-tree attribute lookup */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC_NOERR
|
||||
FUNC_ENTER_STATIC
|
||||
|
||||
/* Check arguments */
|
||||
HDassert(attr);
|
||||
HDassert(user_attr);
|
||||
HDassert(took_ownership);
|
||||
/*
|
||||
* If there is an attribute already stored in "user_attr",
|
||||
* we need to free the dynamially allocated spaces for the
|
||||
* attribute, otherwise we got infinite loop closing library due to
|
||||
* outstanding allocation. (HDFFV-10659)
|
||||
*
|
||||
* This callback is used by H5A__dense_remove() to close/free the
|
||||
* attribute stored in "user_attr" (via H5O__msg_free_real()) after
|
||||
* the attribute node is deleted from the name index v2 B-tree.
|
||||
* The issue is:
|
||||
* When deleting the attribute node from the B-tree,
|
||||
* if the attribute is found in the intermediate B-tree nodes,
|
||||
* which may be merged/redistributed, we need to free the dynamically
|
||||
* allocated spaces for the intermediate decoded attribute.
|
||||
*/
|
||||
if(*user_attr != NULL) {
|
||||
H5A_t *old_attr = *user_attr;
|
||||
if(old_attr->shared) {
|
||||
/* Free any dynamically allocated items */
|
||||
if(H5A__free(old_attr) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release attribute info")
|
||||
|
||||
/* Destroy shared attribute struct */
|
||||
old_attr->shared = H5FL_FREE(H5A_shared_t, old_attr->shared);
|
||||
} /* end if */
|
||||
|
||||
old_attr = H5FL_FREE(H5A_t, old_attr);
|
||||
} /* end if */
|
||||
|
||||
/* Take over attribute ownership */
|
||||
*user_attr = attr;
|
||||
*took_ownership = TRUE;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5A__dense_fnd_cb() */
|
||||
|
||||
|
||||
|
@ -1493,6 +1493,9 @@ H5D__create_chunk_map_single(H5D_chunk_map_t *fm, const H5D_io_info_t
|
||||
|
||||
/* Set chunk location & hyperslab size */
|
||||
for(u = 0; u < fm->f_ndims; u++) {
|
||||
/* Validate this chunk dimension */
|
||||
if(fm->layout->u.chunk.dim[u] == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", u)
|
||||
HDassert(sel_start[u] == sel_end[u]);
|
||||
chunk_info->scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
|
||||
coords[u] = chunk_info->scaled[u] * fm->layout->u.chunk.dim[u];
|
||||
@ -1580,6 +1583,9 @@ H5D__create_chunk_file_map_hyper(H5D_chunk_map_t *fm, const H5D_io_info_t
|
||||
|
||||
/* Set initial chunk location & hyperslab size */
|
||||
for(u = 0; u < fm->f_ndims; u++) {
|
||||
/* Validate this chunk dimension */
|
||||
if(fm->layout->u.chunk.dim[u] == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", u)
|
||||
scaled[u] = start_scaled[u] = sel_start[u] / fm->layout->u.chunk.dim[u];
|
||||
coords[u] = start_coords[u] = scaled[u] * fm->layout->u.chunk.dim[u];
|
||||
end[u] = (coords[u] + fm->chunk_dim[u]) - 1;
|
||||
@ -4043,6 +4049,9 @@ H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_
|
||||
* assume here that all elements of space_dim are > 0. This is checked at
|
||||
* the top of this function. */
|
||||
for(op_dim=0; op_dim<space_ndims; op_dim++) {
|
||||
/* Validate this chunk dimension */
|
||||
if(chunk_dim[op_dim] == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
|
||||
min_unalloc[op_dim] = (old_dim[op_dim] + chunk_dim[op_dim] - 1) / chunk_dim[op_dim];
|
||||
max_unalloc[op_dim] = (space_dim[op_dim] - 1) / chunk_dim[op_dim];
|
||||
|
||||
@ -4484,13 +4493,17 @@ H5D__chunk_update_old_edge_chunks(H5D_t *dset, hsize_t old_dim[])
|
||||
/* Start off with this dimension marked as not needing to be modified */
|
||||
new_full_dim[op_dim] = FALSE;
|
||||
|
||||
/* Validate this chunk dimension */
|
||||
if(chunk_dim[op_dim] == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
|
||||
|
||||
/* Calculate offset of first previously incomplete chunk in this
|
||||
* dimension */
|
||||
old_edge_chunk_sc[op_dim] = (old_dim[op_dim] / chunk_dim[op_dim]);
|
||||
old_edge_chunk_sc[op_dim] = (old_dim[op_dim] / chunk_dim[op_dim]);
|
||||
|
||||
/* Calculate the largest offset of chunks that might need to be
|
||||
* modified in this dimension */
|
||||
max_edge_chunk_sc[op_dim] = MIN((old_dim[op_dim] - 1) / chunk_dim[op_dim],
|
||||
max_edge_chunk_sc[op_dim] = MIN((old_dim[op_dim] - 1) / chunk_dim[op_dim],
|
||||
MAX((space_dim[op_dim] / chunk_dim[op_dim]), 1) - 1);
|
||||
|
||||
/* Check for old_dim aligned with chunk boundary in this dimension, if
|
||||
@ -4626,6 +4639,8 @@ H5D__chunk_collective_fill(const H5D_t *dset, H5D_chunk_coll_info_t *chunk_info,
|
||||
HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI size")
|
||||
|
||||
/* Distribute evenly the number of blocks between processes. */
|
||||
if(mpi_size == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "Resulted in division by zero")
|
||||
num_blocks = chunk_info->num_io / mpi_size; /* value should be the same on all procs */
|
||||
|
||||
/* after evenly distributing the blocks between processes, are
|
||||
@ -5066,6 +5081,10 @@ H5D__chunk_prune_by_extent(H5D_t *dset, const hsize_t *old_dim)
|
||||
HDmemset(min_mod_chunk_sc, 0, sizeof(min_mod_chunk_sc));
|
||||
HDmemset(max_mod_chunk_sc, 0, sizeof(max_mod_chunk_sc));
|
||||
for(op_dim = 0; op_dim < (unsigned)space_ndims; op_dim++) {
|
||||
/* Validate this chunk dimension */
|
||||
if(chunk_dim[op_dim] == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "chunk size must be > 0, dim = %u ", op_dim)
|
||||
|
||||
/* Calculate the largest offset of chunks that might need to be
|
||||
* modified in this dimension */
|
||||
max_mod_chunk_sc[op_dim] = (old_dim[op_dim] - 1) / chunk_dim[op_dim];
|
||||
@ -5721,9 +5740,12 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
|
||||
/* (background buffer has already been zeroed out, if not expanding) */
|
||||
if(udata->cpy_info->expand_ref) {
|
||||
size_t ref_count;
|
||||
size_t dt_size;
|
||||
|
||||
/* Determine # of reference elements to copy */
|
||||
ref_count = nbytes / H5T_get_size(udata->dt_src);
|
||||
if((dt_size = H5T_get_size(udata->dt_src)) == 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "size must not be 0")
|
||||
ref_count = nbytes / dt_size;
|
||||
|
||||
/* Copy the reference elements */
|
||||
if(H5O_copy_expand_ref(udata->file_src, buf, udata->idx_info_dst->f, bkg, ref_count, H5T_get_ref_type(udata->dt_src), udata->cpy_info) < 0)
|
||||
|
@ -648,6 +648,8 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no link name specified")
|
||||
if(link_type < H5L_TYPE_UD_MIN || link_type > H5L_TYPE_MAX)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid link class")
|
||||
if(!udata && udata_size)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "udata cannot be NULL if udata_size is non-zero")
|
||||
|
||||
/* Check the group access property list */
|
||||
if(H5P_DEFAULT == lcpl_id)
|
||||
|
@ -374,6 +374,7 @@ set (H5_CHECK_TESTS
|
||||
atomic_reader
|
||||
links_env
|
||||
filenotclosed
|
||||
del_many_dense_attrs
|
||||
flushrefresh
|
||||
)
|
||||
|
||||
|
@ -520,6 +520,7 @@ set (test_CLEANFILES
|
||||
flushrefresh_VERIFICATION_CHECKPOINT2
|
||||
flushrefresh_VERIFICATION_DONE
|
||||
filenotclosed.h5
|
||||
del_many_dense_attrs.h5
|
||||
atomic_data
|
||||
accum_swmr_big.h5
|
||||
ohdr_swmr.h5
|
||||
@ -796,6 +797,7 @@ set_tests_properties (H5TEST-tcheck_version-release PROPERTIES
|
||||
# atomic_reader
|
||||
# links_env
|
||||
# filenotclosed
|
||||
# del_many_dense_attrs
|
||||
# flushrefresh
|
||||
##############################################################################
|
||||
# autotools script tests
|
||||
@ -803,7 +805,7 @@ set_tests_properties (H5TEST-tcheck_version-release PROPERTIES
|
||||
# NOT CONVERTED accum_swmr_reader is used by accum.c.
|
||||
# NOT CONVERTED atomic_writer and atomic_reader are standalone programs.
|
||||
# links_env is used by testlinks_env.sh
|
||||
# filenotclosed is used by test_filenotclosed.sh
|
||||
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
|
||||
# NOT CONVERTED flushrefresh is used by testflushrefresh.sh.
|
||||
# NOT CONVERTED use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
|
||||
# NOT CONVERTED swmr_* files (besides swmr.c) are used by testswmr.sh.
|
||||
@ -830,6 +832,23 @@ set_tests_properties (H5TEST-filenotclosed PROPERTIES
|
||||
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
|
||||
)
|
||||
|
||||
#-- Adding test for del_many_dense_attrs
|
||||
add_test (
|
||||
NAME H5TEST-clear-del_many_dense_attrs-objects
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-E remove
|
||||
del_many_dense_attrs.h5
|
||||
WORKING_DIRECTORY
|
||||
${HDF5_TEST_BINARY_DIR}/H5TEST
|
||||
)
|
||||
set_tests_properties (H5TEST-clear-del_many_dense_attrs-objects PROPERTIES FIXTURES_SETUP del_many_dense_attrs_clear_objects)
|
||||
add_test (NAME H5TEST-del_many_dense_attrs COMMAND $<TARGET_FILE:del_many_dense_attrs>)
|
||||
set_tests_properties (H5TEST-del_many_dense_attrs PROPERTIES
|
||||
FIXTURES_REQUIRED del_many_dense_attrs_clear_objects
|
||||
ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST"
|
||||
WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST
|
||||
)
|
||||
|
||||
#-- Adding test for err_compat
|
||||
if (HDF5_ENABLE_DEPRECATED_SYMBOLS)
|
||||
add_test (NAME H5TEST-clear-err_compat-objects
|
||||
|
@ -29,12 +29,13 @@ AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_builddir)/src
|
||||
# testflushrefresh.sh: flushrefresh
|
||||
# testswmr.sh: swmr*
|
||||
# testvdsswmr.sh: vds_swmr*
|
||||
# test_filenotclosed.sh: filenotclosed.c
|
||||
# testabort_fail.sh: filenotclosed.c and del_many_dense_attrs.c
|
||||
# test_filter_plugin.sh: filter_plugin.c
|
||||
# test_usecases.sh: use_append_chunk, use_append_mchunks, use_disable_mdc_flushes
|
||||
TEST_SCRIPT = testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh test_filenotclosed.sh\
|
||||
testswmr.sh testvdsswmr.sh testflushrefresh.sh test_usecases.sh
|
||||
SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) links_env$(EXEEXT) filenotclosed$(EXEEXT) \
|
||||
TEST_SCRIPT = testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh \
|
||||
testswmr.sh testvdsswmr.sh testflushrefresh.sh test_usecases.sh testabort_fail.sh
|
||||
SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) links_env$(EXEEXT) \
|
||||
filenotclosed$(EXEEXT) del_many_dense_attrs$(EXEEXT) \
|
||||
flushrefresh$(EXEEXT) use_append_chunk$(EXEEXT) use_append_mchunks$(EXEEXT) use_disable_mdc_flushes$(EXEEXT) \
|
||||
swmr_generator$(EXEEXT) swmr_reader$(EXEEXT) swmr_writer$(EXEEXT) \
|
||||
swmr_remove_reader$(EXEEXT) swmr_remove_writer$(EXEEXT) swmr_addrem_writer$(EXEEXT) \
|
||||
@ -68,7 +69,7 @@ TEST_PROG= testhdf5 \
|
||||
# accum_swmr_reader is used by accum.c.
|
||||
# atomic_writer and atomic_reader are standalone programs.
|
||||
# links_env is used by testlinks_env.sh
|
||||
# filenotclosed is used by test_filenotclosed.sh
|
||||
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
|
||||
# flushrefresh is used by testflushrefresh.sh.
|
||||
# use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
|
||||
# swmr_* files (besides swmr.c) are used by testswmr.sh.
|
||||
@ -78,7 +79,8 @@ TEST_PROG= testhdf5 \
|
||||
# and this lets automake keep all its test programs in one place.
|
||||
check_PROGRAMS=$(TEST_PROG) error_test err_compat tcheck_version \
|
||||
testmeta accum_swmr_reader atomic_writer atomic_reader \
|
||||
links_env filenotclosed flushrefresh use_append_chunk use_append_mchunks use_disable_mdc_flushes \
|
||||
links_env filenotclosed del_many_dense_attrs flushrefresh \
|
||||
use_append_chunk use_append_mchunks use_disable_mdc_flushes \
|
||||
swmr_generator swmr_start_write swmr_reader swmr_writer swmr_remove_reader \
|
||||
swmr_remove_writer swmr_addrem_writer swmr_sparse_reader swmr_sparse_writer \
|
||||
swmr_check_compat_vfd vds_swmr_gen vds_swmr_reader vds_swmr_writer
|
||||
@ -221,7 +223,7 @@ use_disable_mdc_flushes_SOURCES=use_disable_mdc_flushes.c
|
||||
|
||||
# Temporary files.
|
||||
DISTCLEANFILES=testerror.sh testlibinfo.sh testcheck_version.sh testlinks_env.sh test_filter_plugin.sh \
|
||||
testswmr.sh testvdsswmr.sh test_usecases.sh testflushrefresh.sh test_filenotclosed.sh \
|
||||
testswmr.sh testvdsswmr.sh test_usecases.sh testflushrefresh.sh testabort_fail.sh \
|
||||
test_vol_plugin.sh
|
||||
|
||||
include $(top_srcdir)/config/conclude.am
|
||||
|
@ -171,6 +171,7 @@ if (UNIX)
|
||||
# atomic_writer
|
||||
# atomic_reader
|
||||
# filenotclosed
|
||||
# del_many_dense_attrs
|
||||
# flushrefresh
|
||||
##############################################################################
|
||||
# autotools script tests
|
||||
@ -178,7 +179,7 @@ if (UNIX)
|
||||
# NOT CONVERTED accum_swmr_reader is used by accum.c.
|
||||
# NOT CONVERTED atomic_writer and atomic_reader are standalone programs.
|
||||
# links_env is used by testlinks_env.sh
|
||||
# filenotclosed is used by test_filenotclosed.sh
|
||||
# filenotclosed and del_many_dense_attrs are used by testabort_fail.sh
|
||||
# NOT CONVERTED flushrefresh is used by testflushrefresh.sh.
|
||||
# NOT CONVERTED use_append_chunk, use_append_mchunks and use_disable_mdc_flushes are used by test_usecases.sh
|
||||
# NOT CONVERTED swmr_* files (besides swmr.c) are used by testswmr.sh.
|
||||
|
203
test/del_many_dense_attrs.c
Normal file
203
test/del_many_dense_attrs.c
Normal file
@ -0,0 +1,203 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by The HDF Group. *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* 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://support.hdfgroup.org/ftp/HDF5/releases. *
|
||||
* If you do not have access to either file, you may request a copy from *
|
||||
* help@hdfgroup.org. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Purpose: Test to verify that the infinite loop closing library/abort failure
|
||||
* is fixed when the application creates and removes dense attributes
|
||||
* (See HDFFV-10659).
|
||||
*/
|
||||
|
||||
|
||||
#include "h5test.h"
|
||||
|
||||
/* The test file name */
|
||||
const char *FILENAME[] = {
|
||||
"del_many_dense_attrs",
|
||||
NULL
|
||||
};
|
||||
|
||||
#define ATTR_COUNT 64 /* The number of attributes */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: catch_signal
|
||||
*
|
||||
* Purpose: The signal handler to catch the SIGABRT signal.
|
||||
*
|
||||
* Return: No return
|
||||
*
|
||||
* Programmer: Vailin Choi
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void catch_signal(int H5_ATTR_UNUSED signo)
|
||||
{
|
||||
HDexit(1);
|
||||
} /* catch_signal() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose: Test to verify that the infinite loop closing library/abort failure
|
||||
* is fixed when the application creates and removes dense attributes
|
||||
* (See HDFFV-10659).
|
||||
*
|
||||
* Return: Success: exit(EXIT_SUCCESS)
|
||||
* Failure: exit(EXIT_FAILURE)
|
||||
*
|
||||
* Programmer: Vailin Choi; Dec 2018
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
hid_t fid = -1; /* HDF5 File ID */
|
||||
hid_t gid = -1; /* Group ID */
|
||||
hid_t sid = -1; /* Dataspace ID */
|
||||
hid_t aid = -1; /* Attribute ID */
|
||||
hid_t tid = -1; /* Datatype ID */
|
||||
hid_t fapl = -1; /* File access property lists */
|
||||
hid_t gcpl = -1; /* Group creation property list */
|
||||
char aname[50]; /* Name of attribute */
|
||||
char *basename="attr"; /* Name prefix for attribute */
|
||||
char filename[100]; /* File name */
|
||||
int i; /* Local index variable */
|
||||
|
||||
/* Testing setup */
|
||||
h5_reset();
|
||||
|
||||
/* To exit from the file for SIGABRT signal */
|
||||
if(HDsignal(SIGABRT, catch_signal) == SIG_ERR)
|
||||
TEST_ERROR
|
||||
|
||||
fapl = h5_fileaccess();
|
||||
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
||||
|
||||
/* Set to latest format */
|
||||
if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create the file */
|
||||
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(H5Fclose(fid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Re-open the file */
|
||||
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create the group creation property list */
|
||||
if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Set to use dense storage for all attributes on the group */
|
||||
if(H5Pset_attr_phase_change(gcpl, 0, 0) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create the group in the file */
|
||||
if((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, gcpl, H5P_DEFAULT)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create dataspace */
|
||||
if((sid = H5Screate(H5S_SCALAR)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Get a copy of the datatype */
|
||||
if((tid = H5Tcopy(H5T_NATIVE_FLOAT)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create attributes in the group */
|
||||
for(i = ATTR_COUNT; i >= 0; i--) {
|
||||
/* Set up the attribute name */
|
||||
HDsprintf(aname, "%s%d", basename, i);
|
||||
|
||||
/* Create the attribute */
|
||||
if((aid = H5Acreate2(gid, aname, tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Write to the attribute */
|
||||
if(H5Awrite(aid, tid, &i) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the attribute */
|
||||
if(H5Aclose(aid) < 0)
|
||||
TEST_ERROR
|
||||
}
|
||||
|
||||
/* Close the datatype */
|
||||
if(H5Tclose(tid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the dataspace */
|
||||
if(H5Sclose(sid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the group */
|
||||
if(H5Gclose(gid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the group creation property list */
|
||||
if(H5Pclose(gcpl) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(H5Fclose(fid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Re-open the file */
|
||||
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Open the group */
|
||||
if((gid = H5Gopen(fid, "group", H5P_DEFAULT)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Delete the attributes */
|
||||
for (i = 0; i <= ATTR_COUNT; i++) {
|
||||
/* Set up the attribute name */
|
||||
HDsprintf(aname, "%s%d", basename, i);
|
||||
|
||||
/* Delete the attribute */
|
||||
if(H5Adelete(gid, aname) < 0)
|
||||
TEST_ERROR
|
||||
} /* end for */
|
||||
|
||||
/* Close the group */
|
||||
if(H5Gclose(gid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close the file */
|
||||
if(H5Fclose(fid) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
h5_cleanup(FILENAME, fapl);
|
||||
|
||||
return(EXIT_SUCCESS);
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Gclose(gid);
|
||||
H5Sclose(sid);
|
||||
H5Tclose(tid);
|
||||
H5Aclose(aid);
|
||||
H5Fclose(fid);
|
||||
H5Pclose(gcpl);
|
||||
H5Pclose(fapl);
|
||||
} H5E_END_TRY
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
41
test/dsets.c
41
test/dsets.c
@ -13072,15 +13072,13 @@ test_object_header_minimization_dcpl(void)
|
||||
/*********/
|
||||
|
||||
if(NULL == h5_fixname(OHMIN_FILENAME_A, H5P_DEFAULT, filename, sizeof(filename)))
|
||||
FAIL_PUTS_ERROR("unable to prepare filename")
|
||||
TEST_ERROR
|
||||
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if (0 > file_id)
|
||||
FAIL_PUTS_ERROR("unable to create test file\n");
|
||||
if (0 > file_id) TEST_ERROR
|
||||
|
||||
dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if (0 > dcpl_id)
|
||||
FAIL_PUTS_ERROR("unable to create DCPL\n");
|
||||
if (0 > dcpl_id) TEST_ERROR
|
||||
|
||||
/*********/
|
||||
/* TESTS */
|
||||
@ -13088,28 +13086,23 @@ test_object_header_minimization_dcpl(void)
|
||||
|
||||
/* default value (not set explicitly)
|
||||
*/
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to get minimize value\n");
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
|
||||
if (FALSE != minimize)
|
||||
FAIL_PUTS_ERROR("Expected FALSE default but was not!\n");
|
||||
TEST_ERROR
|
||||
|
||||
/* FALSE-set value
|
||||
*/
|
||||
if (H5Pset_dset_no_attrs_hint(dcpl_id, FALSE) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to set minimize value to FALSE\n");
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to get minimize value\n");
|
||||
if (H5Pset_dset_no_attrs_hint(dcpl_id, FALSE) == FAIL) TEST_ERROR
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
|
||||
if (FALSE != minimize)
|
||||
FAIL_PUTS_ERROR("Expected FALSE default but was not!\n");
|
||||
TEST_ERROR
|
||||
|
||||
/* TRUE-set value
|
||||
*/
|
||||
if (H5Pset_dset_no_attrs_hint(dcpl_id, TRUE) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to set minimize value to TRUE\n");
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to get minimize value\n");
|
||||
if (H5Pset_dset_no_attrs_hint(dcpl_id, TRUE) == FAIL) TEST_ERROR
|
||||
if (H5Pget_dset_no_attrs_hint(dcpl_id, &minimize) == FAIL) TEST_ERROR
|
||||
if (TRUE != minimize)
|
||||
FAIL_PUTS_ERROR("Expected TRUE default but was not!\n");
|
||||
TEST_ERROR
|
||||
|
||||
/* error cases
|
||||
*/
|
||||
@ -13117,35 +13110,35 @@ test_object_header_minimization_dcpl(void)
|
||||
ret = H5Pget_dset_no_attrs_hint(-1, &minimize);
|
||||
} H5E_END_TRY;
|
||||
if (ret == SUCCEED)
|
||||
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
|
||||
TEST_ERROR /* Invalid DCPL ID should fail */
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Pset_dset_no_attrs_hint(-1, FALSE);
|
||||
} H5E_END_TRY;
|
||||
if (ret == SUCCEED)
|
||||
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
|
||||
TEST_ERROR /* Invalid DCPL ID should fail */
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Pset_dset_no_attrs_hint(-1, TRUE);
|
||||
} H5E_END_TRY;
|
||||
if (ret == SUCCEED)
|
||||
FAIL_PUTS_ERROR("Invalid DCPL ID should fail\n");
|
||||
TEST_ERROR /* Invalid DCPL ID should fail */
|
||||
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Pget_dset_no_attrs_hint(dcpl_id, NULL);
|
||||
} H5E_END_TRY;
|
||||
if (ret == SUCCEED)
|
||||
FAIL_PUTS_ERROR("NULL out pointer should fail\n");
|
||||
TEST_ERROR /* NULL out pointer should fail */
|
||||
|
||||
/************/
|
||||
/* TEARDOWN */
|
||||
/************/
|
||||
|
||||
if (H5Fclose(file_id) == FAIL)
|
||||
FAIL_PUTS_ERROR("can't close FILE");
|
||||
TEST_ERROR
|
||||
|
||||
if (H5Pclose(dcpl_id) == FAIL)
|
||||
FAIL_PUTS_ERROR("unable to close DCPL\n");
|
||||
TEST_ERROR
|
||||
|
||||
PASSED();
|
||||
return SUCCEED;
|
||||
|
@ -8823,6 +8823,12 @@ ud_link_errors(hid_t fapl, hbool_t new_format)
|
||||
TEST_ERROR
|
||||
} H5E_END_TRY
|
||||
|
||||
/* Try to create a link with H5Lcreate_ud that has a NULL udata pointer, but a non-zero udata_size value */
|
||||
H5E_BEGIN_TRY {
|
||||
if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, NULL, 1, H5P_DEFAULT, H5P_DEFAULT) >= 0)
|
||||
TEST_ERROR
|
||||
} H5E_END_TRY;
|
||||
|
||||
/* Create a user-defined link to the group. */
|
||||
strcpy(group_name, "/group");
|
||||
if(H5Lcreate_ud(fid, "/ud_link", (H5L_type_t)UD_CBFAIL_TYPE, &group_name, HDstrlen(group_name) + 1, H5P_DEFAULT, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
||||
|
42
test/ohdr.c
42
test/ohdr.c
@ -753,7 +753,7 @@ put_attribute(hid_t loc_id, const char *attrname, const void *attrvalue, hid_t d
|
||||
{
|
||||
if((*attribute_id) < 0) {
|
||||
hid_t id = -1;
|
||||
id = H5Acreate(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
id = H5Acreate2(loc_id, attrname, datatype_id, dataspace_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(id < 0)
|
||||
return FAIL;
|
||||
*attribute_id = id;
|
||||
@ -770,7 +770,7 @@ count_attributes(hid_t dset_id)
|
||||
{
|
||||
H5O_info_t info;
|
||||
|
||||
if(H5Oget_info(dset_id, &info, H5O_INFO_ALL) < 0)
|
||||
if(H5Oget_info2(dset_id, &info, H5O_INFO_ALL) < 0)
|
||||
return -1;
|
||||
else
|
||||
return (int)info.num_attrs; /* should never exceed int bounds */
|
||||
@ -879,10 +879,10 @@ test_minimized_dset_ohdr_attribute_addition(hid_t fapl_id)
|
||||
} H5E_END_TRY;
|
||||
if(count != -1) TEST_ERROR
|
||||
|
||||
dset_id = H5Dcreate(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
dset_id = H5Dcreate2(file_id, "dataset", int_type_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_id < 0) TEST_ERROR
|
||||
|
||||
mindset_id = H5Dcreate(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
mindset_id = H5Dcreate2(file_id, "mindataset", int_type_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(mindset_id < 0) TEST_ERROR
|
||||
|
||||
/********************
|
||||
@ -1121,13 +1121,13 @@ test_minimized_dset_ohdr_size_comparisons(hid_t fapl_id)
|
||||
file_f_id = H5Fcreate(filename_a, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_f_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_x_id = H5Dcreate(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
|
||||
dset_f_x_id = H5Dcreate2(file_f_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_N_id = H5Dcreate(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
dset_f_N_id = H5Dcreate2(file_f_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_f_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_f_Y_id = H5Dcreate(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
dset_f_Y_id = H5Dcreate2(file_f_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_f_x_id < 0) TEST_ERROR
|
||||
|
||||
file_F_id = H5Fcreate(filename_b, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
@ -1135,13 +1135,13 @@ test_minimized_dset_ohdr_size_comparisons(hid_t fapl_id)
|
||||
ret = H5Fset_dset_no_attrs_hint(file_F_id, TRUE);
|
||||
if(ret < 0) TEST_ERROR
|
||||
|
||||
dset_F_x_id = H5Dcreate(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
|
||||
dset_F_x_id = H5Dcreate2(file_F_id, "default", int_type_id, dspace_id, H5P_DEFAULT, dcpl_default, H5P_DEFAULT);
|
||||
if(dset_F_x_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_N_id = H5Dcreate(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
dset_F_N_id = H5Dcreate2(file_F_id, "dsetNOT", int_type_id, dspace_id, H5P_DEFAULT, dcpl_dontmin, H5P_DEFAULT);
|
||||
if(dset_F_N_id < 0) TEST_ERROR
|
||||
|
||||
dset_F_Y_id = H5Dcreate(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
dset_F_Y_id = H5Dcreate2(file_F_id, "dsetMIN", int_type_id, dspace_id, H5P_DEFAULT, dcpl_minimize, H5P_DEFAULT);
|
||||
if(dset_F_Y_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
@ -1276,16 +1276,16 @@ test_minimized_dset_ohdr_with_filter(hid_t fapl_id)
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
dset_xx_id = H5Dcreate2(file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
dset_mx_id = H5Dcreate2(file_id, "Mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xZ_id = H5Dcreate(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
|
||||
dset_xZ_id = H5Dcreate2(file_id, "xZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xZ_id, H5P_DEFAULT);
|
||||
if(dset_xZ_id < 0) TEST_ERROR
|
||||
|
||||
dset_mZ_id = H5Dcreate(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
|
||||
dset_mZ_id = H5Dcreate2(file_id, "MZ", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mZ_id, H5P_DEFAULT);
|
||||
if(dset_mZ_id < 0) TEST_ERROR
|
||||
|
||||
/*********
|
||||
@ -1435,18 +1435,18 @@ test_minimized_dset_ohdr_modification_times(hid_t _fapl_id)
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_xx_id = H5Dcreate( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
dset_xx_id = H5Dcreate2( file_id, "xx", dtype_id, dspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
if(dset_xx_id < 0) TEST_ERROR
|
||||
|
||||
dset_mx_id = H5Dcreate(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
dset_mx_id = H5Dcreate2(file_id, "mx", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mx_id, H5P_DEFAULT);
|
||||
if(dset_mx_id < 0) TEST_ERROR
|
||||
|
||||
dset_xT_id = H5Dcreate(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
|
||||
dset_xT_id = H5Dcreate2(file_id, "xT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_xT_id, H5P_DEFAULT);
|
||||
if(dset_xT_id < 0) TEST_ERROR
|
||||
dset_mT_id = H5Dcreate(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
|
||||
dset_mT_id = H5Dcreate2(file_id, "mT", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mT_id, H5P_DEFAULT);
|
||||
if(dset_mT_id < 0) TEST_ERROR
|
||||
|
||||
dset_mN_id = H5Dcreate(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
|
||||
dset_mN_id = H5Dcreate2(file_id, "mN", dtype_id, dspace_id, H5P_DEFAULT, dcpl_mN_id, H5P_DEFAULT);
|
||||
if(dset_mN_id < 0) TEST_ERROR
|
||||
|
||||
/* ----- *
|
||||
@ -1561,7 +1561,7 @@ test_minimized_dset_ohdr_fillvalue_backwards_compatability(hid_t _fapl_id)
|
||||
file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_0_id = H5Dcreate(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
dset_0_id = H5Dcreate2(file_id, "fullrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_0_id < 0) TEST_ERROR
|
||||
|
||||
/* Close file and re-open with different libver bounds.
|
||||
@ -1576,7 +1576,7 @@ test_minimized_dset_ohdr_fillvalue_backwards_compatability(hid_t _fapl_id)
|
||||
file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
|
||||
if(file_id < 0) TEST_ERROR
|
||||
|
||||
dset_1_id = H5Dcreate(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
dset_1_id = H5Dcreate2(file_id, "upperrange", dtype_id, dspace_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT);
|
||||
if(dset_1_id < 0) TEST_ERROR
|
||||
|
||||
/* re-open "fullrange" dataset
|
||||
|
@ -13,6 +13,9 @@
|
||||
#
|
||||
# Test to verify that the assertion/abort failure is fixed when the application
|
||||
# does not close the file. (See HDFFV-10160)
|
||||
#
|
||||
# Test to verify that the infinite loop closing library/abort failure is fixed
|
||||
# when the application creates and removes dense attributes (See HDFFV-10659)
|
||||
|
||||
srcdir=@srcdir@
|
||||
|
||||
@ -20,22 +23,44 @@ nerrors=0
|
||||
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
### T H E T E S T ###
|
||||
### T H E T E S T S ###
|
||||
##############################################################################
|
||||
##############################################################################
|
||||
|
||||
#
|
||||
#
|
||||
echo "Testing file not closed assertion/abort failure"
|
||||
TEST_NAME=filenotclosed # The test name
|
||||
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
|
||||
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
|
||||
#
|
||||
# Run the test
|
||||
#$RUNSERIAL $TEST_BIN >/dev/null 2>&1
|
||||
$RUNSERIAL $TEST_BIN 2>&1
|
||||
$RUNSERIAL $TEST_BIN >/dev/null 2>&1
|
||||
exitcode=$?
|
||||
if [ $exitcode -eq 0 ]; then
|
||||
echo "Test PASSED"
|
||||
else
|
||||
echo "Test FAILED"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
echo "***Error encountered***"
|
||||
fi
|
||||
exit $nerrors
|
||||
#
|
||||
#
|
||||
echo "Testing infinite loop closing library/abort failure"
|
||||
TEST_NAME=del_many_dense_attrs # The test name
|
||||
TEST_BIN=`pwd`/$TEST_NAME # The path of the test binary
|
||||
# Run the test
|
||||
$RUNSERIAL $TEST_BIN >/dev/null 2>&1
|
||||
exitcode=$?
|
||||
if [ $exitcode -eq 0 ]; then
|
||||
echo "Test PASSED"
|
||||
else
|
||||
echo "Test FAILED"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
fi
|
||||
#
|
||||
#
|
||||
if test $nerrors -eq 0 ; then
|
||||
echo "All tests for abort failure passed."
|
||||
exit 0
|
||||
else
|
||||
echo "Tests for abort failure failed with $nerrors errors."
|
||||
exit 1
|
||||
fi
|
@ -22,9 +22,9 @@ foreach (testp ${H5P_TESTS})
|
||||
add_test (NAME TEST_PAR_${testp} COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_PREFLAGS} $<TARGET_FILE:${testp}> ${MPIEXEC_POSTFLAGS})
|
||||
endforeach ()
|
||||
|
||||
# The following will only be correct on windows shared
|
||||
#set_tests_properties (TEST_PAR_t_pflush1 PROPERTIES WILL_FAIL "true")
|
||||
set_property (TEST TEST_PAR_t_pflush1 PROPERTY PASS_REGULAR_EXPRESSION "PASSED")
|
||||
# The t_pflush1 test is hard-coded to fail.
|
||||
set_tests_properties (TEST_PAR_t_pflush1 PROPERTIES WILL_FAIL "true")
|
||||
#set_property (TEST TEST_PAR_t_pflush1 PROPERTY PASS_REGULAR_EXPRESSION "PASSED")
|
||||
set_tests_properties (TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1)
|
||||
|
||||
##############################################################################
|
||||
|
@ -15,11 +15,11 @@
|
||||
* Programmer: Leon Arber <larber@uiuc.edu>
|
||||
* Sept. 28, 2006.
|
||||
*
|
||||
* Purpose: This is the first half of a two-part test that makes sure
|
||||
* that a file can be read after a parallel application crashes as long
|
||||
* as the file was flushed first. We simulate a crash by
|
||||
* calling _exit(0) since this doesn't flush HDF5 caches but
|
||||
* still exits with success.
|
||||
* Purpose: This is the first half of a two-part test that makes sure
|
||||
* that a file can be read after a parallel application crashes
|
||||
* as long as the file was flushed first. We simulate a crash by
|
||||
* calling _exit() since this doesn't flush HDF5 caches but
|
||||
* still exits with success.
|
||||
*/
|
||||
#include "h5test.h"
|
||||
|
||||
@ -29,171 +29,190 @@ const char *FILENAME[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static double the_data[100][100];
|
||||
static int data_g[100][100];
|
||||
|
||||
#define N_GROUPS 100
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: create_file
|
||||
* Function: create_test_file
|
||||
*
|
||||
* Purpose: Creates file used in part 1 of the test
|
||||
* Purpose: Creates the file used in part 1 of the test
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Return: Success: A valid file ID
|
||||
* Failure: H5I_INVALID_HID
|
||||
*
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Leon Arber
|
||||
* Programmer: Leon Arber
|
||||
* Sept. 26, 2006
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static hid_t
|
||||
create_file(char* name, hid_t fapl)
|
||||
create_test_file(char *name, hid_t fapl_id)
|
||||
{
|
||||
hid_t file, dcpl, space, dset, groups, grp, plist;
|
||||
hsize_t ds_size[2] = {100, 100};
|
||||
hsize_t ch_size[2] = {5, 5};
|
||||
hsize_t i, j;
|
||||
hid_t fid = H5I_INVALID_HID;
|
||||
hid_t dcpl_id = H5I_INVALID_HID;
|
||||
hid_t sid = H5I_INVALID_HID;
|
||||
hid_t did = H5I_INVALID_HID;
|
||||
hid_t top_level_gid = H5I_INVALID_HID;
|
||||
hid_t gid = H5I_INVALID_HID;
|
||||
hid_t dxpl_id = H5I_INVALID_HID;
|
||||
hsize_t dims[2] = {100, 100};
|
||||
hsize_t chunk_dims[2] = {5, 5};
|
||||
hsize_t i, j;
|
||||
|
||||
|
||||
|
||||
if((file=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) goto error;
|
||||
if((fid = H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
|
||||
goto error;
|
||||
|
||||
/* Create a chunked dataset */
|
||||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
|
||||
if(H5Pset_chunk(dcpl, 2, ch_size) < 0) goto error;
|
||||
if((space = H5Screate_simple(2, ds_size, NULL)) < 0) goto error;
|
||||
if((dset = H5Dcreate2(file, "dset", H5T_NATIVE_FLOAT, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
|
||||
plist = H5Pcreate(H5P_DATASET_XFER);
|
||||
H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE);
|
||||
if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_chunk(dcpl_id, 2, chunk_dims) < 0)
|
||||
goto error;
|
||||
if((sid = H5Screate_simple(2, dims, NULL)) < 0)
|
||||
goto error;
|
||||
if((did = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
|
||||
if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_COLLECTIVE) < 0)
|
||||
goto error;
|
||||
|
||||
/* Write some data */
|
||||
for(i = 0; i < ds_size[0]; i++) {
|
||||
/*
|
||||
* The extra cast in the following statement is a bug workaround
|
||||
* for the Win32 version 5.0 compiler.
|
||||
* 1998-11-06 ptl
|
||||
*/
|
||||
for(j = 0; j < ds_size[1]; j++)
|
||||
the_data[i][j] = (double)(hssize_t)i/(hssize_t)(j+1);
|
||||
}
|
||||
if(H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, plist, the_data) < 0) goto error;
|
||||
for(i = 0; i < dims[0]; i++)
|
||||
for(j = 0; j < dims[1]; j++)
|
||||
data_g[i][j] = (int)(i + (i * j) + j);
|
||||
|
||||
if(H5Dwrite(did, H5T_NATIVE_INT, sid, sid, dxpl_id, data_g) < 0)
|
||||
goto error;
|
||||
|
||||
/* Create some groups */
|
||||
if((groups = H5Gcreate2(file, "some_groups", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
|
||||
for(i = 0; i < 100; i++) {
|
||||
sprintf(name, "grp%02u", (unsigned)i);
|
||||
if((grp = H5Gcreate2(groups, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
|
||||
if(H5Gclose(grp) < 0) goto error;
|
||||
if((top_level_gid = H5Gcreate2(fid, "some_groups", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for(i = 0; i < N_GROUPS; i++) {
|
||||
HDsprintf(name, "grp%02u", (unsigned)i);
|
||||
if((gid = H5Gcreate2(top_level_gid, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if(H5Gclose(gid) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return file;
|
||||
return fid;
|
||||
|
||||
error:
|
||||
HD_exit(1);
|
||||
}
|
||||
return H5I_INVALID_HID;
|
||||
} /* end create_test_file() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose: Part 1 of a two-part H5Fflush() test.
|
||||
* Purpose: Part 1 of a two-part parallel H5Fflush() test.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Return: EXIT_FAILURE (always)
|
||||
*
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, October 23, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Leon Arber
|
||||
* Sept. 26, 2006, expand test to check for failure if H5Fflush is not called.
|
||||
*
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
{
|
||||
hid_t file1, file2, fapl;
|
||||
MPI_File *mpifh_p = NULL;
|
||||
char name[1024];
|
||||
const char *envval = NULL;
|
||||
int mpi_size, mpi_rank;
|
||||
MPI_Comm comm = MPI_COMM_WORLD;
|
||||
MPI_Info info = MPI_INFO_NULL;
|
||||
hid_t fid1 = H5I_INVALID_HID;
|
||||
hid_t fid2 = H5I_INVALID_HID;
|
||||
hid_t fapl_id = H5I_INVALID_HID;
|
||||
MPI_File *mpifh_p = NULL;
|
||||
char name[1024];
|
||||
const char *envval = NULL;
|
||||
int mpi_size;
|
||||
int mpi_rank;
|
||||
MPI_Comm comm = MPI_COMM_WORLD;
|
||||
MPI_Info info = MPI_INFO_NULL;
|
||||
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_size(comm, &mpi_size);
|
||||
MPI_Comm_rank(comm, &mpi_rank);
|
||||
|
||||
fapl = H5Pcreate(H5P_FILE_ACCESS);
|
||||
H5Pset_fapl_mpio(fapl, comm, info);
|
||||
|
||||
if(mpi_rank == 0)
|
||||
TESTING("H5Fflush (part1)");
|
||||
TESTING("H5Fflush (part1)");
|
||||
|
||||
/* Don't run using the split VFD */
|
||||
envval = HDgetenv("HDF5_DRIVER");
|
||||
if(envval == NULL)
|
||||
envval = "nomatch";
|
||||
if(HDstrcmp(envval, "split")) {
|
||||
|
||||
if(!HDstrcmp(envval, "split")) {
|
||||
if(mpi_rank == 0) {
|
||||
SKIPPED();
|
||||
HDputs(" Test not compatible with current Virtual File Driver");
|
||||
}
|
||||
MPI_Finalize();
|
||||
HDexit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_fapl_mpio(fapl_id, comm, info) < 0)
|
||||
goto error;
|
||||
|
||||
/* Create the file */
|
||||
h5_fixname(FILENAME[0], fapl, name, sizeof name);
|
||||
file1 = create_file(name, fapl);
|
||||
h5_fixname(FILENAME[0], fapl_id, name, sizeof(name));
|
||||
if((fid1 = create_test_file(name, fapl_id)) < 0)
|
||||
goto error;
|
||||
/* Flush and exit without closing the library */
|
||||
if(H5Fflush(file1, H5F_SCOPE_GLOBAL) < 0) goto error;
|
||||
if(H5Fflush(fid1, H5F_SCOPE_GLOBAL) < 0)
|
||||
goto error;
|
||||
|
||||
/* Create the other file which will not be flushed */
|
||||
h5_fixname(FILENAME[1], fapl, name, sizeof name);
|
||||
file2 = create_file(name, fapl);
|
||||
|
||||
h5_fixname(FILENAME[1], fapl_id, name, sizeof(name));
|
||||
if((fid2 = create_test_file(name, fapl_id)) < 0)
|
||||
goto error;
|
||||
|
||||
if(mpi_rank == 0)
|
||||
PASSED();
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
} /* end if */
|
||||
else {
|
||||
SKIPPED();
|
||||
puts(" Test not compatible with current Virtual File Driver");
|
||||
} /* end else */
|
||||
|
||||
/*
|
||||
* Some systems like AIX do not like files not closed when MPI_Finalize
|
||||
HDfflush(stdout);
|
||||
HDfflush(stderr);
|
||||
|
||||
/* Some systems like AIX do not like files not being closed when MPI_Finalize
|
||||
* is called. So, we need to get the MPI file handles, close them by hand.
|
||||
* Then the _exit is still needed to stop at_exit from happening in some systems.
|
||||
* Note that MPIO VFD returns the address of the file-handle in the VFD struct
|
||||
* because MPI_File_close wants to modify the file-handle variable.
|
||||
*/
|
||||
|
||||
/* close file1 */
|
||||
if(H5Fget_vfd_handle(file1, fapl, (void **)&mpifh_p) < 0) {
|
||||
printf("H5Fget_vfd_handle for file1 failed\n");
|
||||
goto error;
|
||||
} /* end if */
|
||||
if(MPI_File_close(mpifh_p) != MPI_SUCCESS) {
|
||||
printf("MPI_File_close for file1 failed\n");
|
||||
goto error;
|
||||
} /* end if */
|
||||
/* close file2 */
|
||||
if(H5Fget_vfd_handle(file2, fapl, (void **)&mpifh_p) < 0) {
|
||||
printf("H5Fget_vfd_handle for file2 failed\n");
|
||||
goto error;
|
||||
} /* end if */
|
||||
if(MPI_File_close(mpifh_p) != MPI_SUCCESS) {
|
||||
printf("MPI_File_close for file2 failed\n");
|
||||
goto error;
|
||||
} /* end if */
|
||||
/* Close file 1 */
|
||||
if(H5Fget_vfd_handle(fid1, fapl_id, (void **)&mpifh_p) < 0)
|
||||
goto error;
|
||||
if(MPI_File_close(mpifh_p) != MPI_SUCCESS)
|
||||
goto error;
|
||||
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
HD_exit(0);
|
||||
/* Close file 2 */
|
||||
if(H5Fget_vfd_handle(fid2, fapl_id, (void **)&mpifh_p) < 0)
|
||||
goto error;
|
||||
if(MPI_File_close(mpifh_p) != MPI_SUCCESS)
|
||||
goto error;
|
||||
|
||||
HDfflush(stdout);
|
||||
HDfflush(stderr);
|
||||
|
||||
/* Always exit with a failure code!
|
||||
*
|
||||
* In accordance with the standard, not having all processes
|
||||
* call MPI_Finalize() can be considered an error, so mpiexec
|
||||
* et al. may indicate failure on return. It's much easier to
|
||||
* always ignore the failure condition than to handle some
|
||||
* platforms returning success and others failure.
|
||||
*/
|
||||
HD_exit(EXIT_FAILURE);
|
||||
|
||||
error:
|
||||
fflush(stdout);
|
||||
fflush(stderr);
|
||||
HD_exit(1);
|
||||
}
|
||||
HDfflush(stdout);
|
||||
HDfflush(stderr);
|
||||
HDprintf("*** ERROR ***\n");
|
||||
HDprintf("THERE WAS A REAL ERROR IN t_pflush1.\n");
|
||||
HD_exit(EXIT_FAILURE);
|
||||
} /* end main() */
|
||||
|
||||
|
@ -30,116 +30,124 @@ const char *FILENAME[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
static double the_data[100][100];
|
||||
static int data_g[100][100];
|
||||
|
||||
#define N_GROUPS 100
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: check_file
|
||||
* Function: check_test_file
|
||||
*
|
||||
* Purpose: Part 2 of a two-part H5Fflush() test.
|
||||
* Purpose: Part 2 of a two-part H5Fflush() test.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Return: SUCCEED/FAIL
|
||||
*
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Leon Arber
|
||||
* Programmer: Leon Arber
|
||||
* Sept. 26, 2006.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
check_file(char* name, hid_t fapl)
|
||||
static herr_t
|
||||
check_test_file(char* name, hid_t fapl_id)
|
||||
{
|
||||
hid_t file, space, dset, groups, grp, plist;
|
||||
hsize_t ds_size[2];
|
||||
double error;
|
||||
hsize_t i, j;
|
||||
hid_t fid = H5I_INVALID_HID;
|
||||
hid_t sid = H5I_INVALID_HID;
|
||||
hid_t did = H5I_INVALID_HID;
|
||||
hid_t top_level_gid = H5I_INVALID_HID;
|
||||
hid_t gid = H5I_INVALID_HID;
|
||||
hid_t dxpl_id = H5I_INVALID_HID;
|
||||
hsize_t dims[2];
|
||||
int val;
|
||||
hsize_t i, j;
|
||||
|
||||
plist = H5Pcreate(H5P_DATASET_XFER);
|
||||
H5Pset_dxpl_mpio(plist, H5FD_MPIO_COLLECTIVE);
|
||||
if((file = H5Fopen(name, H5F_ACC_RDONLY, fapl)) < 0) goto error;
|
||||
if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_dxpl_mpio(dxpl_id, H5FD_MPIO_COLLECTIVE) < 0)
|
||||
goto error;
|
||||
if((fid = H5Fopen(name, H5F_ACC_RDONLY, fapl_id)) < 0)
|
||||
goto error;
|
||||
|
||||
/* Open the dataset */
|
||||
if((dset = H5Dopen2(file, "dset", H5P_DEFAULT)) < 0) goto error;
|
||||
if((space = H5Dget_space(dset)) < 0) goto error;
|
||||
if(H5Sget_simple_extent_dims(space, ds_size, NULL) < 0) goto error;
|
||||
assert(100==ds_size[0] && 100==ds_size[1]);
|
||||
if((did = H5Dopen2(fid, "dset", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if((sid = H5Dget_space(did)) < 0)
|
||||
goto error;
|
||||
if(H5Sget_simple_extent_dims(sid, dims, NULL) < 0)
|
||||
goto error;
|
||||
HDassert(100 == dims[0] && 100 == dims[1]);
|
||||
|
||||
/* Read some data */
|
||||
if (H5Dread(dset, H5T_NATIVE_DOUBLE, space, space, plist,
|
||||
the_data) < 0) goto error;
|
||||
for (i=0; i<ds_size[0]; i++) {
|
||||
for (j=0; j<ds_size[1]; j++) {
|
||||
/*
|
||||
* The extra cast in the following statement is a bug workaround
|
||||
* for the Win32 version 5.0 compiler.
|
||||
* 1998-11-06 ptl
|
||||
*/
|
||||
error = fabs(the_data[i][j]-(double)(hssize_t)i/((hssize_t)j+1));
|
||||
if (error>0.0001) {
|
||||
H5_FAILED();
|
||||
printf(" dset[%lu][%lu] = %g\n",
|
||||
(unsigned long)i, (unsigned long)j, the_data[i][j]);
|
||||
printf(" should be %g\n",
|
||||
(double)(hssize_t)i/(hssize_t)(j+1));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if(H5Dread(did, H5T_NATIVE_INT, sid, sid, dxpl_id, data_g) < 0)
|
||||
goto error;
|
||||
for(i = 0; i < dims[0]; i++) {
|
||||
for(j = 0; j < dims[1]; j++) {
|
||||
val = (int)(i + (i * j) + j);
|
||||
if(data_g[i][j] != val) {
|
||||
H5_FAILED();
|
||||
HDprintf(" data_g[%lu][%lu] = %d\n", (unsigned long)i, (unsigned long)j, data_g[i][j]);
|
||||
HDprintf(" should be %d\n", val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Open some groups */
|
||||
if((groups = H5Gopen2(file, "some_groups", H5P_DEFAULT)) < 0) goto error;
|
||||
for(i = 0; i < 100; i++) {
|
||||
sprintf(name, "grp%02u", (unsigned)i);
|
||||
if((grp = H5Gopen2(groups, name, H5P_DEFAULT)) < 0) goto error;
|
||||
if(H5Gclose(grp) < 0) goto error;
|
||||
if((top_level_gid = H5Gopen2(fid, "some_groups", H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
for(i = 0; i < N_GROUPS; i++) {
|
||||
HDsprintf(name, "grp%02u", (unsigned)i);
|
||||
if((gid = H5Gopen2(top_level_gid, name, H5P_DEFAULT)) < 0)
|
||||
goto error;
|
||||
if(H5Gclose(gid) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if(H5Gclose(groups) < 0) goto error;
|
||||
if(H5Dclose(dset) < 0) goto error;
|
||||
if(H5Fclose(file) < 0) goto error;
|
||||
if(H5Pclose(plist) < 0) goto error;
|
||||
if(H5Sclose(space) < 0) goto error;
|
||||
if(H5Gclose(top_level_gid) < 0)
|
||||
goto error;
|
||||
if(H5Dclose(did) < 0)
|
||||
goto error;
|
||||
if(H5Fclose(fid) < 0)
|
||||
goto error;
|
||||
if(H5Pclose(dxpl_id) < 0)
|
||||
goto error;
|
||||
if(H5Sclose(sid) < 0)
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(plist);
|
||||
H5Gclose(groups);
|
||||
H5Dclose(dset);
|
||||
H5Fclose(file);
|
||||
H5Sclose(space);
|
||||
H5Pclose(dxpl_id);
|
||||
H5Gclose(top_level_gid);
|
||||
H5Dclose(did);
|
||||
H5Fclose(fid);
|
||||
H5Sclose(sid);
|
||||
H5Gclose(gid);
|
||||
} H5E_END_TRY;
|
||||
return 1;
|
||||
}
|
||||
return FAIL;
|
||||
} /* end check_test_file() */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
* Function: main
|
||||
*
|
||||
* Purpose: Part 2 of a two-part H5Fflush() test.
|
||||
* Purpose: Part 2 of a two-part H5Fflush() test.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Return: EXIT_SUCCESS/EXIT_FAIL
|
||||
*
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, October 23, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Leon Arber
|
||||
* Sept. 26, 2006, expand to check for case where the was file not flushed.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
hid_t fapl_id1 = H5I_INVALID_HID;
|
||||
hid_t fapl_id2 = H5I_INVALID_HID;
|
||||
H5E_auto2_t func;
|
||||
char name[1024];
|
||||
char name[1024];
|
||||
const char *envval = NULL;
|
||||
|
||||
int mpi_size, mpi_rank;
|
||||
int mpi_size;
|
||||
int mpi_rank;
|
||||
MPI_Comm comm = MPI_COMM_WORLD;
|
||||
MPI_Info info = MPI_INFO_NULL;
|
||||
|
||||
@ -148,69 +156,70 @@ main(int argc, char* argv[])
|
||||
MPI_Comm_rank(comm, &mpi_rank);
|
||||
|
||||
if(mpi_rank == 0)
|
||||
TESTING("H5Fflush (part2 with flush)");
|
||||
TESTING("H5Fflush (part2 with flush)");
|
||||
|
||||
/* Don't run this test using the core or split file drivers */
|
||||
/* Don't run using the split VFD */
|
||||
envval = HDgetenv("HDF5_DRIVER");
|
||||
if (envval == NULL)
|
||||
if(envval == NULL)
|
||||
envval = "nomatch";
|
||||
if (HDstrcmp(envval, "core") && HDstrcmp(envval, "split")) {
|
||||
hid_t fapl1, fapl2;
|
||||
|
||||
fapl1 = H5Pcreate(H5P_FILE_ACCESS);
|
||||
H5Pset_fapl_mpio(fapl1, comm, info);
|
||||
|
||||
fapl2 = H5Pcreate(H5P_FILE_ACCESS);
|
||||
H5Pset_fapl_mpio(fapl2, comm, info);
|
||||
|
||||
/* Check the case where the file was flushed */
|
||||
h5_fixname(FILENAME[0], fapl1, name, sizeof name);
|
||||
if(check_file(name, fapl1))
|
||||
{
|
||||
H5_FAILED()
|
||||
goto error;
|
||||
}
|
||||
else if(mpi_rank == 0)
|
||||
{
|
||||
PASSED()
|
||||
}
|
||||
|
||||
/* Check the case where the file was not flushed. This should give an error
|
||||
* so we turn off the error stack temporarily */
|
||||
if(mpi_rank == 0)
|
||||
TESTING("H5Fflush (part2 without flush)");
|
||||
H5Eget_auto2(H5E_DEFAULT,&func,NULL);
|
||||
H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
|
||||
|
||||
h5_fixname(FILENAME[1], fapl2, name, sizeof name);
|
||||
if(check_file(name, fapl2))
|
||||
{
|
||||
if(mpi_rank == 0)
|
||||
{
|
||||
PASSED()
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
H5_FAILED()
|
||||
goto error;
|
||||
}
|
||||
H5Eset_auto2(H5E_DEFAULT, func, NULL);
|
||||
|
||||
|
||||
h5_clean_files(&FILENAME[0], fapl1);
|
||||
h5_clean_files(&FILENAME[1], fapl2);
|
||||
if(!HDstrcmp(envval, "split")) {
|
||||
if(mpi_rank == 0) {
|
||||
SKIPPED();
|
||||
HDputs(" Test not compatible with current Virtual File Driver");
|
||||
}
|
||||
MPI_Finalize();
|
||||
HDexit(EXIT_FAILURE);
|
||||
}
|
||||
else
|
||||
{
|
||||
SKIPPED();
|
||||
puts(" Test not compatible with current Virtual File Driver");
|
||||
|
||||
if((fapl_id1 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_fapl_mpio(fapl_id1, comm, info) < 0)
|
||||
goto error;
|
||||
|
||||
if((fapl_id2 = H5Pcreate(H5P_FILE_ACCESS)) < 0)
|
||||
goto error;
|
||||
if(H5Pset_fapl_mpio(fapl_id2, comm, info) < 0)
|
||||
goto error;
|
||||
|
||||
/* Check the case where the file was flushed */
|
||||
h5_fixname(FILENAME[0], fapl_id1, name, sizeof(name));
|
||||
if(check_test_file(name, fapl_id1)) {
|
||||
H5_FAILED()
|
||||
goto error;
|
||||
}
|
||||
else if(mpi_rank == 0) {
|
||||
PASSED()
|
||||
}
|
||||
|
||||
/* Check the case where the file was not flushed. This should give an error
|
||||
* so we turn off the error stack temporarily.
|
||||
*/
|
||||
if(mpi_rank == 0)
|
||||
TESTING("H5Fflush (part2 without flush)");
|
||||
H5Eget_auto2(H5E_DEFAULT,&func, NULL);
|
||||
H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
|
||||
|
||||
h5_fixname(FILENAME[1], fapl_id2, name, sizeof(name));
|
||||
if(check_test_file(name, fapl_id2)) {
|
||||
if(mpi_rank == 0)
|
||||
PASSED()
|
||||
}
|
||||
else {
|
||||
H5_FAILED()
|
||||
goto error;
|
||||
}
|
||||
|
||||
H5Eset_auto2(H5E_DEFAULT, func, NULL);
|
||||
|
||||
h5_clean_files(&FILENAME[0], fapl_id1);
|
||||
h5_clean_files(&FILENAME[1], fapl_id2);
|
||||
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
return 1;
|
||||
}
|
||||
HDexit(EXIT_SUCCESS);
|
||||
|
||||
error:
|
||||
HDexit(EXIT_FAILURE);
|
||||
} /* end main() */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user