set(gtest_force_shared_crt
    ON
    CACHE BOOL "" FORCE)

option(ENABLE_TESTS "Enable tests" ON)

if(NOT PROJECT_IS_TOP_LEVEL)
  set(ENABLE_TESTS OFF CACHE BOOL "Disable tests" FORCE)
endif()

if(ENABLE_TESTS)
  message(STATUS "Tests are enabled")

  target_sources(${PROJECT_NAME}
    PUBLIC
      FILE_SET cxx_modules TYPE CXX_MODULES
      FILES
        Module.tests.ixx
  )
  target_compile_definitions(${PROJECT_NAME}  PRIVATE ENABLE_TESTS)
  target_link_libraries(${PROJECT_NAME} PUBLIC GTest::gtest_main)

  set(SOURCE_FILES main_tests.cpp )
  add_executable(tests ${SOURCE_FILES})
  set_target_properties(tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY
                                      "${CMAKE_BINARY_DIR}/bin")
  target_include_directories(tests PUBLIC ${CMAKE_SOURCE_DIR}/src)
  target_link_libraries(tests PUBLIC ${PROJECT_NAME})
  target_include_directories(tests SYSTEM PRIVATE ../external/googletest/googletest/include)

  include(GoogleTest)
  gtest_discover_tests(tests)

endif()

