Files
SVMClassifier/tests/CMakeLists.txt
Ricardo Montañana Gómez 5302dd9a8a
Some checks failed
CI/CD Pipeline / Code Linting (push) Failing after 24s
CI/CD Pipeline / Build and Test (Debug, clang, ubuntu-latest) (push) Failing after 5m17s
CI/CD Pipeline / Build and Test (Debug, gcc, ubuntu-latest) (push) Failing after 5m32s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-20.04) (push) Failing after 5m45s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-latest) (push) Failing after 5m12s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-20.04) (push) Failing after 5m22s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-latest) (push) Failing after 5m26s
CI/CD Pipeline / Docker Build Test (push) Failing after 1m7s
CI/CD Pipeline / Performance Benchmarks (push) Has been skipped
CI/CD Pipeline / Build Documentation (push) Failing after 18s
CI/CD Pipeline / Create Release Package (push) Has been skipped
Add docs support
2025-06-23 10:02:36 +02:00

129 lines
4.2 KiB
CMake

# Tests CMakeLists.txt
# Find Catch2 (should already be available from main CMakeLists.txt)
# find_package(Catch2 3 REQUIRED)
# Include Catch2 extras for automatic test discovery
include(Catch)
# Test sources
set(TEST_SOURCES
test_main.cpp
test_svm_classifier.cpp
test_data_converter.cpp
test_multiclass_strategy.cpp
test_kernel_parameters.cpp
)
# Create test executable
add_executable(svm_classifier_tests ${TEST_SOURCES})
add_test(NAME svm_classifier_tests COMMAND svm_classifier_tests)
# Link with the main library and Catch2
target_link_libraries(svm_classifier_tests
PRIVATE
svm_classifier
Catch2::Catch2WithMain
)
# Set include directories
target_include_directories(svm_classifier_tests
PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/external/libsvm
${CMAKE_SOURCE_DIR}/external/liblinear
)
# Compiler flags for tests
target_compile_features(svm_classifier_tests PRIVATE cxx_std_17)
# Add compiler flags
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(svm_classifier_tests PRIVATE
-Wall -Wextra -pedantic -Wno-unused-parameter
)
endif()
# Discover tests automatically
catch_discover_tests(svm_classifier_tests)
# Add custom targets for different test categories
add_custom_target(test_unit
COMMAND ${CMAKE_CTEST_COMMAND} -L "unit" --output-on-failure
DEPENDS svm_classifier_tests
COMMENT "Running unit tests"
)
add_custom_target(test_integration
COMMAND ${CMAKE_CTEST_COMMAND} -L "integration" --output-on-failure
DEPENDS svm_classifier_tests
COMMENT "Running integration tests"
)
add_custom_target(test_performance
COMMAND ${CMAKE_CTEST_COMMAND} -L "performance" --output-on-failure
DEPENDS svm_classifier_tests
COMMENT "Running performance tests"
)
add_custom_target(test_all
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
DEPENDS svm_classifier_tests
COMMENT "Running all tests"
)
# Coverage target (if gcov/lcov available)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
find_program(GCOV_EXECUTABLE gcov)
find_program(LCOV_EXECUTABLE lcov)
find_program(GENHTML_EXECUTABLE genhtml)
if(GCOV_EXECUTABLE AND LCOV_EXECUTABLE AND GENHTML_EXECUTABLE)
target_compile_options(svm_classifier_tests PRIVATE --coverage)
target_link_options(svm_classifier_tests PRIVATE --coverage)
add_custom_target(coverage
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
COMMAND ${LCOV_EXECUTABLE} --capture --directory . --output-file coverage.info
COMMAND ${LCOV_EXECUTABLE} --remove coverage.info '/usr/*' '*/external/*' '*/tests/*' --output-file coverage_filtered.info
COMMAND ${GENHTML_EXECUTABLE} coverage_filtered.info --output-directory coverage_html
DEPENDS svm_classifier_tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generating code coverage report"
)
message(STATUS "Code coverage target 'coverage' available")
endif()
endif()
# Add memory check with valgrind if available
find_program(VALGRIND_EXECUTABLE valgrind)
if(VALGRIND_EXECUTABLE)
add_custom_target(test_memcheck
COMMAND ${VALGRIND_EXECUTABLE} --tool=memcheck --leak-check=full --show-leak-kinds=all
--track-origins=yes --verbose --error-exitcode=1
$<TARGET_FILE:svm_classifier_tests>
DEPENDS svm_classifier_tests
COMMENT "Running tests with valgrind memory check"
)
message(STATUS "Memory check target 'test_memcheck' available")
endif()
# Performance profiling with perf if available
find_program(PERF_EXECUTABLE perf)
if(PERF_EXECUTABLE)
add_custom_target(test_profile
COMMAND ${PERF_EXECUTABLE} record -g $<TARGET_FILE:svm_classifier_tests> [performance]
COMMAND ${PERF_EXECUTABLE} report
DEPENDS svm_classifier_tests
COMMENT "Running performance tests with profiling"
)
message(STATUS "Performance profiling target 'test_profile' available")
endif()
# Set test properties
set_tests_properties(svm_classifier_tests PROPERTIES
TIMEOUT 300 # 5 minutes timeout
ENVIRONMENT "TORCH_NUM_THREADS=1" # Single-threaded for reproducible results
)