# set(DUNE_MAX_TEST_CORES 4)
set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

# additional compiler option for CMAKE_BUILD_TYPE=RelWithDebInfo only for gcc
set(NoVarTrackingAssignments $<$<AND:$<CONFIG:RelWithDebInfo>,$<CXX_COMPILER_ID:GNU>>:-fno-var-tracking-assignments>)

# link all tests against AMDiS::AMDiS
link_libraries(AMDiS::AMDiS)
if (ENABLE_PAMG)
  add_compile_options(-DAMDIS_ENABLE_PAMG=1)
endif()

dune_add_test(SOURCES AdaptInfoTest.cpp)

dune_add_test(SOURCES AdaptiveGridTest.cpp)

foreach(_GRID RANGE 7)
  dune_add_test(NAME "BackupRestoreTest_${_GRID}"
    SOURCES BackupRestoreTest.cpp
    COMPILE_DEFINITIONS "GRID_ID=${_GRID}"
    LABELS "BackupRestore")
  add_dune_alberta_flags(GRIDDIM 2 WORLDDIM 2 "BackupRestoreTest_${_GRID}")
  target_compile_options(BackupRestoreTest_${_GRID} PRIVATE ${NoVarTrackingAssignments})
endforeach()
unset(_GRID)

dune_add_test(SOURCES CoordGridFunctionTest.cpp)

dune_add_test(SOURCES ComposerVectorGridFunctionTest.cpp)

dune_add_test(SOURCES ConceptsTest.cpp)

dune_add_test(SOURCES DataTransferTest2d.cpp)

dune_add_test(SOURCES DataTransferTest3d.cpp)

dune_add_test(SOURCES DirichletBCTest.cpp)
add_dune_suitesparse_flags(DirichletBCTest)

# dune_add_test(SOURCES DOFMappingTest.cpp
#   MPI_RANKS 2
#   TIMEOUT 300
#   CMAKE_GUARD MPI_FOUND)

dune_add_test(SOURCES DOFVectorTest.cpp)

dune_add_test(SOURCES DiscreteFunctionTest.cpp)

dune_add_test(SOURCES ElementVectorTest.cpp)

dune_add_test(SOURCES ExpressionsTest.cpp)

dune_add_test(SOURCES FakeContainerTest.cpp)

dune_add_test(SOURCES FieldMatVecTest.cpp)

dune_add_test(SOURCES FiniteElementTypeTest.cpp)

dune_add_test(SOURCES FilesystemTest.cpp)

dune_add_test(SOURCES FlatMatVecTest.cpp)

dune_add_test(SOURCES FlatPreBasisTest.cpp)

dune_add_test(SOURCES GlobalIdSetTest.cpp
  MPI_RANKS 2
  TIMEOUT 300
  CMAKE_GUARD MPI_FOUND)

dune_add_test(SOURCES GradientTest.cpp)

if(BACKEND STREQUAL "ISTL")
  dune_add_test(SOURCES ISTLCommTest.cpp
    MPI_RANKS 2 4
    TIMEOUT 300
    CMAKE_GUARD MPI_FOUND)
endif()

dune_add_test(SOURCES InitfileTest.cpp)

dune_add_test(SOURCES IntegrateTest.cpp)

dune_add_test(SOURCES MarkerTest.cpp)

dune_add_test(SOURCES MatrixBackendTest.cpp)

dune_add_test(SOURCES MpiWrapperTest.cpp
  MPI_RANKS 2 4
  TIMEOUT 300
  CMAKE_GUARD "MPI_FOUND")

dune_add_test(SOURCES NodeIndicesTest.cpp)

dune_add_test(SOURCES ObserverTest.cpp)

dune_add_test(SOURCES OperationsTest.cpp)

dune_add_test(SOURCES OperatorsTest.cpp)

dune_add_test(SOURCES PeriodicTest.cpp)

if(BACKEND STREQUAL "ISTL")
foreach(_GRID RANGE 6)
  dune_add_test(NAME "ParallelIndexSetTest_${_GRID}"
    SOURCES ParallelIndexSetTest.cpp
    COMPILE_DEFINITIONS "GRID_ID=${_GRID}"
    LABELS "ParallelIndexSetTest"
    MPI_RANKS 2 3 4
    TIMEOUT 300
    CMAKE_GUARD MPI_FOUND)
  target_compile_options(ParallelIndexSetTest_${_GRID} PRIVATE ${NoVarTrackingAssignments})
endforeach()
unset(_GRID)
endif()

if(BACKEND STREQUAL "PETSC")
foreach(_GRID RANGE 6)
  dune_add_test(NAME "PETScCommTest_${_GRID}"
    SOURCES PETScCommTest.cpp
    COMPILE_DEFINITIONS "GRID_ID=${_GRID}"
    LABELS "PETScCommTest"
    MPI_RANKS 2 3 4
    TIMEOUT 300
    CMAKE_GUARD MPI_FOUND)
endforeach()
unset(_GRID)
endif()

dune_add_test(SOURCES ProblemStatTest.cpp)

dune_add_test(SOURCES RangeTypeTest.cpp)

dune_add_test(SOURCES RecursiveTest.cpp)

dune_add_test(SOURCES StaticSizeTest.cpp)

dune_add_test(SOURCES StringTest.cpp)

dune_add_test(SOURCES SwitchCasesTest.cpp)

dune_add_test(SOURCES TreePathTest.cpp)

dune_add_test(SOURCES UniqueBorderPartitionTest.cpp
  MPI_RANKS 2
  TIMEOUT 300
  CMAKE_GUARD MPI_FOUND)

dune_add_test(SOURCES ValidTreePathTest.cpp)

dune_add_test(SOURCES VectorFacadeTest.cpp)
