From 22a9d2a8dfbb69989021115bce95d651e159ad26 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christoph=20Gr=C3=BCninger?= <gruenich@dune-project.org>
Date: Wed, 14 Mar 2012 17:05:59 +0000
Subject: [PATCH] [CMake] Most tests are run correctly, some fail due to an
 exception or missing MPI support. Module name, version and email address is
 extracted from dune.module.

[[Imported from SVN: r6587]]
---
 CMakeLists.txt                  | 103 ++++++++++++++++++++++++--------
 cmake/modules/DuneMacros.cmake  |  24 ++++++++
 config.h.cmake                  |   3 +-
 dune/common/test/CMakeLists.txt |  85 +++++++++++++++++++++-----
 4 files changed, 173 insertions(+), 42 deletions(-)
 create mode 100644 cmake/modules/DuneMacros.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15a66bf3b..22591a1ce 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,14 +1,16 @@
 # general stuff
 cmake_minimum_required(VERSION 2.8)
-set(ProjectName            "dune-common")
-set(ProjectVersion         "2.2-svn")
-set(ProjectMaintainer      "DUNE Project")
-set(ProjectMaintainerEmail "dune@dune-project.org")
-project(${ProjectName} C CXX)
 
 # make sure our own modules are found
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
 
+include(DuneMacros)
+dune_module_information(${CMAKE_SOURCE_DIR})
+set(ProjectName            "${DUNE_MODULE_NAME}")
+set(ProjectVersion         "${DUNE_VERSION_STRING}")
+set(ProjectMaintainerEmail "${DUNE_MAINTAINER}")
+project(${ProjectName} C CXX)
+
 # include dune-common to include pathtest
 include_directories("${CMAKE_SOURCE_DIR}")
 link_directories("${CMAKE_SOURCE_DIR}")
@@ -27,8 +29,13 @@ check_include_file_cxx("memory" HAVE_MEMORY)
 set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -DHAVE_MEMORY=${HAVE_MEMORY}")
 
 # search for packages
-find_package(MPI)
-set(HAVE_MPI MPI_CXX_FOUND)
+#find_package(MPI)
+#set(HAVE_MPI MPI_CXX_FOUND)
+#include_directories(${MPI_CXX_INCLUDE_PATH})
+#set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_CXX_COMPILE_FLAGS})
+#set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_CXX_LINK_FLAGS})
+#include_directories(${MPI_CXX_INCLUDE_PATH})
+
 find_package(Boost)
 set(HAVE_BOOST BOOST_FOUND)
 find_package(SharedPtr)
@@ -49,43 +56,91 @@ add_test(arraylisttest			dune/common/test/arraylisttest)
 add_test(arraytest			dune/common/test/arraytest)
 add_test(bigunsignedinttest		dune/common/test/bigunsignedinttest)
 add_test(bitsetvectortest		dune/common/test/bitsetvectortest)
+add_test(check_fvector_size			dune/common/test/check_fvector_size)
 add_test(conversiontest			dune/common/test/conversiontest)
 add_test(deprtuplestest			dune/common/test/deprtuplestest)
 add_test(dynmatrixtest			dune/common/test/dynmatrixtest)
 add_test(dynvectortest			dune/common/test/dynvectortest)
 add_test(enumsettest			dune/common/test/enumsettest)
-add_test(fassigntest			dune/common/test/fassigntest)
 add_test(fmatrixtest			dune/common/test/fmatrixtest)
 add_test(fvectortest			dune/common/test/fvectortest)
 add_test(gcdlcmtest			dune/common/test/gcdlcmtest)
-add_test(iteratorfacadetest2		dune/common/test/iteratorfacadetest2)
 add_test(iteratorfacadetest		dune/common/test/iteratorfacadetest)
+add_test(iteratorfacadetest2		dune/common/test/iteratorfacadetest2)
 add_test(lrutest			dune/common/test/lrutest)
+if(MPI_CXX_FOUND)
+  add_test(mpicollectivecommunication			dune/common/test/mpicollectivecommunication)
+endif(MPI_CXX_FOUND)
 add_test(mpiguardtest			dune/common/test/mpiguardtest)
 add_test(mpihelpertest			dune/common/test/mpihelpertest)
-add_test(nullptr-test2			dune/common/test/nullptr-test2)
-add_test(nullptr-test			dune/common/test/nullptr-test)
+add_test(mpihelpertest2			dune/common/test/mpihelpertest2)
+add_test(nullptr_test			dune/common/test/nullptr_test)
 add_test(parametertreetest		dune/common/test/parametertreetest)
 add_test(pathtest			dune/common/test/pathtest)
 add_test(poolallocatortest		dune/common/test/poolallocatortest)
-add_test(shared_ptrtest			dune/common/test/shared_ptrtest)
+add_test(shared_ptrtest_config			dune/common/test/shared_ptrtest_config)
+add_test(shared_ptrtest_dune			dune/common/test/shared_ptrtest_dune)
 add_test(singletontest			dune/common/test/singletontest)
-add_test(sllisttest			dune/common/test/sllisttest)
-add_test(NAME static_assert_test
-  COMMAND ${CMAKE_COMMAND} --build . --target static_assert_test --config $<CONFIGURATION>)
-add_test(NAME static_assert_test_fail
-  COMMAND ${CMAKE_COMMAND} --build . --target static_assert_test_fail --config $<CONFIGURATION>)
-set_tests_properties(static_assert_test_fail PROPERTIES WILL_FAIL true)
 add_test(streamtest			dune/common/test/streamtest)
+add_test(testfassign1			dune/common/test/testfassign1)
 add_test(testfassign2			dune/common/test/testfassign2)
-add_test(testfassign			dune/common/test/testfassign)
-add_test(testfconstruct			dune/common/test/testfconstruct)
-add_test(test-stack			dune/common/test/test-stack)
-add_test(tuplestest			dune/common/test/tuplestest)
+add_test(testfassign3			dune/common/test/testfassign3)
+add_test(testfassign4			dune/common/test/testfassign4)
+add_test(test_stack			dune/common/test/test_stack)
+add_test(tuplestest_config			dune/common/test/tuplestest_config)
+add_test(tuplestest_dune			dune/common/test/tuplestest_dune)
+add_test(tuplestest_tr1			dune/common/test/tuplestest_tr1)
 add_test(tupleutilitytest		dune/common/test/tupleutilitytest)
 add_test(utilitytest			dune/common/test/utilitytest)
+# failing tests
+add_test(testfassign_fail1			dune/common/test/testfassign_fail1)
+add_test(testfassign_fail2			dune/common/test/testfassign_fail2)
+add_test(testfassign_fail3			dune/common/test/testfassign_fail3)
+add_test(testfassign_fail4			dune/common/test/testfassign_fail4)
+add_test(testfassign_fail5			dune/common/test/testfassign_fail5)
+add_test(testfassign_fail6			dune/common/test/testfassign_fail6)
+set_tests_properties(
+  testfassign_fail1
+  testfassign_fail2
+  testfassign_fail3
+  testfassign_fail4
+  testfassign_fail5
+  testfassign_fail6
+  PROPERTIES WILL_FAIL true)
+# compile test
+add_test(NAME static_assert_test
+  COMMAND ${CMAKE_COMMAND} --build . --target static_assert_test --config $<CONFIGURATION>)
+add_test(NAME testfconstruct
+  COMMAND ${CMAKE_COMMAND} --build . --target testfconstruct --config $<CONFIGURATION>)
+# failing compile tests
+add_test(NAME genericiterator_compile_fail
+  COMMAND ${CMAKE_COMMAND} --build . --target genericiterator_compile_fail --config $<CONFIGURATION>)
+add_test(NAME check_fvector_size_fail1
+  COMMAND ${CMAKE_COMMAND} --build . --target check_fvector_size_fail1 --config $<CONFIGURATION>)
+add_test(NAME check_fvector_size_fail2
+  COMMAND ${CMAKE_COMMAND} --build . --target check_fvector_size_fail2 --config $<CONFIGURATION>)
+add_test(NAME nullptr_test_fail
+  COMMAND ${CMAKE_COMMAND} --build . --target nullptr_test_fail --config $<CONFIGURATION>)
+add_test(NAME static_assert_test_fail
+  COMMAND ${CMAKE_COMMAND} --build . --target static_assert_test_fail --config $<CONFIGURATION>)
+add_test(NAME testfconstruct_fail1
+  COMMAND ${CMAKE_COMMAND} --build . --target testfconstruct_fail1 --config $<CONFIGURATION>)
+add_test(NAME testfconstruct_fail2
+  COMMAND ${CMAKE_COMMAND} --build . --target testfconstruct_fail2 --config $<CONFIGURATION>)
+set_tests_properties(
+  genericiterator_compile_fail
+  check_fvector_size_fail1
+  check_fvector_size_fail2
+  nullptr_test_fail
+  static_assert_test_fail
+  testfconstruct_fail1
+  testfconstruct_fail2
+  PROPERTIES WILL_FAIL true)
+
 # add tests from dune/common/parallel/test
 add_test(indexsettest			dune/common/parallel/test/indexsettest)
-add_test(indicestest			dune/common/parallel/test/indicestest)
 add_test(selectiontest			dune/common/parallel/test/selectiontest)
-add_test(syncertest			dune/common/parallel/test/syncertest)
+if(MPI_CXX_FOUND)
+  add_test(indicestest			dune/common/parallel/test/indicestest)
+  add_test(syncertest			dune/common/parallel/test/syncertest)
+endif(MPI_CXX_FOUND)
diff --git a/cmake/modules/DuneMacros.cmake b/cmake/modules/DuneMacros.cmake
new file mode 100644
index 000000000..ad257a57e
--- /dev/null
+++ b/cmake/modules/DuneMacros.cmake
@@ -0,0 +1,24 @@
+# add dune-common version from dune.module to config.h
+macro(dune_module_information MODULE_DIR)
+  file(READ "${MODULE_DIR}/dune.module" DUNE_MODULE)
+
+  # find version string
+  string(REGEX REPLACE ".*Version:[ ]*([^ \n]+).*" "\\1" DUNE_VERSION_STRING "${DUNE_MODULE}")
+  string(REGEX REPLACE "([0-9]).*" "\\1" DUNE_VERSION_MAJOR "${DUNE_VERSION_STRING}")
+  string(REGEX REPLACE "[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_MINOR "${DUNE_VERSION_STRING}")
+  string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_REVISION "${DUNE_VERSION_STRING}")
+
+  # remove false matches in version string
+  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_MINOR}")
+  if(NON_NUMBER_CHARACTER)
+    set(DUNE_COMMON_VERSION_MINOR "0")
+  endif(NON_NUMBER_CHARACTER)
+  string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_REVISION}")
+  if(NON_NUMBER_CHARACTER)
+    set(DUNE_COMMON_VERSION_REVISION "0")
+  endif(NON_NUMBER_CHARACTER)
+
+  # find strings for module name, maintainer
+  string(REGEX REPLACE ".*Module:[ ]*([^ \n]+).*" "\\1" DUNE_MODULE_NAME "${DUNE_MODULE}")
+  string(REGEX REPLACE ".*Maintainer:[ ]*([^ \n]+).*" "\\1" DUNE_MAINTAINER "${DUNE_MODULE}")
+endmacro(dune_module_information)
diff --git a/config.h.cmake b/config.h.cmake
index c815e3810..9bc9c8313 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -1,7 +1,6 @@
 #define DUNE_COMMON_FIELDVECTOR_SIZE_IS_METHOD 1
 
-/* #cmake define01 HAVE_MPI */
-#define HAVE_MPI 0
+#cmakedefine01 HAVE_MPI
 #cmakedefine01 HAVE_MALLOC_H
 #cmakedefine01 HAVE_BOOST
 
diff --git a/dune/common/test/CMakeLists.txt b/dune/common/test/CMakeLists.txt
index 1db2f166b..baa6be480 100644
--- a/dune/common/test/CMakeLists.txt
+++ b/dune/common/test/CMakeLists.txt
@@ -5,6 +5,11 @@ add_executable("bigunsignedinttest" bigunsignedinttest.cc)
 target_link_libraries("bigunsignedinttest" "dunecommon")
 
 add_executable("bitsetvectortest" bitsetvectortest.cc)
+add_executable("check_fvector_size" check_fvector_size.cc)
+add_executable("check_fvector_size_fail1" EXCLUDE_FROM_ALL check_fvector_size_fail.cc)
+set_target_properties(check_fvector_size_fail1 PROPERTIES COMPILE_FLAGS "-DDIM=1")
+add_executable("check_fvector_size_fail2" EXCLUDE_FROM_ALL check_fvector_size_fail.cc)
+set_target_properties(check_fvector_size_fail2 PROPERTIES COMPILE_FLAGS "-DDIM=3")
 add_executable("conversiontest" conversiontest.cc)
 add_executable("deprtuplestest" deprtuplestest.cc)
 
@@ -22,18 +27,25 @@ target_link_libraries("fmatrixtest" "dunecommon")
 
 add_executable("fvectortest" fvectortest.cc)
 add_executable("gcdlcmtest" gcdlcmtest.cc)
+add_executable("genericiterator_compile_fail" EXCLUDE_FROM_ALL genericiterator_compile_fail.cc)
 add_executable("iteratorfacadetest2" iteratorfacadetest2.cc)
 add_executable("iteratorfacadetest" iteratorfacadetest.cc)
 add_executable("lrutest" lrutest.cc)
-
 add_executable("mpiguardtest" mpiguardtest.cc)
 target_link_libraries("mpiguardtest" "dunecommon")
-
+#target_link_libraries(mpiguardtest ${MPI_CXX_LIBRARIES})
+add_executable("mpicollectivecommunication" mpicollectivecommunication.cc)
+#target_link_libraries(mpicollectivecommunication ${MPI_CXX_LIBRARIES})
 add_executable("mpihelpertest" mpihelpertest.cc)
-add_executable("nullptr-test" nullptr-test.cc)
-
-#add_executable("nullptr-test2" nullptr-test2.cc)
-#target_link_libraries("nullptr-test2" "dunecommon")
+#target_link_libraries(mpihelpertest ${MPI_CXX_LIBRARIES})
+add_executable("mpihelpertest2" mpihelpertest.cc)
+#target_link_libraries(mpihelpertest2 ${MPI_CXX_LIBRARIES})
+set_target_properties(mpihelpertest2 PROPERTIES COMPILE_FLAGS "-DMPIHELPER_PREINITIALIZE")
+add_executable("nullptr_test" nullptr-test.cc nullptr-test2.cc)
+target_link_libraries(nullptr_test "dunecommon")
+add_executable("nullptr_test_fail" EXCLUDE_FROM_ALL nullptr-test.cc)
+target_link_libraries(nullptr_test_fail "dunecommon")
+set_target_properties(nullptr_test_fail PROPERTIES COMPILE_FLAGS "-DFAIL")
 
 add_executable("parametertreetest" parametertreetest.cc)
 target_link_libraries("parametertreetest" "dunecommon")
@@ -42,22 +54,63 @@ add_executable("pathtest" pathtest.cc)
 target_link_libraries("pathtest" "dunecommon")
 
 add_executable("poolallocatortest" poolallocatortest.cc)
-add_executable("shared_ptrtest" shared_ptrtest.cc)
+add_executable("shared_ptrtest_config" shared_ptrtest.cc)
+add_executable("shared_ptrtest_dune" shared_ptrtest.cc)
+set_target_properties(shared_ptrtest_dune PROPERTIES COMPILE_FLAGS "-DDISABLE_CONFIGURED_SHARED_PTR")
 add_executable("singletontest" singletontest.cc)
-add_executable("sllisttest" sllisttest.cc)
+add_executable("sllisttest" EXCLUDE_FROM_ALL sllisttest.cc)
 add_executable("static_assert_test" EXCLUDE_FROM_ALL static_assert_test.cc)
 add_executable("static_assert_test_fail" EXCLUDE_FROM_ALL static_assert_test_fail.cc)
 
 add_executable("streamtest" streamtest.cc)
 target_link_libraries("streamtest" "dunecommon")
 
-#add_executable("testfassign" testfassign.cc)
-#add_executable("testfassign2" testfassign2.cc)
-#add_executable("testfconstruct" testfconstruct.cc)
-
-add_executable("test-stack" test-stack.cc)
-target_link_libraries("test-stack" "dunecommon")
-
-add_executable("tuplestest" tuplestest.cc)
+add_executable("testfassign1" testfassign.cc testfassign2.cc)
+set_target_properties(testfassign1 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=3 -D_VALUES=\"1,2,3\"")
+target_link_libraries(testfassign1 "dunecommon")
+add_executable("testfassign2" testfassign.cc)
+set_target_properties(testfassign2 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=3 -D_VALUES=\"1,zero\"")
+target_link_libraries(testfassign2 "dunecommon")
+add_executable("testfassign3" testfassign.cc)
+set_target_properties(testfassign3 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=3 -D_VALUES=\"zero\"")
+target_link_libraries(testfassign3 "dunecommon")
+add_executable("testfassign4" testfassign.cc)
+set_target_properties(testfassign4 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=2 -D_DUNE_TEST_M=3 -D_VALUES=\"1, zero, nextRow, 2, 3, 4\"")
+target_link_libraries(testfassign4 "dunecommon")
+add_executable("testfassign_fail1" testfassign.cc)
+set_target_properties(testfassign_fail1 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=3 -D_VALUES=\"1,2\"")
+target_link_libraries(testfassign_fail1 "dunecommon")
+add_executable("testfassign_fail2" testfassign.cc)
+set_target_properties(testfassign_fail2 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=3 -D_VALUES=\"1,2,3,4\"")
+target_link_libraries(testfassign_fail2 "dunecommon")
+add_executable("testfassign_fail3" testfassign.cc)
+set_target_properties(testfassign_fail3 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=2 -D_DUNE_TEST_M=2 -D_VALUES=\"1, nextRow, 2, 3\"")
+target_link_libraries(testfassign_fail3 "dunecommon")
+add_executable("testfassign_fail4" testfassign.cc)
+set_target_properties(testfassign_fail4 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=2 -D_DUNE_TEST_M=2 -D_VALUES=\"1, 2, 3, nextRow, 2, 3\"")
+target_link_libraries(testfassign_fail4 "dunecommon")
+add_executable("testfassign_fail5" testfassign.cc)
+set_target_properties(testfassign_fail5 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=2 -D_DUNE_TEST_M=2 -D_VALUES=\"1, 2\"")
+target_link_libraries(testfassign_fail5 "dunecommon")
+add_executable("testfassign_fail6" testfassign.cc)
+set_target_properties(testfassign_fail6 PROPERTIES COMPILE_FLAGS "-D_DUNE_TEST_N=2 -D_DUNE_TEST_M=2 -D_VALUES=\"1, 2, nextRow, 2, 3, nextRow, 4, 5\"")
+target_link_libraries(testfassign_fail6 "dunecommon")
+
+add_executable("testfconstruct" EXCLUDE_FROM_ALL testfconstruct.cc)
+set_target_properties(testfconstruct PROPERTIES COMPILE_FLAGS "-DFVSIZE=3")
+target_link_libraries(testfconstruct "dunecommon")
+add_executable("testfconstruct_fail1" EXCLUDE_FROM_ALL testfconstruct.cc)
+set_target_properties(testfconstruct_fail1 PROPERTIES COMPILE_FLAGS "-DFVSIZE=2")
+target_link_libraries(testfconstruct_fail1 "dunecommon")
+add_executable("testfconstruct_fail2" EXCLUDE_FROM_ALL testfconstruct.cc)
+set_target_properties(testfconstruct_fail2 PROPERTIES COMPILE_FLAGS "-DFVSIZE=5")
+target_link_libraries(testfconstruct_fail2 "dunecommon")
+add_executable("test_stack" test-stack.cc)
+target_link_libraries("test_stack" "dunecommon")
+add_executable("tuplestest_config" tuplestest.cc)
+add_executable("tuplestest_dune" tuplestest.cc)
+set_target_properties(tuplestest_dune PROPERTIES COMPILE_FLAGS "-DDISABLE_TR1_TUPLE -DDISABLE_STD_TUPLE")
+add_executable("tuplestest_tr1" tuplestest.cc)
+set_target_properties(tuplestest_tr1 PROPERTIES COMPILE_FLAGS "-DDISABLE_STD_TUPLE")
 add_executable("tupleutilitytest" tupleutilitytest.cc)
 add_executable("utilitytest" utilitytest.cc)
-- 
GitLab