igl_add_test.cmake 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. function(igl_add_test module_name)
  2. if(NOT LIBIGL_BUILD_TESTS)
  3. return()
  4. endif()
  5. if(NOT TARGET ${module_name})
  6. message(FATAL_ERROR "'${module_name}' is not a CMake target")
  7. endif()
  8. # Check if category is `copyleft` or `restricted`
  9. if(${module_name} MATCHES "^igl_copyleft")
  10. set(suffix "_copyleft")
  11. elseif(${module_name} MATCHES "^igl_restricted")
  12. set(suffix "_restricted")
  13. else()
  14. set(suffix "")
  15. endif()
  16. # Create test executable
  17. add_executable(test_${module_name}
  18. ${libigl_SOURCE_DIR}/tests/main.cpp
  19. ${libigl_SOURCE_DIR}/tests/test_common.h
  20. ${ARGN}
  21. )
  22. # Include headers
  23. target_include_directories(test_${module_name} PUBLIC ${libigl_SOURCE_DIR}/tests)
  24. # Compile definitions
  25. target_compile_definitions(test_${module_name} PUBLIC CATCH_CONFIG_ENABLE_BENCHMARKING)
  26. # Dependencies
  27. include(catch2)
  28. include(libigl_tests_data)
  29. target_link_libraries(test_${module_name} PUBLIC
  30. ${module_name}
  31. igl::tests_data
  32. Catch2::Catch2
  33. )
  34. # IDE Folder
  35. set_target_properties(test_${module_name} PROPERTIES FOLDER Libigl_Tests)
  36. # Output directory
  37. set_target_properties(test_${module_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
  38. # Register tests
  39. FetchContent_GetProperties(catch2)
  40. include("${catch2_SOURCE_DIR}/contrib/Catch.cmake")
  41. catch_discover_tests(test_${module_name})
  42. endfunction()