# ── Unit tests ──────────────────────────────────────────────────────────────── # Pure, GPU-free, model-free tests. The similarity tests compile the GEMM backend # directly with SAE_GEMM_CPU so the suite builds and runs on a machine without a # GPU regardless of the main build's SAE_GEMM_BACKEND selection. find_package(Catch2 3 QUIET) if(NOT Catch2_FOUND) include(FetchContent) FetchContent_Declare( Catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.5.3 ) FetchContent_MakeAvailable(Catch2) endif() add_executable(sae_tests test_similarity.cpp test_calibration.cpp test_gallery_store.cpp test_face_utils.cpp test_track_gallery.cpp test_face_tracker.cpp ${CMAKE_SOURCE_DIR}/src/backends/gemm_backend.cpp ${CMAKE_SOURCE_DIR}/src/gallery/gallery_store.cpp ${CMAKE_SOURCE_DIR}/src/gallery/embedder_stamp.cpp ) target_include_directories(sae_tests PRIVATE ${CMAKE_SOURCE_DIR}/src) # SAE_GEMM_CPU: build the CPU reference GEMM regardless of the main backend. # SAE_MODELS_DIR: config.hpp (pulled in by track_gallery.hpp) bakes model paths. target_compile_definitions(sae_tests PRIVATE SAE_GEMM_CPU SAE_MODELS_DIR="${SAE_MODELS_DIR}") # gallery_store.cpp + gallery_calibration.hpp use nlohmann/json and HDF5 # (galleries are HDF5-native, see src/gallery/gallery_store.cpp); face_utils.hpp # and the calibration GEMM pull in OpenCV (calib3d/imgproc/core) via types.hpp. target_link_libraries(sae_tests PRIVATE Catch2::Catch2WithMain nlohmann_json::nlohmann_json ${OpenCV_LIBS} ${HDF5_CXX_LIBRARIES}) target_include_directories(sae_tests PRIVATE ${HDF5_INCLUDE_DIRS}) include(CTest) include(Catch) catch_discover_tests(sae_tests)