From d87220ab85549c98366bdef21eec98a5c7d18f65 Mon Sep 17 00:00:00 2001
From: Dominic Kempf <dominic.r.kempf@gmail.com>
Date: Fri, 16 Oct 2015 13:36:24 +0200
Subject: [PATCH] Introduce dune_add_test in dune-istl

There are some tests, which are hard to port in the paamg directory.
They want to explicitly test _without_ direct solver. Previously,
you simply did not add the flags for the direct solver packages.
add_dune_test relies on all flags, so we need a way to disable components
again. That will be implemented as part of dune_add_executable. For
now, we build the targets ourselves and hand them to dune_add_test.
---
 dune/istl/CMakeLists.txt                 |   2 +-
 dune/istl/eigenvalue/CMakeLists.txt      |   2 +-
 dune/istl/eigenvalue/test/CMakeLists.txt |  62 +++------
 dune/istl/paamg/test/CMakeLists.txt      | 164 ++++++++++-------------
 dune/istl/test/CMakeLists.txt            | 157 +++++++---------------
 5 files changed, 140 insertions(+), 247 deletions(-)

diff --git a/dune/istl/CMakeLists.txt b/dune/istl/CMakeLists.txt
index c42e156a..a2fc22d9 100644
--- a/dune/istl/CMakeLists.txt
+++ b/dune/istl/CMakeLists.txt
@@ -1,7 +1,7 @@
 add_subdirectory("eigenvalue")
 add_subdirectory("paamg")
 add_subdirectory("tutorial")
-add_subdirectory("test" EXCLUDE_FROM_ALL)
+add_subdirectory(test)
 
 #install headers
 install(FILES
diff --git a/dune/istl/eigenvalue/CMakeLists.txt b/dune/istl/eigenvalue/CMakeLists.txt
index 9f4da437..f6b863c3 100644
--- a/dune/istl/eigenvalue/CMakeLists.txt
+++ b/dune/istl/eigenvalue/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_subdirectory("test" EXCLUDE_FROM_ALL)
+add_subdirectory(test)
 
 #install headers
 install(FILES
diff --git a/dune/istl/eigenvalue/test/CMakeLists.txt b/dune/istl/eigenvalue/test/CMakeLists.txt
index 22be22a9..05421b0c 100644
--- a/dune/istl/eigenvalue/test/CMakeLists.txt
+++ b/dune/istl/eigenvalue/test/CMakeLists.txt
@@ -1,54 +1,22 @@
-set(NORMALTESTS
-  poweriterationtest
-)
+add_executable(poweriterationtest cond2test.cc)
+target_link_libraries(poweriterationtest dunecommon)
+dune_add_test(TARGET poweriterationtest)
 
 if(SUPERLU_FOUND)
-  set(SUPERLUTESTS
-    poweriterationsuperlutest
-  )
+  add_executable(poweriterationsuperlutest cond2test.cc)
+  add_dune_superlu_flags(poweriterationsuperlutest)
+  dune_add_test(TARGET poweriterationsuperlutest)
+  target_link_libraries(poweriterationsuperlutest dunecommon)
 endif(SUPERLU_FOUND)
 
 if(ARPACKPP_FOUND)
-  set(ARPACKPPTESTS
-    arpackpptest
-  )
+  add_executable(arpackpptest cond2test.cc)
+  add_dune_arpackpp_flags(arpackpptest)
+  target_link_libraries(arpackpptest dunecommon)
+  dune_add_test(TARGET arpackpptest)
 endif(ARPACKPP_FOUND)
 
-if((ARPACKPP_FOUND) AND (SUPERLU_FOUND))
-  set(ARPACKPPSUPERLUTESTS
-    arpackppsuperlutest
-  )
-endif((ARPACKPP_FOUND) AND (SUPERLU_FOUND))
-
-set(ALLTESTS ${NORMALTESTS} ${SUPERLUTESTS} ${ARPACKPPTESTS} ${ARPACKPPSUPERLUTESTS})
-
-
-# We do not want want to build the tests during make all,
-# but just build them on demand
-add_directory_test_target(_test_target)
-add_dependencies(${_test_target} ${ALLTESTS})
-
-
-# Provide source files
-add_executable(poweriterationtest "cond2test.cc")
-
-if(SUPERLU_FOUND)
-  add_executable(poweriterationsuperlutest "cond2test.cc")
-  add_dune_superlu_flags("${SUPERLUTESTS}")
-endif(SUPERLU_FOUND)
-
-if(ARPACKPP_FOUND)
-  add_executable(arpackpptest "cond2test.cc")
-  add_dune_arpackpp_flags("${ARPACKPPTESTS}")
-endif(ARPACKPP_FOUND)
-
-if((ARPACKPP_FOUND) AND (SUPERLU_FOUND))
-  add_executable(arpackppsuperlutest "cond2test.cc")
-  add_dune_arpackpp_flags("${ARPACKPPSUPERLUTESTS}")
-  add_dune_superlu_flags("${ARPACKPPSUPERLUTESTS}")
-endif((ARPACKPP_FOUND) AND (SUPERLU_FOUND))
-
-foreach(_exe ${ALLTESTS})
-  target_link_libraries(${_exe} "dunecommon")
-  add_test(${_exe} ${_exe})
-endforeach(_exe ${ALLTESTS})
+if(ARPACKPP_FOUND AND SUPERLU_FOUND)
+  dune_add_test(NAME arpackppsuperlutest
+                SOURCES cond2test.cc)
+endif()
diff --git a/dune/istl/paamg/test/CMakeLists.txt b/dune/istl/paamg/test/CMakeLists.txt
index 119f0518..49a414dd 100644
--- a/dune/istl/paamg/test/CMakeLists.txt
+++ b/dune/istl/paamg/test/CMakeLists.txt
@@ -1,103 +1,83 @@
-if(MPI_FOUND)
-  set(MPITESTS  galerkintest hierarchytest transfertest pamgtest)
-endif(MPI_FOUND)
-
-if(UMFPACK_FOUND)
-  set(UMFPACKTESTS umfpackfastamg umfpackamgtest)
-endif(UMFPACK_FOUND)
-if(SUPERLU_FOUND)
-  set(SUPERLUTESTS superlufastamg superluamgtest)
-endif(SUPERLU_FOUND)
-if(PARMETIS_FOUND)
-  set(PARMETISTESTS pamgtest pamg_comm_repart_test)
-endif(PARMETIS_FOUND)
-if(CMAKE_USE_PTHREADS_INIT)
-  set(PTHREADTESTS pthreadamgtest pthreadfastamgtest pthreadtwoleveltest)
-  if(SUPERLU_FOUND OR UMFPACK_FOUND)
-    set(PTHREADTESTS ${PTHREADTESTS} pthreaddirectamgtest pthreaddirectfastamgtest pthreaddirecttwoleveltest)
-  endif(SUPERLU_FOUND OR UMFPACK_FOUND)
-endif(CMAKE_USE_PTHREADS_INIT)
-set(NORMALTESTS amgtest fastamg graphtest kamgtest twolevelmethodschwarztest twolevelmethodtest ${PTHREADTESTS})
-set(ALLTESTS ${MPITESTS} ${PARMETISTESTS} ${NORMALTESTS} ${UMFPACKTESTS} ${SUPERLUTESTS})
-
-# We do not want want to build the tests during make all,
-# but just build them on demand
-add_directory_test_target(_test_target)
-add_dependencies(${_test_target} ${ALLTESTS})
-
 find_package(Threads)
 if(CMAKE_USE_PTHREADS_INIT)
-  # test: pthreadamgtest
   add_executable(pthreadamgtest pthreadamgtest.cc)
-  set_property(TARGET pthreadamgtest APPEND PROPERTY
-    COMPILE_DEFINITIONS "MYAMG=Dune::Amg::AMG<Operator,Vector,Smoother>")
-  target_link_libraries(pthreadamgtest "${CMAKE_THREAD_LIBS_INIT}")
-  # test: pthreadfastamgtest
+  target_compile_definitions(pthreadamgtest PUBLIC MYAMG=Dune::Amg::AMG<Operator,Vector,Smoother>)
+  target_link_libraries(pthreadamgtest ${CMAKE_THREAD_LIBS_INIT} ${DUNE_LIBS})
+  dune_add_test(TARGET pthreadamgtest)
+
   add_executable(pthreadfastamgtest pthreadamgtest.cc)
-  set_property(TARGET pthreadfastamgtest APPEND PROPERTY
-    COMPILE_DEFINITIONS "MYAMG=Dune::Amg::FastAMG<Operator,Vector>")
-  target_link_libraries(pthreadfastamgtest "${CMAKE_THREAD_LIBS_INIT}")
-  # test: pthreadtwoleveltest
+  target_compile_definitions(pthreadfastamgtest PUBLIC MYAMG=Dune::Amg::FastAMG<Operator,Vector>)
+  add_dune_mpi_flags(pthreadfastamgtest)
+  target_link_libraries(pthreadfastamgtest ${CMAKE_THREAD_LIBS_INIT} ${DUNE_LIBS})
+  dune_add_test(TARGET pthreadfastamgtest)
+
   add_executable(pthreadtwoleveltest pthreadtwoleveltest.cc)
-  target_link_libraries(pthreadtwoleveltest "${CMAKE_THREAD_LIBS_INIT}")
+  target_link_libraries(pthreadtwoleveltest ${CMAKE_THREAD_LIBS_INIT} ${DUNE_LIBS})
+  dune_add_test(TARGET pthreadtwoleveltest)
+
   if(SUPERLU_FOUND OR UMFPACK_FOUND)
-    # test: pthreaddirectamgtest
-    add_executable(pthreaddirectamgtest pthreadamgtest.cc)
-    set_property(TARGET pthreaddirectamgtest APPEND PROPERTY
-      COMPILE_DEFINITIONS "MYAMG=Dune::Amg::AMG<Operator,Vector,Smoother>")
-    target_link_libraries(pthreaddirectamgtest "${CMAKE_THREAD_LIBS_INIT}")
-    # test: pthreaddirectfastamgtest
-    add_executable(pthreaddirectfastamgtest pthreadamgtest.cc)
-    set_property(TARGET pthreaddirectfastamgtest APPEND PROPERTY
-      COMPILE_DEFINITIONS "MYAMG=Dune::Amg::FastAMG<Operator,Vector>")
-    target_link_libraries(pthreaddirectfastamgtest "${CMAKE_THREAD_LIBS_INIT}")
-    #test: pthreaddirecttwoleveltest
-    add_executable(pthreaddirecttwoleveltest pthreadtwoleveltest.cc)
-    target_link_libraries(pthreaddirecttwoleveltest "${CMAKE_THREAD_LIBS_INIT}")
-    # add direct solver flags
-    if(HAVE_SUPERLU)
-      add_dune_superlu_flags(pthreaddirectamgtest pthreadfastamgtest pthreaddirecttwoleveltest)
-    endif(HAVE_SUPERLU)
-    if(HAVE_UMFPACK)
-      add_dune_umfpack_flags(pthreaddirectamgtest pthreadfastamgtest pthreaddirecttwoleveltest)
-    endif(HAVE_UMFPACK)
-  endif(SUPERLU_FOUND OR UMFPACK_FOUND)
-endif(CMAKE_USE_PTHREADS_INIT)
-
-add_executable(amgtest "amgtest.cc")
-add_executable(fastamg "fastamg.cc")
+    dune_add_test(NAME pthreaddirectamgtest
+                  SOURCES pthreadamgtest.cc
+                  COMPILE_DEFINITIONS MYAMG=Dune::Amg::AMG<Operator,Vector,Smoother>
+                  LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+
+    dune_add_test(NAME pthreaddirectfastamgtest
+                  SOURCES pthreadamgtest.cc
+                  COMPILE_DEFINITIONS MYAMG=Dune::Amg::FastAMG<Operator,Vector>
+                  LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+
+    dune_add_test(NAME pthreaddirecttwoleveltest
+                  SOURCES pthreadtwoleveltest.cc
+                  LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+  endif()
+endif()
+
+# add an executable without SuperLU/UMFPack
+add_executable(amgtest amgtest.cc)
+target_link_libraries(amgtest ${DUNE_LIBS})
+dune_add_test(TARGET amgtest)
+
+add_executable(fastamg fastamg.cc)
+target_link_libraries(fastamg ${DUNE_LIBS})
+dune_add_test(TARGET fastamg)
+
 if(SUPERLU_FOUND)
-  add_executable(superluamgtest "amgtest.cc")
+  add_executable(superluamgtest amgtest.cc)
   add_dune_superlu_flags(superluamgtest)
-  add_executable(superlufastamg "fastamg.cc")
-  add_dune_superlu_flags(superlufastamg)
+  target_link_libraries(superluamgtest ${DUNE_LIBS})
+  dune_add_test(TARGET superluamgtest)
+
+  add_executable(superlufastamgtest fastamg.cc)
+  add_dune_superlu_flags(superlufastamgtest)
+  target_link_libraries(superlufastamgtest ${DUNE_LIBS})
+  dune_add_test(TARGET superlufastamgtest)
 endif(SUPERLU_FOUND)
+
 if(UMFPACK_FOUND)
-  add_executable(umfpackamgtest "amgtest.cc")
-  add_dune_umfpack_flags(umfpackamgtest)
-  add_executable(umfpackfastamg "fastamg.cc")
-  add_dune_umfpack_flags(umfpackfastamg)
+  dune_add_test(NAME umfpackamgtest
+                SOURCES amgtest.cc)
+
+  dune_add_test(NAME umfpackfastamgtest
+                SOURCES fastamg.cc)
 endif(UMFPACK_FOUND)
-add_executable(twolevelmethodtest "twolevelmethodtest.cc")
-add_dune_superlu_flags(twolevelmethodtest)
-add_executable(galerkintest "galerkintest.cc")
-add_executable(graphtest "graphtest.cc")
-add_executable(hierarchytest "hierarchytest.cc")
-add_executable(kamgtest "kamgtest.cc")
-add_dune_superlu_flags(kamgtest)
-add_executable(pamg_comm_repart_test "parallelamgtest.cc")
-set_target_properties(pamg_comm_repart_test PROPERTIES COMPILE_FLAGS "-DAMG_REPART_ON_COMM_GRAPH")
-add_executable(pamgtest "parallelamgtest.cc")
-add_dune_superlu_flags(pamgtest)
-add_executable(transfertest "transfertest.cc")
-add_executable(twolevelmethodschwarztest "twolevelmethodtest.cc")
-set_target_properties(twolevelmethodschwarztest PROPERTIES COMPILE_FLAGS "-DUSE_OVERLAPPINGSCHWARZ")
-add_dune_superlu_flags(twolevelmethodschwarztest)
-
-foreach(_exe ${ALLTESTS})
-  target_link_libraries(${_exe} "dunecommon")
-  add_test(${_exe} ${_exe})
-endforeach(_exe ${ALLTESTS})
-
-add_dune_mpi_flags("${MPITESTS}")
-add_dune_parmetis_flags("${PARMETISTESTS}")
+
+
+dune_add_test(SOURCES twolevelmethodtest.cc)
+
+dune_add_test(SOURCES galerkintest.cc)
+dune_add_test(SOURCES graphtest.cc)
+dune_add_test(SOURCES hierarchytest.cc)
+dune_add_test(SOURCES kamgtest.cc)
+
+dune_add_test(NAME pamg_comm_repart_test
+              SOURCES parallelamgtest.cc
+              COMPILE_DEFINITIONS -DAMG_REPART_ON_COMM_GRAPH)
+
+dune_add_test(NAME pamgtest
+              SOURCES parallelamgtest.cc)
+
+dune_add_test(SOURCES transfertest.cc)
+
+dune_add_test(NAME twolevelmethodschwarztest
+              SOURCES twolevelmethodtest.cc
+              COMPILE_DEFINITIONS USE_OVERLAPPINGSCHWARZ)
diff --git a/dune/istl/test/CMakeLists.txt b/dune/istl/test/CMakeLists.txt
index 81b910b8..00c68540 100644
--- a/dune/istl/test/CMakeLists.txt
+++ b/dune/istl/test/CMakeLists.txt
@@ -1,133 +1,78 @@
-set(NORMALTEST
-  basearraytest
-  bcrsassigntest
-  bvectortest
-  bcrsbuildtest
-  bcrsimplicitbuildtest
-  complexmatrixtest
-  dotproducttest
-  iotest
-  inverseoperator2prectest
-  matrixiteratortest
-  matrixtest
-  matrixutilstest
-  mmtest
-  multitypeblockmatrixtest
-  multitypeblockvectortest
-  mv
-  scaledidmatrixtest
-  seqmatrixmarkettest
-  vbvectortest)
+dune_add_test(SOURCES basearraytest.cc)
 
-if(HAVE_PARDISO)
-  set(PARDISOTEST test_pardiso)
-endif(HAVE_PARDISO)
+dune_add_test(SOURCES bcrsassigntest.cc)
 
-if(SUPERLU_FOUND)
-  set(SUPERLUTESTS
-  complexrhstest superlutest superluztest superluctest superlustest
-  )
-endif(SUPERLU_FOUND)
+dune_add_test(SOURCES dotproducttest.cc)
 
-if(UMFPACK_FOUND)
-  set(UMFPACKTESTS umfpacktest)
-endif()
+dune_add_test(SOURCES complexmatrixtest.cc)
 
-if ((SUPERLU_FOUND) OR (UMFPACK_FOUND))
-  set(OVLPSCHWARZTESTS overlappingschwarztest)
-endif()
+dune_add_test(SOURCES matrixutilstest.cc)
 
-if(HAVE_MPI)
-  set(MPITESTS vectorcommtest matrixmarkettest matrixredisttest)
-endif(HAVE_MPI)
+dune_add_test(SOURCES matrixtest.cc)
 
-set(ALLTESTS ${MPITESTS} ${NORMALTEST} ${PARDISOTEST} ${SUPERLUTESTS} ${UMFPACKTESTS} ${OVLPSCHWARZTESTS})
-
-
-# We do not want want to build the tests during make all,
-# but just build them on demand
-add_directory_test_target(_test_target)
-add_dependencies(${_test_target} ${ALLTESTS})
-
-
-include(DuneMPI)
-
-# Provide source files
-add_executable(basearraytest "basearraytest.cc")
-add_executable(bcrsassigntest "bcrsassigntest.cc")
-add_executable(dotproducttest "dotproducttest.cc")
-add_executable(complexmatrixtest "complexmatrixtest.cc")
-add_executable(matrixutilstest "matrixutilstest.cc")
-add_executable(matrixtest "matrixtest.cc")
-add_executable(bvectortest "bvectortest.cc")
-add_executable(vbvectortest "vbvectortest.cc")
-add_executable(bcrsbuildtest "bcrsbuild.cc")
-add_executable(bcrsimplicitbuildtest "bcrsimplicitbuild.cc")
-set_property(TARGET bcrsimplicitbuildtest APPEND PROPERTY COMPILE_DEFINITIONS "DUNE_ISTL_WITH_CHECKING=1")
-add_executable(matrixiteratortest "matrixiteratortest.cc")
-add_executable(mmtest mmtest.cc)
-add_executable(multitypeblockmatrixtest "multitypeblockmatrixtest.cc")
-add_executable(multitypeblockvectortest "multitypeblockvectortest.cc")
-add_executable(mv "mv.cc")
-add_executable(iotest "iotest.cc")
-add_executable(inverseoperator2prectest "inverseoperator2prectest.cc")
-add_executable(scaledidmatrixtest "scaledidmatrixtest.cc")
-add_executable(seqmatrixmarkettest "matrixmarkettest.cc")
-#set_target_properties(seqmatrixmarkettest PROPERTIES COMPILE_FLAGS
-#  "-DMMSEQUENTIAL ${MPI_DUNE_COMPILE_FLAGS} -DENABLE_MPI=1 -DMPICH_SKIP_MPICXX -DMPIPP_H")
+dune_add_test(SOURCES bvectortest.cc)
 
-if(HAVE_PARDISO)
-  add_executable(pardiso_test test_pardiso.cc)
+dune_add_test(SOURCES vbvectortest.cc)
+
+dune_add_test(SOURCES bcrsbuild.cc)
+
+dune_add_test(SOURCES bcrsimplicitbuild.cc
+              COMPILE_DEFINITIONS DUNE_ISTL_WITH_CHECKING=1)
 
-  # TODO add pardiso flags
+dune_add_test(SOURCES matrixiteratortest.cc)
+
+dune_add_test(SOURCES mmtest.cc)
+
+dune_add_test(SOURCES multitypeblockmatrixtest.cc)
+
+dune_add_test(SOURCES multitypeblockvectortest.cc)
+
+dune_add_test(SOURCES mv.cc)
+
+dune_add_test(SOURCES iotest.cc)
+
+dune_add_test(SOURCES inverseoperator2prectest.cc)
+
+dune_add_test(SOURCES scaledidmatrixtest.cc)
+
+if(HAVE_PARDISO)
+  dune_add_test(SOURCES test_pardiso.cc)
 endif(HAVE_PARDISO)
 
 if(SUPERLU_FOUND)
-  add_executable(complexrhstest complexrhstest.cc)
-  set_property(TARGET complexrhstest APPEND PROPERTY COMPILE_DEFINITIONS "SUPERLU_NTYPE=3")
-
-  add_executable(superlutest "superlutest.cc")
+  dune_add_test(NAME superlustest
+                SOURCES superlutest.cc
+                COMPILE_DEFINITIONS SUPERLU_NTYPE=0)
 
-  add_executable(superlustest "superlutest.cc")
-  set_property(TARGET superlustest APPEND PROPERTY COMPILE_DEFINITIONS "SUPERLU_NTYPE=0")
+  dune_add_test(SOURCES superlutest.cc)
 
-  add_executable(superluctest "superlutest.cc")
-  set_property(TARGET superluctest APPEND PROPERTY COMPILE_DEFINITIONS "SUPERLU_NTYPE=2")
+  dune_add_test(NAME superluctest
+                SOURCES superlutest.cc
+                COMPILE_DEFINITIONS SUPERLU_NTYPE=2)
 
-  add_executable(superluztest "superlutest.cc")
-  set_property(TARGET superluztest APPEND PROPERTY COMPILE_DEFINITIONS "SUPERLU_NTYPE=3")
+  dune_add_test(NAME superluztest
+                SOURCES superlutest.cc
+                COMPILE_DEFINITIONS SUPERLU_NTYPE=3)
 
-  add_dune_superlu_flags("${SUPERLUTESTS}")
+  dune_add_test(SOURCES complexrhstest.cc
+                COMPILE_DEFINITIONS SUPERLU_NTYPE=3)
 endif(SUPERLU_FOUND)
 
 if(UMFPACK_FOUND)
-  add_executable(umfpacktest umfpacktest.cc)
-  add_dune_umfpack_flags(umfpacktest)
+  dune_add_test(SOURCES umfpacktest.cc)
   set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "umfpack_decomp")
 endif()
 
 if ((SUPERLU_FOUND) OR (UMFPACK_FOUND))
-  add_executable(overlappingschwarztest "overlappingschwarztest.cc")
-  if (SUPERLU_FOUND)
-    add_dune_superlu_flags(overlappingschwarztest)
-  endif()
-  if (UMFPACK_FOUND)
-    add_dune_umfpack_flags(overlappingschwarztest)
-  endif()
+  dune_add_test(SOURCES overlappingschwarztest.cc)
 endif()
 
 if(HAVE_MPI)
-  add_executable(matrixredisttest "matrixredisttest.cc")
-  add_executable(vectorcommtest "vectorcommtest.cc")
-  add_executable(matrixmarkettest "matrixmarkettest.cc")
-  add_dune_mpi_flags("${MPITESTS}")
-  add_dune_parmetis_flags(matrixredisttest)
-endif(HAVE_MPI)
+  dune_add_test(SOURCES matrixredisttest.cc)
+
+  dune_add_test(SOURCES vectorcommtest.cc)
 
-foreach(_exe ${ALLTESTS})
-  target_link_libraries(${_exe} "dunecommon")
-  add_test(${_exe} ${_exe})
-endforeach(_exe ${ALLTESTS})
+  dune_add_test(SOURCES matrixmarkettest.cc)
+endif(HAVE_MPI)
 
-exclude_from_headercheck(
-  complexdata.hh)
+exclude_from_headercheck(complexdata.hh)
-- 
GitLab