Files
2025-05-18 13:04:45 +08:00

128 lines
4.8 KiB
CMake

# sources
#aux_source_directory(. SOURCES)
file(GLOB SOURCES test_*.c)
# flags
link_directories(${PROJECT_BINARY_DIR}/blosc)
# targets and tests
foreach(source ${SOURCES})
get_filename_component(target ${source} NAME_WE)
# test_nolock and test_noinit will be enabled only for Unix
if(WIN32)
if (target STREQUAL test_nolock OR
target STREQUAL test_noinit OR
target STREQUAL test_forksafe OR
target STREQUAL test_compressor)
message("Skipping ${target} on Windows systems")
continue()
endif()
endif()
# Disable targets that use lz4 compressor when lz4 is deactivated
if((target STREQUAL test_compressor) OR (target STREQUAL test_bitshuffle_leftovers) AND DEACTIVATE_LZ4)
message("Skipping ${target} on non-LZ4 builds")
continue()
endif()
# Enable support for testing accelerated shuffles
if(COMPILER_SUPPORT_SSE2)
# Define a symbol so tests for SSE2 shuffle/unshuffle will be compiled in.
set_property(
SOURCE ${source}
APPEND PROPERTY COMPILE_DEFINITIONS SHUFFLE_SSE2_ENABLED)
endif(COMPILER_SUPPORT_SSE2)
# if(COMPILER_SUPPORT_AVX2)
# # Define a symbol so tests for AVX2 shuffle/unshuffle will be compiled in.
# set_property(
# SOURCE ${source}
# APPEND PROPERTY COMPILE_DEFINITIONS SHUFFLE_AVX2_ENABLED)
# endif(COMPILER_SUPPORT_AVX2)
add_executable(${target} ${source})
# Define the BLOSC_TESTING symbol so normally-hidden functions
# aren't hidden from the view of the test programs.
set_property(
TARGET ${target}
APPEND PROPERTY COMPILE_DEFINITIONS BLOSC_TESTING)
# have to copy dlls for Visual Studio
if(MSVC OR MINGW)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different
"$<TARGET_FILE:blosc_shared_testing>"
"$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_NAME:blosc_shared_testing>")
endif()
target_link_libraries(${target} blosc_shared_testing)
add_dependencies(${target} blosc_shared_testing)
# If there's a CSV file present for this test, read it to get the list
# of test parameters then add a test for each parameter set.
# Otherwise, this is a simple test so just add it once.
get_filename_component(source_extension ${source} EXT)
string(REGEX REPLACE "${source_extension}$" ".csv"
test_params_file ${source})
if (EXISTS "${test_params_file}")
# Read the file contents into a CMake list
file(READ "${test_params_file}" test_params_contents)
string(REGEX REPLACE ";" "\\\\;"
test_params_contents "${test_params_contents}")
string(REGEX REPLACE "\n" ";"
test_params_contents "${test_params_contents}")
# How many parameter sets for this test?
# If there's not at least one (accounting for the CSV header line),
# that's probably not correct so emit an error and stop configuring.
list(LENGTH test_params_contents test_params_count)
if ("${test_params_count}" LESS 2)
message(ERROR "Invalid test parameters file: ${test_params_file}")
endif()
# Remove the header line.
list(REMOVE_AT test_params_contents 0)
# Add a test for each parameter set in the file.
foreach(test_params_raw ${test_params_contents})
string(REGEX REPLACE "," " " test_params "${test_params_raw}")
# Create the test name.
# NOTE: The documentation for add_test says the test name "may not contain
# spaces, quotes, or other characters special in CMake syntax."
string(REGEX REPLACE "\"| " "_" test_name_params "${test_params}")
set(test_name "${target}_${test_name_params}")
separate_arguments(test_params)
add_test(${test_name} ${target} ${test_params})
endforeach()
else()
add_test(${target} ${target})
endif()
endforeach(source)
if(NOT DEACTIVATE_SYMBOLS_CHECK)
if (NOT WIN32)
# Verify that no unexpected symbols are exported.
if (BUILD_SHARED)
add_test(
NAME blosc_test_shared_symbols
COMMAND python
"${CMAKE_CURRENT_SOURCE_DIR}/check_symbols.py"
"$<TARGET_FILE:blosc_shared>")
endif()
if (BUILD_STATIC)
add_test(
NAME blosc_test_static_symbols
COMMAND python
"${CMAKE_CURRENT_SOURCE_DIR}/check_symbols.py"
"$<TARGET_FILE:blosc_static>")
endif()
endif()
endif(NOT DEACTIVATE_SYMBOLS_CHECK)