message(STATUS "Running google test")
add_subdirectory("${PROJECT_SOURCE_DIR}/ThirdPartyLibs/googletest" "ThirdPartyLibs/googletest")
mark_as_advanced(
  BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS
  gmock_build_tests gtest_build_samples gtest_build_tests
  gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols
)
add_subdirectory(Utilities)
include_directories(Utilities)
add_library(customMain TestsMain.cpp)
target_link_libraries(customMain MPI::MPI_CXX gtest gmock)
include(CMakeParseArguments)

macro(package_add_test TESTNAME)
  set(multiValueArgs SOURCES)
  cmake_parse_arguments(PAT "" "" "${multiValueArgs}" ${ARGN})

  if (NOT PAT_SOURCES)
    message(FATAL_ERROR "You must specify SOURCES for test ${TESTNAME}")
  endif()

  add_executable(${TESTNAME} ${PAT_SOURCES})
  target_link_libraries(${TESTNAME}
    PRIVATE gmspips_read_write
    PRIVATE pips-ipmpp
    PRIVATE OpenMP::OpenMP_CXX
    PRIVATE customMain
    PRIVATE utilities
  )
  target_compile_definitions(${TESTNAME} PRIVATE -D__ROOT_DIR__="${CMAKE_SOURCE_DIR}")
  set_target_properties(${TESTNAME} PROPERTIES FOLDER tests)

  if (WITH_MEMORY_SANITIZER)
    # simple add_test, with ASan suppressions
    add_test(NAME ${TESTNAME} COMMAND ${TESTNAME})
    set_tests_properties(${TESTNAME} PROPERTIES
      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
      ENVIRONMENT "ASAN_OPTIONS=detect_leaks=1:suppressions=${CMAKE_SOURCE_DIR}/asan.supp"
    )
    message(STATUS "  [ASAN] registered ${TESTNAME} via add_test()")
  else(WITH_MEMORY_SANITIZER)
    # full GoogleTest discovery
    gtest_discover_tests(${TESTNAME}
      WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
      DISCOVERY_TIMEOUT 10
      TEST_PREFIX "${TESTNAME}/"
    )
    message(STATUS "  [GTEST] discover_tests for ${TESTNAME}")
  endif(WITH_MEMORY_SANITIZER)
endmacro()

add_subdirectory(Interface)
add_subdirectory(StochLinearAlgebra)
add_subdirectory(Drivers)
add_subdirectory(IntegrationTests)
