mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
Merge branch 'develop' into hdf5_1_10_merge
This commit is contained in:
commit
a5d95ec083
@ -143,24 +143,6 @@ install (
|
||||
COMPONENT libraries
|
||||
)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Create pkgconfig files
|
||||
#-----------------------------------------------------------------------------
|
||||
#foreach (libs ${LINK_LIBS})
|
||||
# set (LIBS "${LIBS} -l${libs}")
|
||||
#endforeach ()
|
||||
#foreach (libs ${HDF5_LIBRARIES_TO_EXPORT})
|
||||
# set (HDF5LIBS "${HDF5LIBS} -l${libs}")
|
||||
#endforeach ()
|
||||
#configure_file (
|
||||
# ${HDF_RESOURCES_DIR}/libhdf5.pc.in
|
||||
# ${HDF5_BINARY_DIR}/CMakeFiles/libhdf5.pc @ONLY
|
||||
#)
|
||||
#install (
|
||||
# FILES ${HDF5_BINARY_DIR}/CMakeFiles/libhdf5.pc
|
||||
# DESTINATION ${HDF5_INSTALL_LIB_DIR}/pkgconfig
|
||||
#)
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Configure the HDF518_Examples.cmake file and the examples
|
||||
#-----------------------------------------------------------------------------
|
||||
|
3
MANIFEST
3
MANIFEST
@ -2441,6 +2441,7 @@
|
||||
|
||||
#test files for h5repack
|
||||
./tools/test/h5repack/testfiles/README
|
||||
./tools/test/h5repack/testfiles/bounds_latest_latest.h5
|
||||
./tools/test/h5repack/testfiles/h5repack_aggr.h5
|
||||
./tools/test/h5repack/testfiles/h5repack_attr.h5
|
||||
./tools/test/h5repack/testfiles/h5repack_attr_refs.h5
|
||||
@ -3083,6 +3084,8 @@
|
||||
./config/cmake/HDF5Macros.cmake
|
||||
./config/cmake/HDF5UseFortran.cmake
|
||||
./config/cmake/jrunTest.cmake
|
||||
./config/cmake/libh5cc.in
|
||||
./config/cmake/libhdf5.pc.in
|
||||
./config/cmake/libhdf5.settings.cmake.in
|
||||
./config/cmake/mccacheinit.cmake
|
||||
./config/cmake/patch.xml
|
||||
|
@ -139,3 +139,50 @@ if (HDF5_EXPORTED_TARGETS)
|
||||
INCLUDES DESTINATION include
|
||||
)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Create pkgconfig files
|
||||
#-----------------------------------------------------------------------------
|
||||
set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
|
||||
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
|
||||
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
|
||||
set (_PKG_CONFIG_LIBNAME "${HDF5_CPP_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
|
||||
|
||||
set (_PKG_CONFIG_LIBS_PRIVATE)
|
||||
|
||||
set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${HDF5_CPP_LIB_CORENAME}")
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${HDF5_CPP_LIB_CORENAME}")
|
||||
endif ()
|
||||
|
||||
set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME}")
|
||||
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libhdf5.pc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_CPP_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_CPP_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
DESTINATION ${HDF5_INSTALL_LIB_DIR}/pkgconfig
|
||||
COMPONENT cpplibraries
|
||||
)
|
||||
|
||||
if (NOT WIN32)
|
||||
set (_PKG_CONFIG_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libh5cc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/h5c++
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/h5c++
|
||||
DESTINATION ${HDF5_INSTALL_BIN_DIR}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT cpplibraries
|
||||
)
|
||||
endif ()
|
||||
|
||||
|
32
config/cmake/libh5cc.in
Executable file
32
config/cmake/libh5cc.in
Executable file
@ -0,0 +1,32 @@
|
||||
#! /bin/sh
|
||||
##
|
||||
# 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.
|
||||
##
|
||||
|
||||
prg=$0
|
||||
if [ ! -e "$prg" ]; then
|
||||
case $prg in
|
||||
(*/*) exit 1;;
|
||||
(*) prg=$(command -v -- "$prg") || exit;;
|
||||
esac
|
||||
fi
|
||||
dir=$(
|
||||
cd -P -- "$(dirname -- "$prg")/.." && pwd -P
|
||||
) || exit
|
||||
prg=$dir/$(basename -- "$prg") || exit
|
||||
|
||||
printf '%s\n' "$prg"
|
||||
printf 'dir is %s\n' "$dir"
|
||||
|
||||
export PKG_CONFIG_PATH=$dir/lib/pkgconfig
|
||||
|
||||
@_PKG_CONFIG_COMPILER@ `pkg-config --define-variable=prefix=$dir --cflags --libs @_PKG_CONFIG_LIBNAME@-@_PKG_CONFIG_VERSION@` $@
|
14
config/cmake/libhdf5.pc.in
Executable file
14
config/cmake/libhdf5.pc.in
Executable file
@ -0,0 +1,14 @@
|
||||
prefix=@_PKG_CONFIG_PREFIX@
|
||||
exec_prefix=@_PKG_CONFIG_EXEC_PREFIX@
|
||||
libdir=@_PKG_CONFIG_LIBDIR@
|
||||
includedir=@_PKG_CONFIG_INCLUDEDIR@
|
||||
|
||||
Name: @_PKG_CONFIG_LIBNAME@
|
||||
Description: HDF5 (Hierarchical Data Format 5) Software Library
|
||||
Version: @_PKG_CONFIG_VERSION@
|
||||
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libdir} @_PKG_CONFIG_SH_LIBS@
|
||||
Requires: @_PKG_CONFIG_REQUIRES@
|
||||
Libs.private: @_PKG_CONFIG_LIBS_PRIVATE@ @_PKG_CONFIG_LIBS@
|
||||
Requires.private: @_PKG_CONFIG_REQUIRES_PRIVATE@
|
@ -69,3 +69,50 @@ if (HDF5_EXPORTED_TARGETS)
|
||||
INCLUDES DESTINATION include
|
||||
)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Create pkgconfig files
|
||||
#-----------------------------------------------------------------------------
|
||||
set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
|
||||
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
|
||||
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
|
||||
set (_PKG_CONFIG_LIBNAME "${HDF5_HL_CPP_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
|
||||
|
||||
set (_PKG_CONFIG_LIBS_PRIVATE)
|
||||
|
||||
set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${HDF5_HL_CPP_LIB_CORENAME}")
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${HDF5_HL_CPP_LIB_CORENAME}")
|
||||
endif ()
|
||||
|
||||
set (_PKG_CONFIG_REQUIRES "${HDF5_HL_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_HL_LIB_CORENAME}")
|
||||
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libhdf5.pc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_HL_CPP_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_HL_CPP_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
DESTINATION ${HDF5_INSTALL_LIB_DIR}/pkgconfig
|
||||
COMPONENT hlcpplibraries
|
||||
)
|
||||
|
||||
if (NOT WIN32)
|
||||
set (_PKG_CONFIG_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libh5cc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/h5hlc++
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/h5hlc++
|
||||
DESTINATION ${HDF5_INSTALL_BIN_DIR}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT hlcpplibraries
|
||||
)
|
||||
endif ()
|
||||
|
||||
|
@ -88,3 +88,49 @@ if (HDF5_EXPORTED_TARGETS)
|
||||
INCLUDES DESTINATION include
|
||||
)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Create pkgconfig files
|
||||
#-----------------------------------------------------------------------------
|
||||
set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
|
||||
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
|
||||
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
|
||||
set (_PKG_CONFIG_LIBNAME "${HDF5_HL_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
|
||||
|
||||
set (_PKG_CONFIG_LIBS_PRIVATE)
|
||||
|
||||
set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${HDF5_HL_LIB_CORENAME}")
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${HDF5_HL_LIB_CORENAME}")
|
||||
endif ()
|
||||
|
||||
set (_PKG_CONFIG_REQUIRES "${HDF5_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_REQUIRES_PRIVATE "${HDF5_LIB_CORENAME}")
|
||||
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libhdf5.pc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_HL_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_HL_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
DESTINATION ${HDF5_INSTALL_LIB_DIR}/pkgconfig
|
||||
COMPONENT hllibraries
|
||||
)
|
||||
|
||||
if (NOT WIN32)
|
||||
set (_PKG_CONFIG_COMPILER ${CMAKE_C_COMPILER})
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libh5cc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/h5chl
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/h5chl
|
||||
DESTINATION ${HDF5_INSTALL_BIN_DIR}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT hllibraries
|
||||
)
|
||||
endif ()
|
||||
|
@ -54,6 +54,16 @@ New Features
|
||||
|
||||
Configuration:
|
||||
-------------
|
||||
- CMake
|
||||
|
||||
Add pkg-config file generation
|
||||
|
||||
Added pkg-config file generation for the C, C++, HL, and HL C++ libraries.
|
||||
In addition, builds on linux will create h5cXXX scripts that use the pkg-config
|
||||
files. This is a limited implementation of a script like autotools h5cc.
|
||||
|
||||
(ADB - 2018/03/08, HDFFV-4359)
|
||||
|
||||
- CMake
|
||||
|
||||
Refactor use of CMAKE_BUILD_TYPE for new variable, which understands
|
||||
@ -298,6 +308,12 @@ Bug Fixes since HDF5-1.10.1 release
|
||||
parallel library.
|
||||
(ADB - 2018/03/6, HDFFV-10414)
|
||||
|
||||
- Utility function can not handle lowercase Windows drive letters
|
||||
|
||||
Added call to toupper function for drive letter.
|
||||
|
||||
(ADB - 2017/12/18, HDFFV-10307)
|
||||
|
||||
- filter plugin handling in H5PL.c and H5Z.c
|
||||
|
||||
It was discovered that the dynamic loading process used by
|
||||
|
@ -991,3 +991,51 @@ if (HDF5_EXPORTED_TARGETS)
|
||||
INCLUDES DESTINATION include
|
||||
)
|
||||
endif ()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Create pkgconfig files
|
||||
#-----------------------------------------------------------------------------
|
||||
set (_PKG_CONFIG_PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||
set (_PKG_CONFIG_EXEC_PREFIX \${prefix})
|
||||
set (_PKG_CONFIG_LIBDIR \${exec_prefix}/lib)
|
||||
set (_PKG_CONFIG_INCLUDEDIR \${prefix}/include)
|
||||
set (_PKG_CONFIG_LIBNAME "${HDF5_LIB_CORENAME}")
|
||||
set (_PKG_CONFIG_VERSION "${HDF5_PACKAGE_VERSION}")
|
||||
|
||||
foreach (libs ${LINK_LIBS} ${LINK_COMP_LIBS})
|
||||
set (_PKG_CONFIG_LIBS_PRIVATE "${_PKG_CONFIG_LIBS_PRIVATE} -l${libs}")
|
||||
endforeach ()
|
||||
|
||||
set (_PKG_CONFIG_LIBS "${_PKG_CONFIG_LIBS} -l${HDF5_LIB_CORENAME}")
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set (_PKG_CONFIG_SH_LIBS "${_PKG_CONFIG_SH_LIBS} -l${HDF5_LIB_CORENAME}")
|
||||
endif ()
|
||||
|
||||
set (_PKG_CONFIG_REQUIRES)
|
||||
set (_PKG_CONFIG_REQUIRES_PRIVATE)
|
||||
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libhdf5.pc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/${HDF5_LIB_CORENAME}-${HDF5_PACKAGE_VERSION}.pc
|
||||
DESTINATION ${HDF5_INSTALL_LIB_DIR}/pkgconfig
|
||||
COMPONENT libraries
|
||||
)
|
||||
|
||||
if (NOT WIN32)
|
||||
set (_PKG_CONFIG_COMPILER ${CMAKE_C_COMPILER})
|
||||
configure_file (
|
||||
${HDF_RESOURCES_DIR}/libh5cc.in
|
||||
${HDF5_BINARY_DIR}/CMakeFiles/h5cc
|
||||
@ONLY
|
||||
)
|
||||
install (
|
||||
FILES ${HDF5_BINARY_DIR}/CMakeFiles/h5cc
|
||||
DESTINATION ${HDF5_INSTALL_BIN_DIR}
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||
COMPONENT libraries
|
||||
)
|
||||
endif ()
|
||||
|
@ -740,12 +740,12 @@ H5F_gc_ref(const H5F_t *f)
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5F_get_fc_degree
|
||||
* Function: H5F_get_fc_degree
|
||||
*
|
||||
* Purpose: Retrieve the 'file close degree' for the file.
|
||||
* Purpose: Retrieve the 'file close degree' for the file.
|
||||
*
|
||||
* Return: Success: Non-negative, the 'file close degree'
|
||||
* Failure: (can't happen)
|
||||
* Return: Success: Non-negative, the 'file close degree'
|
||||
* Failure: (can't happen)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5F_close_degree_t
|
||||
|
@ -47,6 +47,8 @@ static herr_t H5O__layout_reset(void *_mesg);
|
||||
static herr_t H5O__layout_free(void *_mesg);
|
||||
static herr_t H5O__layout_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
|
||||
void *_mesg);
|
||||
static herr_t H5O__layout_pre_copy_file(H5F_t *file_src, const void *mesg_src,
|
||||
hbool_t *deleted, const H5O_copy_t *cpy_info, void *udata);
|
||||
static void *H5O__layout_copy_file(H5F_t *file_src, void *mesg_src,
|
||||
H5F_t *file_dst, hbool_t *recompute_size, unsigned *mesg_flags,
|
||||
H5O_copy_t *cpy_info, void *udata, hid_t dxpl_id);
|
||||
@ -69,7 +71,7 @@ const H5O_msg_class_t H5O_MSG_LAYOUT[1] = {{
|
||||
NULL, /* link method */
|
||||
NULL, /* set share method */
|
||||
NULL, /* can share method */
|
||||
NULL, /* pre copy native value to file */
|
||||
H5O__layout_pre_copy_file, /* pre copy native value to file */
|
||||
H5O__layout_copy_file, /* copy native value to file */
|
||||
NULL, /* post copy native value to file */
|
||||
NULL, /* get creation index */
|
||||
@ -99,7 +101,7 @@ H5FL_DEFINE(H5O_layout_t);
|
||||
*/
|
||||
static void *
|
||||
H5O__layout_decode(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, H5O_t H5_ATTR_UNUSED *open_oh,
|
||||
unsigned H5_ATTR_UNUSED mesg_flags, unsigned H5_ATTR_UNUSED *ioflags,
|
||||
unsigned H5_ATTR_UNUSED mesg_flags, unsigned H5_ATTR_UNUSED *ioflags,
|
||||
size_t H5_ATTR_UNUSED p_size, const uint8_t *p)
|
||||
{
|
||||
H5O_layout_t *mesg = NULL;
|
||||
@ -1055,6 +1057,42 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5O__layout_delete() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O__layout_pre_copy_file
|
||||
*
|
||||
* Purpose: Perform any necessary actions before copying message between
|
||||
* files.
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Vailin Choi; Dec 2017
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5O__layout_pre_copy_file(H5F_t H5_ATTR_UNUSED *file_src, const void *mesg_src,
|
||||
hbool_t H5_ATTR_UNUSED *deleted, const H5O_copy_t *cpy_info, void H5_ATTR_UNUSED *udata)
|
||||
{
|
||||
const H5O_layout_t *layout_src = (const H5O_layout_t *)mesg_src; /* Source layout */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT
|
||||
|
||||
/* check args */
|
||||
HDassert(cpy_info);
|
||||
HDassert(cpy_info->file_dst);
|
||||
|
||||
/* Check to ensure that the version of the message to be copied does not exceed
|
||||
the message version allowed by the destination file's high bound */
|
||||
if(layout_src->version > H5O_layout_ver_bounds[H5F_HIGH_BOUND(cpy_info->file_dst)])
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_BADRANGE, FAIL, "layout message version out of bounds")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5O__layout_pre_copy_file() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O__layout_copy_file
|
||||
|
@ -750,10 +750,10 @@ test_compact_io(hid_t fapl)
|
||||
hsize_t dims[2];
|
||||
int wbuf[16][8], rbuf[16][8];
|
||||
char filename[FILENAME_BUF_SIZE];
|
||||
H5F_libver_t low, high; /* File format bounds */
|
||||
H5F_t *fp; /* Internal file pointer */
|
||||
H5D_t *dsetp; /* Internal dataset pointer */
|
||||
int i, j, n;
|
||||
H5F_libver_t low, high; /* File format bounds */
|
||||
H5F_t *fp; /* Internal file pointer */
|
||||
H5D_t *dsetp; /* Internal dataset pointer */
|
||||
int i, j, n; /* Indices */
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
TESTING("compact dataset I/O");
|
||||
|
681
test/dtypes.c
681
test/dtypes.c
@ -18,7 +18,7 @@
|
||||
* Purpose: Tests the datatype interface (H5T)
|
||||
*/
|
||||
|
||||
#include "h5test.h"
|
||||
#include "testhdf5.h"
|
||||
#include "H5srcdir.h"
|
||||
#include "H5Iprivate.h" /* For checking that datatype id's don't leak */
|
||||
|
||||
@ -46,6 +46,16 @@
|
||||
#define H5T_FRIEND /*suppress error about including H5Tpkg */
|
||||
#include "H5Tpkg.h"
|
||||
#endif
|
||||
|
||||
/* Use in version bound test */
|
||||
#define H5F_FRIEND /*suppress error about including H5Fpkg */
|
||||
#define H5F_TESTING
|
||||
#include "H5Fpkg.h" /* File access */
|
||||
|
||||
/* Use in version bound test */
|
||||
#define H5O_FRIEND /*suppress error about including H5Opkg */
|
||||
#include "H5Opkg.h" /* Object headers */
|
||||
|
||||
#define SET_ALIGNMENT(TYPE,VAL) \
|
||||
H5T_NATIVE_##TYPE##_ALIGN_g=MAX(H5T_NATIVE_##TYPE##_ALIGN_g, VAL)
|
||||
|
||||
@ -92,7 +102,15 @@ typedef enum dtype_t {
|
||||
INT_SCHAR, INT_UCHAR, INT_SHORT, INT_USHORT, INT_INT, INT_UINT,
|
||||
INT_LONG, INT_ULONG, INT_LLONG, INT_ULLONG, FLT_FLOAT, FLT_DOUBLE,
|
||||
FLT_LDOUBLE, OTHER
|
||||
} dtype_t;
|
||||
} dtype_t; /* This doesn't seem to be used anywhere... -BMR */
|
||||
|
||||
typedef enum {
|
||||
E1_RED,
|
||||
E1_GREEN,
|
||||
E1_BLUE,
|
||||
E1_ORANGE,
|
||||
E1_YELLOW
|
||||
} color_t;
|
||||
|
||||
/* Constant for size of conversion buffer for int <-> float exception test */
|
||||
#define CONVERT_SIZE 4
|
||||
@ -1678,7 +1696,7 @@ test_compound_9(void)
|
||||
{
|
||||
typedef struct cmpd_struct {
|
||||
int i1;
|
||||
char* str;
|
||||
const char* str;
|
||||
int i2;
|
||||
} cmpd_struct;
|
||||
|
||||
@ -2526,7 +2544,7 @@ test_compound_14(void)
|
||||
typedef struct cmpd_struct_1 {
|
||||
char c1;
|
||||
char c2;
|
||||
char* str;
|
||||
const char* str;
|
||||
} cmpd_struct_1;
|
||||
|
||||
typedef struct cmpd_struct_2 {
|
||||
@ -3299,7 +3317,7 @@ test_compound_18(void)
|
||||
|
||||
/* Create compound datatype, but don't insert fields */
|
||||
tid = H5Tcreate(H5T_COMPOUND, (size_t)8);
|
||||
assert(tid > 0);
|
||||
HDassert(tid > 0);
|
||||
|
||||
/* Attempt to create file with compound datatype that has no fields */
|
||||
/* Create File */
|
||||
@ -3308,7 +3326,7 @@ test_compound_18(void)
|
||||
|
||||
/* Create a dataspace to use */
|
||||
sid = H5Screate_simple(1, &dim, NULL);
|
||||
assert(sid > 0);
|
||||
HDassert(sid > 0);
|
||||
|
||||
/* Create a dataset with the bad compound datatype */
|
||||
H5E_BEGIN_TRY {
|
||||
@ -3321,7 +3339,7 @@ test_compound_18(void)
|
||||
|
||||
/* Create a group */
|
||||
gid = H5Gcreate2(file, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
assert(gid > 0);
|
||||
HDassert(gid > 0);
|
||||
|
||||
/* Create an attribute with the bad compound datatype */
|
||||
H5E_BEGIN_TRY {
|
||||
@ -4672,7 +4690,7 @@ test_conv_enum_2(void)
|
||||
|
||||
/* Destination enum type */
|
||||
dsttype = H5Tenum_create(H5T_NATIVE_INT);
|
||||
assert(H5Tget_size(dsttype) > H5Tget_size(srctype));
|
||||
HDassert(H5Tget_size(dsttype) > H5Tget_size(srctype));
|
||||
for (i=0; i<8; i++)
|
||||
H5Tenum_insert(dsttype, mname[i], &i);
|
||||
|
||||
@ -6682,7 +6700,7 @@ error:
|
||||
} /* end test_named_indirect_reopen() */
|
||||
|
||||
static void create_del_obj_named_test_file(const char *filename, hid_t fapl,
|
||||
hbool_t new_format)
|
||||
H5F_libver_t low, H5F_libver_t high)
|
||||
{
|
||||
hid_t file; /* File ID */
|
||||
hid_t type; /* Datatype ID */
|
||||
@ -6692,93 +6710,97 @@ static void create_del_obj_named_test_file(const char *filename, hid_t fapl,
|
||||
hid_t fcpl; /* File creation property list ID */
|
||||
hid_t my_fapl; /* Copy of file access property list ID */
|
||||
hid_t dcpl; /* Dataset creation property list ID */
|
||||
unsigned use_at_least_v18;/* Whether to use old or new format */
|
||||
herr_t status; /* Generic return value */
|
||||
|
||||
/* Make copy of FAPL */
|
||||
my_fapl = H5Pcopy(fapl);
|
||||
assert(my_fapl > 0);
|
||||
HDassert(my_fapl > 0);
|
||||
|
||||
if(new_format) {
|
||||
/* Use latest version of file format */
|
||||
status = H5Pset_libver_bounds(my_fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
|
||||
assert(status >= 0);
|
||||
} /* end if */
|
||||
/* Use low/high version of file format */
|
||||
status = H5Pset_libver_bounds(my_fapl, low, high);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Set new format flag. Note: the case high < low should be caught in the caller */
|
||||
use_at_least_v18 = 0;
|
||||
if (low >= H5F_LIBVER_V18)
|
||||
use_at_least_v18 = 1;
|
||||
|
||||
/* Create a file creation property list (used for the root group's creation property list) */
|
||||
fcpl = H5Pcreate(H5P_FILE_CREATE);
|
||||
assert(fcpl > 0);
|
||||
HDassert(fcpl > 0);
|
||||
|
||||
if(new_format) {
|
||||
if(use_at_least_v18) {
|
||||
/* Use dense link storage for all links in root group */
|
||||
status = H5Pset_link_phase_change(fcpl, 0, 0);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
} /* end if */
|
||||
|
||||
/* Create file with attribute that uses committed datatype */
|
||||
file = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, my_fapl);
|
||||
assert(file > 0);
|
||||
HDassert(file > 0);
|
||||
|
||||
/* Close FCPL */
|
||||
status = H5Pclose(fcpl);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Close FAPL */
|
||||
status = H5Pclose(my_fapl);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Create datatype to commit */
|
||||
type = H5Tvlen_create(H5T_NATIVE_INT);
|
||||
assert(type > 0);
|
||||
HDassert(type > 0);
|
||||
|
||||
/* Commit datatype */
|
||||
status = H5Tcommit2(file, DEL_OBJ_NAMED_NAMED_DTYPE, type, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Create scalar dataspace */
|
||||
space = H5Screate(H5S_SCALAR);
|
||||
assert(space > 0);
|
||||
HDassert(space > 0);
|
||||
|
||||
/* Create a dataset creation property list */
|
||||
dcpl = H5Pcreate(H5P_DATASET_CREATE);
|
||||
assert(dcpl > 0);
|
||||
HDassert(dcpl > 0);
|
||||
|
||||
if(new_format) {
|
||||
if(use_at_least_v18) {
|
||||
/* Use dense attribute storage for all attributes on dataset */
|
||||
status = H5Pset_attr_phase_change(dcpl, 0, 0);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
} /* end if */
|
||||
|
||||
/* Create dataset */
|
||||
dset = H5Dcreate2(file, DEL_OBJ_NAMED_DATASET, type, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
|
||||
assert(dset > 0);
|
||||
HDassert(dset > 0);
|
||||
|
||||
/* Close DCPL */
|
||||
status = H5Pclose(dcpl);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Close dataset */
|
||||
status = H5Dclose(dset);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Create attribute */
|
||||
attr = H5Acreate_by_name(file, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, type, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
||||
assert(attr > 0);
|
||||
HDassert(attr > 0);
|
||||
|
||||
/* Close dataspace */
|
||||
status = H5Sclose(space);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Close datatype */
|
||||
status = H5Tclose(type);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Close attribute */
|
||||
status = H5Aclose(attr);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
|
||||
/* Close file */
|
||||
status = H5Fclose(file);
|
||||
assert(status >= 0);
|
||||
HDassert(status >= 0);
|
||||
} /* end create_del_obj_named_test_file() */
|
||||
|
||||
|
||||
@ -6803,7 +6825,7 @@ test_delete_obj_named(hid_t fapl)
|
||||
hid_t attr = -1; /* Attribute ID */
|
||||
hid_t dset = -1; /* Dataset ID */
|
||||
hid_t fapl2 = -1; /* File access property list ID */
|
||||
unsigned new_format; /* Whether to use old or new format */
|
||||
H5F_libver_t low, high; /* File format bounds */
|
||||
char filename[1024], filename2[1024];
|
||||
|
||||
TESTING("deleting objects that use named datatypes");
|
||||
@ -6813,47 +6835,54 @@ test_delete_obj_named(hid_t fapl)
|
||||
h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
|
||||
h5_fixname(FILENAME[9], fapl2, filename2, sizeof filename2);
|
||||
|
||||
/* Loop over old & new format files */
|
||||
for(new_format = FALSE; new_format <= TRUE; new_format++) {
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, new_format);
|
||||
/* Loop through all valid the combinations of low/high library format bounds,
|
||||
to test delete objects that use named datatypes through different file IDs */
|
||||
for(low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
|
||||
for(high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
|
||||
|
||||
/* Test deleting dataset opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
/* Skip invalid low/high combination */
|
||||
if ((high == H5F_LIBVER_EARLIEST) || (low > high))
|
||||
continue;
|
||||
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, low, high);
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
/* Test deleting dataset opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Ldelete(filea2, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Ldelete(filea2, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, new_format);
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Test deleting attribute opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, low, high);
|
||||
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
/* Test deleting attribute opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Adelete_by_name(filea2, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
} /* end for */
|
||||
if(H5Adelete_by_name(filea2, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
} /* end high */
|
||||
} /* end low */
|
||||
|
||||
if(H5Pclose(fapl2) < 0) FAIL_STACK_ERROR
|
||||
|
||||
@ -6898,7 +6927,7 @@ test_delete_obj_named_fileid(hid_t fapl)
|
||||
hid_t attr = -1; /* Attribute ID */
|
||||
hid_t dset = -1; /* Dataset ID */
|
||||
hid_t fapl2 = -1; /* File access property list ID */
|
||||
unsigned new_format; /* Whether to use old or new format */
|
||||
H5F_libver_t low, high; /* File format bounds */
|
||||
char filename[1024], filename2[1024];
|
||||
|
||||
TESTING("deleting objects that use named datatypes");
|
||||
@ -6908,108 +6937,115 @@ test_delete_obj_named_fileid(hid_t fapl)
|
||||
h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
|
||||
h5_fixname(FILENAME[9], fapl2, filename2, sizeof filename2);
|
||||
|
||||
/* Loop over old & new format files */
|
||||
for(new_format = FALSE; new_format <= TRUE; new_format++) {
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, new_format);
|
||||
/* Loop through all the combinations of low/high library format bounds */
|
||||
for(low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
|
||||
for(high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
|
||||
|
||||
/* Test getting file ID for dataset opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
/* Skip invalid low/high combination */
|
||||
if ((high == H5F_LIBVER_EARLIEST) || (low > high))
|
||||
continue;
|
||||
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, low, high);
|
||||
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
/* Test getting file ID for dataset opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
dset_fid = H5Iget_file_id(dset);
|
||||
if(dset_fid != filea1) TEST_ERROR
|
||||
H5Fclose(dset_fid);
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Dget_type(dset);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
dset_fid = H5Iget_file_id(dset);
|
||||
if(dset_fid != filea1) TEST_ERROR
|
||||
H5Fclose(dset_fid);
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Dget_type(dset);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
dset_fid = H5Iget_file_id(dset);
|
||||
if(dset_fid != filea1) TEST_ERROR
|
||||
H5Fclose(dset_fid);
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Dget_type(dset);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
dset_fid = H5Iget_file_id(dset);
|
||||
if(dset_fid != filea1) TEST_ERROR
|
||||
H5Fclose(dset_fid);
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Dget_type(dset);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
|
||||
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
|
||||
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, new_format);
|
||||
/* Create test file, with attribute that uses committed datatype */
|
||||
create_del_obj_named_test_file(filename, fapl, low, high);
|
||||
|
||||
/* Test getting file ID for attribute opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
/* Test getting file ID for attribute opened through different file ID */
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
attr_fid = H5Iget_file_id(attr);
|
||||
if(attr_fid != filea1) TEST_ERROR
|
||||
H5Fclose(attr_fid);
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
attr_fid = H5Iget_file_id(attr);
|
||||
if(attr_fid != filea1) TEST_ERROR
|
||||
H5Fclose(attr_fid);
|
||||
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Aget_type(attr);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Aget_type(attr);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
|
||||
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
attr_fid = H5Iget_file_id(attr);
|
||||
if(attr_fid != filea1) TEST_ERROR
|
||||
H5Fclose(attr_fid);
|
||||
/* Verify file ID from dataset matches correct file */
|
||||
attr_fid = H5Iget_file_id(attr);
|
||||
if(attr_fid != filea1) TEST_ERROR
|
||||
H5Fclose(attr_fid);
|
||||
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Aget_type(attr);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
/* Verify file ID from datatype (from dataset) matches correct file */
|
||||
type = H5Aget_type(attr);
|
||||
type_fid = H5Iget_file_id(type);
|
||||
if(type_fid != filea1) TEST_ERROR
|
||||
H5Fclose(type_fid);
|
||||
H5Tclose(type);
|
||||
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
|
||||
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
} /* end for */
|
||||
if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
|
||||
if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
|
||||
} /* end high */
|
||||
} /* end low */
|
||||
|
||||
if(H5Pclose(fapl2) < 0) FAIL_STACK_ERROR
|
||||
|
||||
@ -7018,12 +7054,15 @@ test_delete_obj_named_fileid(hid_t fapl)
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Tclose(attr);
|
||||
H5Aclose(attr);
|
||||
H5Tclose(type);
|
||||
H5Dclose(dset);
|
||||
H5Pclose(fapl2);
|
||||
H5Fclose(filea1);
|
||||
H5Fclose(filea2);
|
||||
H5Fclose(fileb);
|
||||
H5Fclose(attr_fid);
|
||||
H5Fclose(type_fid);
|
||||
} H5E_END_TRY;
|
||||
return 1;
|
||||
} /* end test_delete_obj_named_fileid() */
|
||||
@ -7388,7 +7427,369 @@ error:
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: verify_version
|
||||
*
|
||||
* Purpose: Utility function to verify the datatype versions of nested
|
||||
* datatype.
|
||||
*
|
||||
* Description:
|
||||
* Verify the datatype message version
|
||||
* --H5T_COMPOUND, H5T_ENUM, H5T_ARRAY:
|
||||
* the library will set version according to low_bound
|
||||
* --H5T_ARRAY:
|
||||
* the earliest version the library will set is 2
|
||||
* --H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING, H5T_BITFIELD,
|
||||
* H5T_OPAQUE, H5T_REFERENCE:
|
||||
* the library will only use basic version
|
||||
*
|
||||
*************************************************************************/
|
||||
static herr_t verify_version(hid_t dtype, H5F_libver_t low, unsigned *highest_version)
|
||||
{
|
||||
hid_t base_dtype = -1;
|
||||
hid_t mem_dtype = -1;
|
||||
H5T_t *dtypep = NULL; /* Internal structure of a datatype */
|
||||
H5T_class_t type_cls = H5T_NO_CLASS; /* Temporary var for datatype class */
|
||||
int nmembers = 0;
|
||||
unsigned i;
|
||||
herr_t ret = SUCCEED; /* Generic return value */
|
||||
|
||||
dtypep = (H5T_t *)H5I_object(dtype);
|
||||
if (dtypep == NULL) TEST_ERROR
|
||||
|
||||
/* Carry out the verification according to the class of the datatype.
|
||||
For compound datatype, its members will be verified, recursively.
|
||||
For array datatype, its element datatype will be verified, recursively.*/
|
||||
type_cls = dtypep->shared->type;
|
||||
switch (type_cls)
|
||||
{
|
||||
case H5T_ARRAY:
|
||||
{
|
||||
H5T_t *base_dtypep = NULL; /* Internal structure of a datatype */
|
||||
|
||||
if (low == H5F_LIBVER_EARLIEST)
|
||||
VERIFY(dtypep->shared->version, H5O_DTYPE_VERSION_2, "H5O_dtype_ver_bounds");
|
||||
else
|
||||
VERIFY(dtypep->shared->version, H5O_dtype_ver_bounds[low], "H5O_dtype_ver_bounds");
|
||||
|
||||
/* Get the base datatype of this array type */
|
||||
base_dtype = H5Tget_super(dtype);
|
||||
CHECK(base_dtype, FAIL, "H5Tget_super");
|
||||
|
||||
/* Get the base type's internal structure for version */
|
||||
base_dtypep = (H5T_t *)H5I_object(base_dtype);
|
||||
if (base_dtypep == NULL) TEST_ERROR
|
||||
|
||||
/* Reset highest version if this datatype has higher version than
|
||||
its outer type */
|
||||
if (*highest_version < base_dtypep->shared->version)
|
||||
*highest_version = base_dtypep->shared->version;
|
||||
|
||||
/* Verify the base datatype recursively */
|
||||
ret = verify_version(base_dtype, low, highest_version);
|
||||
|
||||
/* Close the member datatype before checking for failure */
|
||||
if ((H5Tclose(base_dtype)) < 0) TEST_ERROR
|
||||
|
||||
/* Check if verify_version fails */
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
break;
|
||||
}
|
||||
case H5T_COMPOUND:
|
||||
{
|
||||
H5T_t *mem_dtypep = NULL; /* Internal structure of a datatype */
|
||||
/* Get the number of members of this compound type */
|
||||
if ((nmembers = H5Tget_nmembers(dtype)) < 0) TEST_ERROR
|
||||
|
||||
/* Go through all its member datatypes */
|
||||
for (i = 0; i < (unsigned)nmembers; i++)
|
||||
{
|
||||
/* Get the member datatype to verify it recursively */
|
||||
mem_dtype = H5Tget_member_type(dtype, i);
|
||||
if (mem_dtype < 0) TEST_ERROR
|
||||
|
||||
/* Get the member type's internal structure for version */
|
||||
mem_dtypep = (H5T_t *)H5I_object(mem_dtype);
|
||||
if (mem_dtypep == NULL) TEST_ERROR
|
||||
|
||||
/* Reset highest version if this datatype has higher version than
|
||||
its outer type */
|
||||
if (*highest_version < mem_dtypep->shared->version)
|
||||
*highest_version = mem_dtypep->shared->version;
|
||||
|
||||
/* Verify the datatype recursively */
|
||||
ret = verify_version(mem_dtype, low, highest_version);
|
||||
|
||||
/* Close the member datatype before checking for failure */
|
||||
if ((H5Tclose(mem_dtype)) < 0) TEST_ERROR
|
||||
|
||||
/* Check if verify_version fails */
|
||||
if (ret < 0) TEST_ERROR
|
||||
}
|
||||
/* If this compound datatype contains a datatype of higher version, it
|
||||
will be promoted to that version, thus, verify with highest version */
|
||||
if (*highest_version > H5O_dtype_ver_bounds[low])
|
||||
VERIFY(dtypep->shared->version, *highest_version, "verify_version");
|
||||
else
|
||||
VERIFY(dtypep->shared->version, H5O_dtype_ver_bounds[low], "verify_version");
|
||||
break;
|
||||
}
|
||||
case H5T_ENUM:
|
||||
VERIFY(dtypep->shared->version, H5O_dtype_ver_bounds[low], "verify_version");
|
||||
break;
|
||||
case H5T_VLEN:
|
||||
case H5T_FLOAT:
|
||||
case H5T_INTEGER:
|
||||
VERIFY(dtypep->shared->version, H5O_dtype_ver_bounds[H5F_LIBVER_EARLIEST], "verify_version");
|
||||
break;
|
||||
case H5T_NCLASSES:
|
||||
case H5T_NO_CLASS:
|
||||
case H5T_TIME:
|
||||
case H5T_STRING:
|
||||
case H5T_BITFIELD:
|
||||
case H5T_OPAQUE:
|
||||
case H5T_REFERENCE:
|
||||
default:
|
||||
TEST_ERROR
|
||||
} /* end switch */
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Tclose(base_dtype);
|
||||
H5Tclose(mem_dtype);
|
||||
} H5E_END_TRY;
|
||||
return ret;
|
||||
} /* end of verify_version */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_versionbounds
|
||||
*
|
||||
* Purpose: Tests version bounds.
|
||||
*
|
||||
* Description:
|
||||
* This function creates a datatype for a dataset as followed:
|
||||
* outer_arr_type
|
||||
* outer_cmp_type
|
||||
* inner_cmp_type
|
||||
* inner_arr_type
|
||||
* simple_cmp_type
|
||||
* H5T_NATIVE_INT
|
||||
* H5T_ARRAY of H5T_NATIVE_CHAR
|
||||
* vlen_floattype
|
||||
* enum_type
|
||||
* It then loops through all valid combination of the library version
|
||||
* bounds to verify each datatype's version.
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: number of errors
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#define VERFNAME "tverbounds_dtype.h5"
|
||||
#define VERDSNAME "dataset 1"
|
||||
#define ARRAY_RANK 1
|
||||
#define ARRAY_LEN 10
|
||||
static int
|
||||
test_versionbounds(void)
|
||||
{
|
||||
typedef struct { /* Struct for the simple compound type */
|
||||
int single_int;
|
||||
char char_arr[ARRAY_LEN];
|
||||
} simple_cmp_t;
|
||||
|
||||
typedef struct { /* Struct for the inner compound type */
|
||||
simple_cmp_t inner_arr[ARRAY_LEN];
|
||||
hvl_t vlen_float;
|
||||
} inner_cmp_t;
|
||||
|
||||
typedef struct { /* Struct for the outer compound type */
|
||||
inner_cmp_t inner_cmp;
|
||||
color_t enum_color;
|
||||
} outer_cmp_t;
|
||||
|
||||
hid_t file = -1; /* File ID */
|
||||
hid_t space = -1; /* Dataspace ID */
|
||||
hid_t dset = -1; /* Dataset ID */
|
||||
hid_t fcpl = -1; /* File creation property list ID */
|
||||
hid_t fapl = -1; /* Copy of file access property list ID */
|
||||
hid_t dcpl = -1; /* Dataset creation property list ID */
|
||||
hid_t dset_dtype = -1; /* Dataset's datatype */
|
||||
hid_t arr_chartype = -1; /* Array of characters datatype */
|
||||
hid_t vlen_floattype = -1; /* Vlen of float datatype */
|
||||
hid_t enum_type = -1; /* Enumeration datatype */
|
||||
hid_t outer_cmp_type = -1; /* Outer compound datatype */
|
||||
hid_t inner_cmp_type = -1; /* Inner compound datatype */
|
||||
hid_t simple_cmp_type = -1;/* Simple cmpd dtype, contains no other cmpd */
|
||||
hid_t outer_arr_type = -1; /* Outermost array datatype */
|
||||
hid_t inner_arr_type = -1; /* Inner array datatype */
|
||||
H5F_t *filep = NULL; /* Pointer to internal structure of a file */
|
||||
H5T_t *dtypep = NULL; /* Pointer to internal structure of a datatype */
|
||||
hsize_t arr_dim[] = {ARRAY_LEN}; /* Length of the array */
|
||||
H5F_libver_t low, high; /* File format bounds */
|
||||
unsigned highest_version; /* Highest version in nested datatypes */
|
||||
color_t enum_val; /* Enum type index */
|
||||
herr_t ret = 0; /* Generic return value */
|
||||
|
||||
TESTING("version bounds with nested datatypes");
|
||||
|
||||
/* Create a file access property list */
|
||||
if ((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) TEST_ERROR
|
||||
|
||||
/* Create a file creation property list */
|
||||
if ((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) TEST_ERROR
|
||||
|
||||
/* Create a scalar dataspace */
|
||||
if ((space = H5Screate(H5S_SCALAR)) < 0) TEST_ERROR
|
||||
|
||||
/* Create a dataset creation property list */
|
||||
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR
|
||||
|
||||
/* Create an array datatype of chars */
|
||||
arr_chartype = H5Tarray_create2(H5T_NATIVE_CHAR, ARRAY_RANK, arr_dim);
|
||||
if (arr_chartype < 0) TEST_ERROR
|
||||
|
||||
/* Create the simple compound datatype that has an integer and an
|
||||
array of chars */
|
||||
simple_cmp_type = H5Tcreate(H5T_COMPOUND, sizeof(simple_cmp_t));
|
||||
if (simple_cmp_type < 0) TEST_ERROR
|
||||
|
||||
/* Insert integer field */
|
||||
ret = H5Tinsert(simple_cmp_type, "single_int", HOFFSET(simple_cmp_t, single_int), H5T_NATIVE_INT);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Insert array field */
|
||||
ret = H5Tinsert(simple_cmp_type, "char_arr", HOFFSET(simple_cmp_t, char_arr), arr_chartype);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Create an array datatype containing simple compound datatype */
|
||||
inner_arr_type = H5Tarray_create2(simple_cmp_type, ARRAY_RANK, arr_dim);
|
||||
if (inner_arr_type < 0) TEST_ERROR
|
||||
|
||||
/* Create a VL datatype of floats */
|
||||
vlen_floattype = H5Tvlen_create(H5T_NATIVE_FLOAT);
|
||||
if (vlen_floattype < 0) TEST_ERROR
|
||||
|
||||
/* Create the innermost compound datatype that houses inner_arr_type and vlen_floattype */
|
||||
inner_cmp_type = H5Tcreate(H5T_COMPOUND, sizeof(inner_cmp_t));
|
||||
if (inner_cmp_type < 0) TEST_ERROR
|
||||
|
||||
/* Insert integer field */
|
||||
ret = H5Tinsert(inner_cmp_type, "inner_arr", HOFFSET(inner_cmp_t, inner_arr), inner_arr_type);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Insert integer field */
|
||||
ret = H5Tinsert(inner_cmp_type, "vlen_float", HOFFSET(inner_cmp_t, vlen_float), vlen_floattype);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Create a enumerate datatype */
|
||||
enum_type = H5Tcreate(H5T_ENUM, sizeof(color_t));
|
||||
if (enum_type < 0) TEST_ERROR
|
||||
|
||||
enum_val = E1_RED;
|
||||
ret = H5Tenum_insert(enum_type, "RED", &enum_val);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
enum_val++;
|
||||
ret = H5Tenum_insert(enum_type, "GREEN", &enum_val);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
enum_val++;
|
||||
ret = H5Tenum_insert(enum_type, "BLUE", &enum_val);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
enum_val++;
|
||||
ret = H5Tenum_insert(enum_type, "ORANGE", &enum_val);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
enum_val++;
|
||||
ret = H5Tenum_insert(enum_type, "YELLOW", &enum_val);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Create the outer compound datatype that contains the inner compound datatype and the enum datatype */
|
||||
outer_cmp_type = H5Tcreate(H5T_COMPOUND, sizeof(outer_cmp_t));
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Insert integer field */
|
||||
ret = H5Tinsert(outer_cmp_type, "inner_cmp", HOFFSET(outer_cmp_t, inner_cmp), inner_cmp_type);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Insert enum field */
|
||||
ret = H5Tinsert(outer_cmp_type, "enum_color", HOFFSET(outer_cmp_t, enum_color), enum_type);
|
||||
if (ret < 0) TEST_ERROR
|
||||
|
||||
/* Create an array datatype containing the outer compound datatype */
|
||||
if ((outer_arr_type = H5Tarray_create2(outer_cmp_type, ARRAY_RANK, arr_dim)) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Loop through all the combinations of low/high library format bounds,
|
||||
skipping invalid combinations */
|
||||
/* Create the file, create and write to a dataset with compound datatype */
|
||||
/* Verify the dataset's datatype and its members */
|
||||
for(low = H5F_LIBVER_EARLIEST; low < H5F_LIBVER_NBOUNDS; low++) {
|
||||
for(high = H5F_LIBVER_EARLIEST; high < H5F_LIBVER_NBOUNDS; high++) {
|
||||
|
||||
/* Set version bounds */
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Pset_libver_bounds(fapl, low, high);
|
||||
} H5E_END_TRY;
|
||||
|
||||
if (ret < 0) /* Invalid low/high combinations */
|
||||
continue;
|
||||
|
||||
/* Create a file */
|
||||
file = H5Fcreate(VERFNAME, H5F_ACC_TRUNC, fcpl, fapl);
|
||||
if (file < 0) TEST_ERROR
|
||||
|
||||
/* Get the internal file pointer if the create succeeds */
|
||||
if ((filep = (H5F_t *)H5I_object(file)) == NULL) TEST_ERROR
|
||||
|
||||
/* Create dataset using the array type */
|
||||
dset = H5Dcreate2(file, VERDSNAME, outer_arr_type, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
|
||||
if (dset < 0) TEST_ERROR
|
||||
|
||||
/* Get the dataset's datatype */
|
||||
if ((dset_dtype = H5Dget_type(dset)) < 0) TEST_ERROR
|
||||
|
||||
/* Get the version of this datatype */
|
||||
dtypep = (H5T_t *)H5I_object(dset_dtype);
|
||||
if (dtypep == NULL) TEST_ERROR
|
||||
highest_version = dtypep->shared->version;
|
||||
|
||||
/* Verify version of the datatype recursevily */
|
||||
ret = verify_version(dset_dtype, low, &highest_version);
|
||||
|
||||
/* Close the dataset's datatype */
|
||||
if (H5Tclose(dset_dtype) < 0) TEST_ERROR
|
||||
|
||||
/* Close dataset and file */
|
||||
if (H5Dclose(dset) < 0) TEST_ERROR
|
||||
if (H5Fclose(file) < 0) TEST_ERROR
|
||||
|
||||
} /* for high */
|
||||
} /* for low */
|
||||
|
||||
/* Close dataspace and property lists */
|
||||
if (H5Sclose(space) < 0) TEST_ERROR
|
||||
if (H5Pclose(fcpl) < 0) TEST_ERROR
|
||||
if (H5Pclose(fapl) < 0) TEST_ERROR
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Dclose(dset);
|
||||
H5Sclose(space);
|
||||
H5Tclose(dset_dtype);
|
||||
H5Pclose(dcpl);
|
||||
H5Pclose(fcpl);
|
||||
H5Pclose(fapl);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
return 1;
|
||||
} /* end test_versionbounds() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -7411,7 +7812,7 @@ int
|
||||
main(void)
|
||||
{
|
||||
long nerrors = 0;
|
||||
hid_t fapl = -1;
|
||||
hid_t fapl = -1;
|
||||
|
||||
/* Set the random # seed */
|
||||
HDsrandom((unsigned)HDtime(NULL));
|
||||
@ -7428,7 +7829,6 @@ main(void)
|
||||
nerrors += test_detect();
|
||||
nerrors += test_compound_1();
|
||||
nerrors += test_query();
|
||||
|
||||
nerrors += test_transient(fapl);
|
||||
nerrors += test_named(fapl);
|
||||
nerrors += test_encode();
|
||||
@ -7473,6 +7873,7 @@ main(void)
|
||||
nerrors += test_opaque();
|
||||
nerrors += test_set_order();
|
||||
nerrors += test_utf_ascii_conv();
|
||||
nerrors += test_versionbounds();
|
||||
|
||||
if(nerrors) {
|
||||
printf("***** %lu FAILURE%s! *****\n",
|
||||
|
@ -14271,10 +14271,10 @@ main(void)
|
||||
FALSE, "H5Ocopy(): expand soft link");
|
||||
nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
|
||||
H5O_COPY_EXPAND_EXT_LINK_FLAG,
|
||||
FALSE, "H5Ocopy: expand external link");
|
||||
FALSE, "H5Ocopy(): expand external link");
|
||||
nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
|
||||
H5O_COPY_EXPAND_SOFT_LINK_FLAG | H5O_COPY_EXPAND_EXT_LINK_FLAG,
|
||||
FALSE, "H5Ocopy: expand soft and external links");
|
||||
FALSE, "H5Ocopy(): expand soft and external links");
|
||||
nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
|
||||
H5O_COPY_SHALLOW_HIERARCHY_FLAG,
|
||||
FALSE, "H5Ocopy(): shallow group copy");
|
||||
|
17
test/th5s.c
17
test/th5s.c
@ -42,9 +42,24 @@
|
||||
#include "H5Opkg.h" /* Object header */
|
||||
|
||||
#include "H5Bprivate.h"
|
||||
#include "H5Sprivate.h"
|
||||
#include "H5Iprivate.h"
|
||||
#include "H5Pprivate.h"
|
||||
|
||||
/*
|
||||
* This file needs to access private information from the H5S package.
|
||||
* This file also needs to access the dataspace testing code.
|
||||
*/
|
||||
#define H5S_FRIEND /*suppress error about including H5Spkg */
|
||||
#include "H5Spkg.h" /* Dataspaces */
|
||||
|
||||
/*
|
||||
* This file needs to access private information from the H5O package.
|
||||
* This file also needs to access the dataspace testing code.
|
||||
*/
|
||||
#define H5O_FRIEND /*suppress error about including H5Opkg */
|
||||
#define H5O_TESTING
|
||||
#include "H5Opkg.h" /* Object header */
|
||||
|
||||
#define TESTFILE "th5s.h5"
|
||||
#define DATAFILE "th5s1.h5"
|
||||
#define NULLFILE "th5s2.h5"
|
||||
|
@ -53,6 +53,7 @@
|
||||
# Copy all the HDF5 files from the source directory into the test directory
|
||||
# --------------------------------------------------------------------
|
||||
set (LIST_HDF5_TEST_FILES
|
||||
${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/bounds_latest_latest.h5
|
||||
${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr.h5
|
||||
${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_attr_refs.h5
|
||||
${HDF5_TOOLS_TEST_H5REPACK_SOURCE_DIR}/testfiles/h5repack_deflate.h5
|
||||
@ -582,6 +583,62 @@
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
# VERIFY_SUPERBLOCK
|
||||
macro (ADD_H5_VERIFY_SUPERBLOCK testname testfile lowbound highbound superblock)
|
||||
if (NOT HDF5_ENABLE_USING_MEMCHECKER)
|
||||
add_test (
|
||||
NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-E remove
|
||||
testfiles/out-${testname}.${testfile}
|
||||
testfiles/${testfile}-${testname}-v.out
|
||||
testfiles/${testfile}-${testname}-v.out.err
|
||||
)
|
||||
if (NOT "${last_test}" STREQUAL "")
|
||||
set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
|
||||
endif ()
|
||||
add_test (
|
||||
NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}
|
||||
COMMAND $<TARGET_FILE:h5repack> -j;${lowbound};-k;${highbound} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
|
||||
)
|
||||
set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname} PROPERTIES DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname}-clear-objects)
|
||||
add_test (
|
||||
NAME H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
|
||||
-D "TEST_ARGS:STRING=-H;-B;out-${testname}.${testfile}"
|
||||
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
|
||||
-D "TEST_OUTPUT=${testfile}-${testname}-v.out"
|
||||
-D "TEST_EXPECT=${resultcode}"
|
||||
-D "TEST_FILTER:STRING=SUPERBLOCK_VERSION ${superblock}"
|
||||
-D "TEST_REFERENCE=SUPERBLOCK_VERSION ${superblock}"
|
||||
-P "${HDF_RESOURCES_EXT_DIR}/grepTest.cmake"
|
||||
)
|
||||
set_tests_properties (H5REPACK_VERIFY_SUPERBLOCK-${testname}_DMP PROPERTIES DEPENDS H5REPACK_VERIFY_SUPERBLOCK-${testname})
|
||||
endif ()
|
||||
endmacro ()
|
||||
|
||||
macro (ADD_H5_VERIFY_INVALIDBOUNDS testname resultcode lowbound highbound)
|
||||
add_test (
|
||||
NAME ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-E remove
|
||||
testfiles/out-${testname}.${testfile}
|
||||
)
|
||||
if (NOT "${last_test}" STREQUAL "")
|
||||
set_tests_properties (ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
|
||||
endif ()
|
||||
add_test (
|
||||
NAME ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}
|
||||
COMMAND $<TARGET_FILE:h5repack> -j;${lowbound};-k;${highbound} ${PROJECT_BINARY_DIR}/testfiles/${testfile} ${PROJECT_BINARY_DIR}/testfiles/out-${testname}.${testfile}
|
||||
)
|
||||
set_tests_properties (
|
||||
ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname} PROPERTIES
|
||||
DEPENDS ADD_H5_VERIFY_INVALIDBOUNDS-h5repack-${testname}-clear-objects
|
||||
WILL_FAIL "true"
|
||||
)
|
||||
endmacro ()
|
||||
|
||||
macro (ADD_H5_TEST_META testname testfile)
|
||||
# Remove any output file left over from previous test run
|
||||
add_test (
|
||||
@ -1370,6 +1427,18 @@
|
||||
endif ()
|
||||
ADD_H5_VERIFY_VDS (vds_conti ${TESTTYPE} 0 ${FILEV4} vds_dset CONTIGUOUS -l vds_dset:CONTI)
|
||||
|
||||
##############################################################################
|
||||
### V E R S I O N B O U N D S T E S T S
|
||||
##############################################################################
|
||||
# -j 0 -k 2, superblock will be 0
|
||||
ADD_H5_VERIFY_SUPERBLOCK (SB_IS_0 h5repack_layout.h5 0 2 0)
|
||||
# -j 1 -k 2, superblock will be 2
|
||||
ADD_H5_VERIFY_SUPERBLOCK (SB_IS_2 h5repack_layout.h5 1 2 2)
|
||||
# -j 2 -k 2, superblock will be 3
|
||||
ADD_H5_VERIFY_SUPERBLOCK (SB_IS_3 h5repack_layout.h5 2 2 3)
|
||||
# -j 0 -k 1, file cannot be opened
|
||||
ADD_H5_VERIFY_INVALIDBOUNDS (latest_latest_invalid bounds_latest_latest.h5 0 1)
|
||||
|
||||
##############################################################################
|
||||
### P L U G I N T E S T S
|
||||
##############################################################################
|
||||
|
@ -82,6 +82,7 @@ test -d $TESTDIR || mkdir $TESTDIR
|
||||
# Comment '#' without space can be used.
|
||||
# --------------------------------------------------------------------
|
||||
LIST_HDF5_TEST_FILES="
|
||||
$SRC_H5REPACK_TESTFILES/bounds_latest_latest.h5
|
||||
$SRC_H5REPACK_TESTFILES/h5repack_attr.h5
|
||||
$SRC_H5REPACK_TESTFILES/h5repack_attr_refs.h5
|
||||
$SRC_H5REPACK_TESTFILES/h5repack_deflate.h5
|
||||
@ -340,8 +341,8 @@ VERIFY_LAYOUT_DSET()
|
||||
fi
|
||||
|
||||
# clean up tmp files
|
||||
rm -f $outfile
|
||||
rm -f $layoutfile
|
||||
# rm -f $outfile
|
||||
# rm -f $layoutfile
|
||||
}
|
||||
|
||||
#------------------------------------------
|
||||
@ -513,6 +514,87 @@ VERIFY_LAYOUT_ALL()
|
||||
rm -f $layoutfile
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------
|
||||
# Verifying superblock of a file with different version bounds
|
||||
VERIFY_SUPERBLOCK()
|
||||
{
|
||||
lowbound=$1
|
||||
highbound=$2
|
||||
superblock=$3
|
||||
infile=$4
|
||||
layoutfile=verbounds-low$lowbound-high$highbound.$4
|
||||
outfile=out-verbounds-low$lowbound-high$highbound.$infile
|
||||
expectedsuperblock="SUPERBLOCK_VERSION $superblock"
|
||||
|
||||
shift
|
||||
shift
|
||||
shift
|
||||
shift
|
||||
|
||||
TESTING $H5REPACK $@
|
||||
(
|
||||
cd $TESTDIR
|
||||
$RUNSERIAL $H5REPACK_BIN -j $lowbound -k $highbound $infile $outfile
|
||||
)
|
||||
RET=$?
|
||||
if [ $RET != 0 ] ; then
|
||||
echo "*FAILED*"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
else
|
||||
echo " PASSED"
|
||||
DIFFTEST $infile $outfile
|
||||
fi
|
||||
|
||||
#---------------------------------
|
||||
# check the layout from a dataset
|
||||
VERIFY "superblock"
|
||||
(
|
||||
cd $TESTDIR
|
||||
$RUNSERIAL $H5DUMP_BIN -H -B $outfile > $layoutfile
|
||||
)
|
||||
$GREP "$expectedsuperblock" $TESTDIR/$layoutfile > /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " PASSED"
|
||||
else
|
||||
echo " FAILED"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
fi
|
||||
|
||||
# clean up tmp files
|
||||
rm -f $outfile
|
||||
rm -f $layoutfile
|
||||
|
||||
} # end of VERIFY_SUPERBLOCK
|
||||
|
||||
#------------------------------------------------------------------
|
||||
# Verifying that a latest file cannot be opened with earlier bounds
|
||||
VERIFY_INVALIDBOUNDS()
|
||||
{
|
||||
lowbound=$1
|
||||
highbound=$2
|
||||
infile=$3
|
||||
outfile=out-verbounds-low$lowbound-high$highbound.$infile
|
||||
|
||||
#--------------------------------------
|
||||
# check for failure with invalid bounds
|
||||
TESTING $H5REPACK $@
|
||||
(
|
||||
cd $TESTDIR
|
||||
$RUNSERIAL $H5REPACK_BIN -j $lowbound -k $highbound $infile $outfile
|
||||
)
|
||||
RET=$?
|
||||
if [ $RET != 0 ] ; then
|
||||
echo " PASSED"
|
||||
else
|
||||
echo "*FAILED*"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
fi
|
||||
|
||||
# clean up tmp files
|
||||
rm -f $outfile
|
||||
|
||||
} # end of VERIFY_INVALIDBOUNDS
|
||||
|
||||
# same as TOOLTEST, but it uses the old syntax -i input_file -o output_file
|
||||
#
|
||||
TOOLTEST0()
|
||||
@ -1365,6 +1447,18 @@ else
|
||||
VERIFY_LAYOUT_VDS vds_conti 4_vds.h5 vds_dset CONTIGUOUS -l vds_dset:CONTI
|
||||
fi
|
||||
|
||||
#########################################################
|
||||
# Testing version bounds
|
||||
#########################################################
|
||||
# -j 0 -k 2, superblock will be 0
|
||||
VERIFY_SUPERBLOCK 0 2 0 h5repack_layout.h5 -j 0 -k 2 h5repack_layout.h5
|
||||
# -j 1 -k 2, superblock will be 2
|
||||
VERIFY_SUPERBLOCK 1 2 2 h5repack_layout.h5 -j 1 -k 2 h5repack_layout.h5
|
||||
# -j 2 -k 2, superblock will be 3
|
||||
VERIFY_SUPERBLOCK 2 2 3 h5repack_layout.h5 -j 2 -k 2 h5repack_layout.h5
|
||||
# -j 0 -k 1, file cannot be opened
|
||||
VERIFY_INVALIDBOUNDS 0 1 bounds_latest_latest.h5
|
||||
|
||||
# Clean up temporary files/directories
|
||||
CLEAN_TESTFILES_AND_TESTDIR
|
||||
|
||||
|
BIN
tools/test/h5repack/testfiles/bounds_latest_latest.h5
Normal file
BIN
tools/test/h5repack/testfiles/bounds_latest_latest.h5
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user