Add python testing for examples (#4628)

This commit is contained in:
Allen Byrne 2024-07-12 23:28:38 -05:00 committed by GitHub
parent f7ec0c262a
commit 033f2a8cb5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 125 additions and 99 deletions

View File

@ -1,97 +0,0 @@
#
# Copyright by The HDF Group.
# All rights reserved.
#
# This file is part of HDF5. The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the COPYING file, which can be found at the root of the source code
# distribution tree, or in https://www.hdfgroup.org/licenses.
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
##############################################################################
##############################################################################
### T E S T I N G ###
##############################################################################
##############################################################################
file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/red ${PROJECT_BINARY_DIR}/blue ${PROJECT_BINARY_DIR}/u2w)
set (test_ex_CLEANFILES
Attributes.h5
btrees_file.h5
cmprss.h5
default_file.h5
dset.h5
extend.h5
extlink_prefix_source.h5
extlink_source.h5
extlink_target.h5
group.h5
groups.h5
hard_link.h5
mount1.h5
mount2.h5
one_index_file.h5
only_dspaces_and_attrs_file.h5
only_huge_mesgs_file.h5
REF_REG.h5
refere.h5
refer_deprec.h5
refer_extern1.h5
refer_extern2.h5
SDS.h5
SDScompound.h5
SDSextendible.h5
Select.h5
separate_indexes_file.h5
small_lists_file.h5
soft_link.h5
subset.h5
unix2win.h5
blue/prefix_target.h5
red/prefix_target.h5
u2w/u2w_target.h5
)
if (HDF5_TEST_SERIAL)
# Remove any output file left over from previous test run
add_test (
NAME EXAMPLES-clear-objects
COMMAND ${CMAKE_COMMAND} -E remove ${test_ex_CLEANFILES}
)
set_tests_properties (EXAMPLES-clear-objects PROPERTIES
FIXTURES_SETUP clear_EXAMPLES
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
add_test (
NAME EXAMPLES-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove ${test_ex_CLEANFILES}
)
set_tests_properties (EXAMPLES-clean-objects PROPERTIES
FIXTURES_CLEANUP clear_EXAMPLES
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
foreach (example ${examples})
if (HDF5_USING_ANALYSIS_TOOL)
add_test (NAME EXAMPLES-${example} COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:${example}>)
else ()
add_test (NAME EXAMPLES-${example} COMMAND "${CMAKE_COMMAND}"
-D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
-D "TEST_PROGRAM=$<TARGET_FILE:${example}>"
-D "TEST_ARGS:STRING="
-D "TEST_EXPECT=0"
-D "TEST_SKIP_COMPARE=TRUE"
-D "TEST_OUTPUT=${example}.txt"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
endif ()
set_tests_properties (EXAMPLES-${example} PROPERTIES FIXTURES_REQUIRED clear_EXAMPLES)
if (last_test)
set_tests_properties (EXAMPLES-${example} PROPERTIES DEPENDS ${last_test})
endif ()
set (last_test "EXAMPLES-${example}")
endforeach ()
endif ()

View File

@ -27,6 +27,11 @@ if (NOT EXAMPLES_EXTERNALLY_CONFIGURED)
#-----------------------------------------------------------------------------
HDF5_SUPPORT (TRUE)
APIVersion(${HDF5_VERSION} H5_LIBVER_DIR)
#-----------------------------------------------------------------------------
# Python support check
#-----------------------------------------------------------------------------
PYTHON_SUPPORT ()
endif ()
message (STATUS "HDF5 link libs: ${H5EX_HDF5_LINK_LIBS}")
message (STATUS "HDF5 H5_LIBVER_DIR: ${H5_LIBVER_DIR} HDF5_VERSION_MAJOR: ${HDF5_VERSION_MAJOR}")
@ -230,4 +235,7 @@ endif ()
if (HDF_BUILD_CPP_LIB AND HDF5_BUILD_CPP_LIB)
add_subdirectory (CXX)
endif ()
if (HDF_BUILD_PYTHON)
add_subdirectory (PYTHON)
endif ()

View File

@ -0,0 +1,72 @@
cmake_minimum_required (VERSION 3.18)
project (HDF5Examples_PYTHON)
#-----------------------------------------------------------------------------
# Define Sources
#-----------------------------------------------------------------------------
include (Py_sourcefiles.cmake)
if (H5EX_BUILD_TESTING)
set (${EXAMPLE_VARNAME}_PY_CLEANFILES
compound.h5
dset.h5
gzip.h5
hype.h5
links.h5
objref.h5
regref.h5
copy1.h5
copy2.h5
string.h5
unlim.h5
vlstring.h5
)
# Remove any output file left over from previous test run
add_test (
NAME ${EXAMPLE_VARNAME}_PY-clear-objects
COMMAND ${CMAKE_COMMAND} -E remove ${${EXAMPLE_VARNAME}_PY_CLEANFILES}
)
set_tests_properties (${EXAMPLE_VARNAME}_PY-clear-objects PROPERTIES
FIXTURES_SETUP clear_${EXAMPLE_VARNAME}_PY
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
add_custom_target(${EXAMPLE_VARNAME}_PY-copy-objects ALL COMMENT "Copying Python source files")
foreach (example_name ${examples})
add_custom_command (
TARGET ${EXAMPLE_VARNAME}_PY-copy-objects
POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/${example_name}.py ${PROJECT_BINARY_DIR}/${example_name}.py
)
endforeach ()
add_test (
NAME ${EXAMPLE_VARNAME}_PY-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove ${${EXAMPLE_VARNAME}_PY_CLEANFILES}
)
set_tests_properties (${EXAMPLE_VARNAME}_PY-clean-objects PROPERTIES
FIXTURES_CLEANUP clear_${EXAMPLE_VARNAME}_PY
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
macro (ADD_H5_TEST testname)
if (NOT HDF5_USING_ANALYSIS_TOOL)
add_test (
NAME ${EXAMPLE_VARNAME}_PY_${testname}
COMMAND ${Python3_EXECUTABLE} ${testname}.py
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
set_tests_properties (${EXAMPLE_VARNAME}_PY_${testname} PROPERTIES FIXTURES_REQUIRED clear_${EXAMPLE_VARNAME}_PY)
if (last_test)
set_tests_properties (${EXAMPLE_VARNAME}_PY_${testname} PROPERTIES DEPENDS ${last_test})
endif ()
set (last_test "${EXAMPLE_VARNAME}_PY_${testname}")
endif ()
endmacro ()
foreach (example_name ${examples})
ADD_H5_TEST (${example_name})
endforeach ()
endif ()

View File

@ -0,0 +1,20 @@
#-----------------------------------------------------------------------------
# Define Sources, one file per application
#-----------------------------------------------------------------------------
set (examples
h5_compound
h5_crtdat
h5_gzip
h5_hype
h5_hypeb
h5_links
h5_objref
h5_readtofloat
h5_regref
h5_selecelem
h5_string
h5_unlim
h5_visit
h5_visita
h5_vlstring
)

View File

@ -10,7 +10,7 @@ file = h5py.File('vlstring.h5','w')
#
# Create a dataset under the Root group using variable-length string type.
#
str_type = h5py.new_vlen(str)
str_type = h5py.special_dtype(vlen=str)
dataset = file.create_dataset("DSvariable",(4,), dtype=str_type)
data = ("Parting", " is such", " sweet", " sorrow...")
dataset[...] = data
@ -22,7 +22,7 @@ file = h5py.File('vlstring.h5', 'r')
dataset = file['DSvariable']
data_out = dataset[...]
for i in range(4):
print("DSvariable[",i,"]", "'"+data_out[i]+"'", "has length", len(data_out[i]))
print("DSvariable[",i,"]", "'"+data_out[i].decode('utf-8')+"'", "has length", len(data_out[i]))
print(data_out)
file.close()

View File

@ -105,6 +105,29 @@ macro (BASIC_SETTINGS varname)
)
endmacro ()
macro (PYTHON_SUPPORT)
option (HDF_BUILD_PYTHON "Test Python3 support" OFF)
if (HDF_BUILD_PYTHON)
find_package (Python3 COMPONENTS Interpreter Development NumPy)
if (Python3_FOUND AND Python3_NumPy_FOUND)
include (ExternalProject)
EXTERNALPROJECT_ADD (h5py
GIT_REPOSITORY https://github.com/h5py/h5py.git
GIT_TAG master
UPDATE_COMMAND ""
PATCH_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND "${CMAKE_COMMAND}" -E env HDF5_DIR=${HDF5_ROOT} "${Python3_EXECUTABLE}" setup.py build
BUILD_IN_SOURCE 1
INSTALL_COMMAND python3 -m pip --no-cache-dir install -v .
)
else ()
set (HDF_BUILD_PYTHON OFF CACHE BOOL "Test Python3 support" FORCE)
message (STATUS "Python3:${Python3_FOUND} or numpy:${Python3_NumPy_FOUND} not found - disable test of Python examples")
endif ()
endif ()
endmacro ()
macro (HDF5_SUPPORT)
set (CMAKE_MODULE_PATH ${H5EX_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
option (USE_SHARED_LIBS "Use Shared Libraries" ON)