Skip to content

Commit 4fbb888

Browse files
byrnHDFqkoziol
authored andcommitted
Add python testing for examples (HDFGroup#4628)
1 parent b839d83 commit 4fbb888

File tree

6 files changed

+125
-99
lines changed

6 files changed

+125
-99
lines changed

HDF5Examples/C/TUTR/CMakeTests.cmake

Lines changed: 0 additions & 97 deletions
This file was deleted.

HDF5Examples/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ if (NOT EXAMPLES_EXTERNALLY_CONFIGURED)
2727
#-----------------------------------------------------------------------------
2828
HDF5_SUPPORT (TRUE)
2929
APIVersion(${HDF5_VERSION} H5_LIBVER_DIR)
30+
31+
#-----------------------------------------------------------------------------
32+
# Python support check
33+
#-----------------------------------------------------------------------------
34+
PYTHON_SUPPORT ()
3035
endif ()
3136
message (STATUS "HDF5 link libs: ${H5EX_HDF5_LINK_LIBS}")
3237
message (STATUS "HDF5 H5_LIBVER_DIR: ${H5_LIBVER_DIR} HDF5_VERSION_MAJOR: ${HDF5_VERSION_MAJOR}")
@@ -279,4 +284,7 @@ endif ()
279284
if (HDF_BUILD_CPP_LIB AND HDF5_BUILD_CPP_LIB)
280285
add_subdirectory (CXX)
281286
endif ()
287+
if (HDF_BUILD_PYTHON)
288+
add_subdirectory (PYTHON)
289+
endif ()
282290

HDF5Examples/PYTHON/CMakeLists.txt

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
cmake_minimum_required (VERSION 3.18)
2+
project (HDF5Examples_PYTHON)
3+
4+
#-----------------------------------------------------------------------------
5+
# Define Sources
6+
#-----------------------------------------------------------------------------
7+
include (Py_sourcefiles.cmake)
8+
9+
if (H5EX_BUILD_TESTING)
10+
set (${EXAMPLE_VARNAME}_PY_CLEANFILES
11+
compound.h5
12+
dset.h5
13+
gzip.h5
14+
hype.h5
15+
links.h5
16+
objref.h5
17+
regref.h5
18+
copy1.h5
19+
copy2.h5
20+
string.h5
21+
unlim.h5
22+
vlstring.h5
23+
)
24+
25+
# Remove any output file left over from previous test run
26+
add_test (
27+
NAME ${EXAMPLE_VARNAME}_PY-clear-objects
28+
COMMAND ${CMAKE_COMMAND} -E remove ${${EXAMPLE_VARNAME}_PY_CLEANFILES}
29+
)
30+
set_tests_properties (${EXAMPLE_VARNAME}_PY-clear-objects PROPERTIES
31+
FIXTURES_SETUP clear_${EXAMPLE_VARNAME}_PY
32+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
33+
)
34+
35+
add_custom_target(${EXAMPLE_VARNAME}_PY-copy-objects ALL COMMENT "Copying Python source files")
36+
foreach (example_name ${examples})
37+
add_custom_command (
38+
TARGET ${EXAMPLE_VARNAME}_PY-copy-objects
39+
POST_BUILD
40+
COMMAND ${CMAKE_COMMAND}
41+
ARGS -E copy_if_different ${PROJECT_SOURCE_DIR}/${example_name}.py ${PROJECT_BINARY_DIR}/${example_name}.py
42+
)
43+
endforeach ()
44+
45+
add_test (
46+
NAME ${EXAMPLE_VARNAME}_PY-clean-objects
47+
COMMAND ${CMAKE_COMMAND} -E remove ${${EXAMPLE_VARNAME}_PY_CLEANFILES}
48+
)
49+
set_tests_properties (${EXAMPLE_VARNAME}_PY-clean-objects PROPERTIES
50+
FIXTURES_CLEANUP clear_${EXAMPLE_VARNAME}_PY
51+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
52+
)
53+
54+
macro (ADD_H5_TEST testname)
55+
if (NOT HDF5_USING_ANALYSIS_TOOL)
56+
add_test (
57+
NAME ${EXAMPLE_VARNAME}_PY_${testname}
58+
COMMAND ${Python3_EXECUTABLE} ${testname}.py
59+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
60+
)
61+
set_tests_properties (${EXAMPLE_VARNAME}_PY_${testname} PROPERTIES FIXTURES_REQUIRED clear_${EXAMPLE_VARNAME}_PY)
62+
if (last_test)
63+
set_tests_properties (${EXAMPLE_VARNAME}_PY_${testname} PROPERTIES DEPENDS ${last_test})
64+
endif ()
65+
set (last_test "${EXAMPLE_VARNAME}_PY_${testname}")
66+
endif ()
67+
endmacro ()
68+
69+
foreach (example_name ${examples})
70+
ADD_H5_TEST (${example_name})
71+
endforeach ()
72+
endif ()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#-----------------------------------------------------------------------------
2+
# Define Sources, one file per application
3+
#-----------------------------------------------------------------------------
4+
set (examples
5+
h5_compound
6+
h5_crtdat
7+
h5_gzip
8+
h5_hype
9+
h5_hypeb
10+
h5_links
11+
h5_objref
12+
h5_readtofloat
13+
h5_regref
14+
h5_selecelem
15+
h5_string
16+
h5_unlim
17+
h5_visit
18+
h5_visita
19+
h5_vlstring
20+
)

HDF5Examples/PYTHON/h5_vlstring.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# Create a dataset under the Root group using variable-length string type.
1212
#
13-
str_type = h5py.new_vlen(str)
13+
str_type = h5py.special_dtype(vlen=str)
1414
dataset = file.create_dataset("DSvariable",(4,), dtype=str_type)
1515
data = ("Parting", " is such", " sweet", " sorrow...")
1616
dataset[...] = data
@@ -22,7 +22,7 @@
2222
dataset = file['DSvariable']
2323
data_out = dataset[...]
2424
for i in range(4):
25-
print("DSvariable[",i,"]", "'"+data_out[i]+"'", "has length", len(data_out[i]))
25+
print("DSvariable[",i,"]", "'"+data_out[i].decode('utf-8')+"'", "has length", len(data_out[i]))
2626

2727
print(data_out)
2828
file.close()

HDF5Examples/config/cmake/HDFExampleMacros.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,29 @@ macro (BASIC_SETTINGS varname)
105105
)
106106
endmacro ()
107107

108+
macro (PYTHON_SUPPORT)
109+
option (HDF_BUILD_PYTHON "Test Python3 support" OFF)
110+
if (HDF_BUILD_PYTHON)
111+
find_package (Python3 COMPONENTS Interpreter Development NumPy)
112+
if (Python3_FOUND AND Python3_NumPy_FOUND)
113+
include (ExternalProject)
114+
EXTERNALPROJECT_ADD (h5py
115+
GIT_REPOSITORY https://github.com/h5py/h5py.git
116+
GIT_TAG master
117+
UPDATE_COMMAND ""
118+
PATCH_COMMAND ""
119+
CONFIGURE_COMMAND ""
120+
BUILD_COMMAND "${CMAKE_COMMAND}" -E env HDF5_DIR=${HDF5_ROOT} "${Python3_EXECUTABLE}" setup.py build
121+
BUILD_IN_SOURCE 1
122+
INSTALL_COMMAND python3 -m pip --no-cache-dir install -v .
123+
)
124+
else ()
125+
set (HDF_BUILD_PYTHON OFF CACHE BOOL "Test Python3 support" FORCE)
126+
message (STATUS "Python3:${Python3_FOUND} or numpy:${Python3_NumPy_FOUND} not found - disable test of Python examples")
127+
endif ()
128+
endif ()
129+
endmacro ()
130+
108131
macro (HDF5_SUPPORT)
109132
set (CMAKE_MODULE_PATH ${H5EX_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
110133
option (USE_SHARED_LIBS "Use Shared Libraries" ON)

0 commit comments

Comments
 (0)