Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
reorganize *LinkImpl stuff
[simgrid.git] / tools / cmake / Tests.cmake
1 SET(TESH_OPTION "--ignore-jenkins")
2 SET(TESH_COMMAND "${PYTHON_EXECUTABLE}" ${CMAKE_BINARY_DIR}/bin/tesh)
3
4 SET(TESH_LIBRARY_PATH "${CMAKE_BINARY_DIR}/lib")
5 if(NOT $ENV{LD_LIBRARY_PATH} STREQUAL "")
6   SET(TESH_LIBRARY_PATH "${TESH_LIBRARY_PATH}:$ENV{LD_LIBRARY_PATH}")
7 endif()
8
9 IF(enable_memcheck)
10   INCLUDE(FindValgrind)
11
12   if (NOT VALGRIND_EXE MATCHES "NOTFOUND")
13     execute_process(COMMAND ${VALGRIND_EXE} --version  OUTPUT_VARIABLE "VALGRIND_VERSION")
14     message(STATUS "Valgrind version: ${VALGRIND_VERSION}")
15
16     set(TESH_WRAPPER ${CMAKE_HOME_DIRECTORY}/tools/cmake/scripts/my_valgrind.pl)
17     set(TESH_WRAPPER ${TESH_WRAPPER}\ --trace-children=yes\ --trace-children-skip=/usr/bin/*,/bin/*\ --leak-check=full\ --show-reachable=yes\ --track-origins=no\ --read-var-info=no\ --num-callers=20\ --suppressions=${CMAKE_HOME_DIRECTORY}/tools/simgrid.supp\ )
18     if(enable_memcheck_xml)
19       SET(TESH_WRAPPER ${TESH_WRAPPER}\ --xml=yes\ --xml-file=memcheck_test_%p.memcheck\ --child-silent-after-fork=yes\ )
20     endif()
21     set(TESH_OPTION ${TESH_OPTION} --setenv VALGRIND_NO_LEAK_CHECK=--leak-check=no\ --show-leak-kinds=none)
22
23 #    message(STATUS "tesh wrapper: ${TESH_WRAPPER}")
24
25     mark_as_advanced(TESH_WRAPPER)
26   else()
27     set(enable_memcheck false)
28     message(STATUS "Error: Command valgrind not found --> enable_memcheck autoset to false.")
29   endif()
30 ENDIF()
31 SET(TESH_WRAPPER_UNBOXED "${TESH_WRAPPER}")
32 SEPARATE_ARGUMENTS(TESH_WRAPPER_UNBOXED)
33
34 #some tests may take forever on non futexes systems, using busy_wait with n cores < n workers
35 # default to posix for these tests if futexes are not supported
36 IF(NOT HAVE_FUTEX_H)
37   SET(CONTEXTS_SYNCHRO --cfg contexts/synchro:posix)
38 ENDIF()
39
40 MACRO(ADD_TESH NAME)
41   SET(ARGT ${ARGV})
42   LIST(REMOVE_AT ARGT 0)
43   IF(WIN32)
44     STRING(REPLACE "§" "\;" ARGT "${ARGT}")
45   ENDIF()
46   if(TESH_WRAPPER)
47     ADD_TEST(${NAME} ${TESH_COMMAND} --wrapper "${TESH_WRAPPER}" ${TESH_OPTION} ${ARGT})
48   else()
49     ADD_TEST(${NAME} ${TESH_COMMAND} ${TESH_OPTION} ${ARGT})
50   endif()
51 ENDMACRO()
52
53 # Build a list variable named FACTORIES_LIST with the given arguments, but:
54 # - replace wildcard "*" with all known factories
55 # - if the list begins with "^", take the complement
56 # - finally remove unsupported factories
57 #
58 # Used by ADD_TESH_FACTORIES, and SET_TESH_PROPERTIES
59 MACRO(SETUP_FACTORIES_LIST)
60   set(ALL_KNOWN_FACTORIES "thread;boost;raw;ucontext")
61
62   if("${ARGV}" STREQUAL "*")    # take all known factories
63     SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES})
64   elseif("${ARGV}" MATCHES "^\\^") # exclude given factories
65     SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES})
66     STRING(SUBSTRING "${ARGV}" 1 -1 EXCLUDED)
67     LIST(REMOVE_ITEM FACTORIES_LIST ${EXCLUDED})
68   else()                        # take given factories
69     SET(FACTORIES_LIST "${ARGV}")
70   endif()
71
72   # Exclude unsupported factories. Threads are always available, thanks to C++11 threads.
73   if(NOT HAVE_BOOST_CONTEXTS)
74     LIST(REMOVE_ITEM FACTORIES_LIST "boost")
75   endif()
76   if(NOT HAVE_RAW_CONTEXTS)
77     LIST(REMOVE_ITEM FACTORIES_LIST "raw")
78   endif()
79   if(NOT HAVE_UCONTEXT_CONTEXTS)
80     LIST(REMOVE_ITEM FACTORIES_LIST "ucontext")
81   endif()
82
83   # Check that there is no unknown factory
84   FOREACH(FACTORY ${FACTORIES_LIST})
85     if(NOT FACTORY IN_LIST ALL_KNOWN_FACTORIES)
86       message(FATAL_ERROR "Unknown factory: ${FACTORY}")
87     endif()
88   ENDFOREACH()
89 ENDMACRO()
90
91 MACRO(ADD_TESH_FACTORIES NAME FACTORIES)
92   SET(ARGR ${ARGV})
93   LIST(REMOVE_AT ARGR 0) # remove name
94   FOREACH(I ${FACTORIES}) # remove all factories
95     LIST(REMOVE_AT ARGR 0)
96   ENDFOREACH()
97   SETUP_FACTORIES_LIST(${FACTORIES})
98   FOREACH(FACTORY ${FACTORIES_LIST})
99     ADD_TESH("${NAME}-${FACTORY}" "--cfg" "contexts/factory:${FACTORY}" ${ARGR})
100   ENDFOREACH()
101 ENDMACRO()
102
103 MACRO(SET_TESH_PROPERTIES NAME FACTORIES)
104   SET(ARGR ${ARGV})
105   LIST(REMOVE_AT ARGR 0) # remove name
106   FOREACH(I ${FACTORIES}) # remove all factories
107     LIST(REMOVE_AT ARGR 0)
108   ENDFOREACH()
109   SETUP_FACTORIES_LIST(${FACTORIES})
110   FOREACH(FACTORY ${FACTORIES_LIST})
111     set_tests_properties("${NAME}-${FACTORY}" PROPERTIES ${ARGR})
112   ENDFOREACH()
113 ENDMACRO()
114
115 IF(enable_java)
116   IF(WIN32)
117     SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/deprecated/java/\;${CMAKE_BINARY_DIR}/teshsuite/java/\;${SIMGRID_JAR}")
118     STRING(REPLACE "\;" "§" TESH_CLASSPATH "${TESH_CLASSPATH}")
119   ELSE()
120     SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/deprecated/java/:${CMAKE_BINARY_DIR}/teshsuite/java/:${SIMGRID_JAR}")
121   ENDIF()
122 ENDIF()
123
124 # New tests should use the Catch Framework
125 set(UNIT_TESTS  src/xbt/unit-tests_main.cpp
126                 src/kernel/resource/NetworkModelIntf_test.cpp
127                 src/kernel/resource/SplitDuplexLinkImpl_test.cpp
128                 src/kernel/resource/profile/Profile_test.cpp
129                 src/kernel/routing/DijkstraZone_test.cpp
130                 src/kernel/routing/DragonflyZone_test.cpp
131                 src/kernel/routing/FatTreeZone_test.cpp
132                 src/kernel/routing/FloydZone_test.cpp
133                 src/kernel/routing/FullZone_test.cpp
134                 src/kernel/routing/StarZone_test.cpp
135                 src/kernel/routing/TorusZone_test.cpp
136                 src/xbt/config_test.cpp
137                 src/xbt/dict_test.cpp
138                 src/xbt/dynar_test.cpp
139                 src/xbt/random_test.cpp
140                 src/xbt/xbt_str_test.cpp
141                 src/kernel/lmm/maxmin_test.cpp)
142 if (SIMGRID_HAVE_MC)
143   set(UNIT_TESTS ${UNIT_TESTS} src/mc/sosp/Snapshot_test.cpp src/mc/sosp/PageStore_test.cpp)
144 else()
145   set(EXTRA_DIST ${EXTRA_DIST} src/mc/sosp/Snapshot_test.cpp src/mc/sosp/PageStore_test.cpp)
146 endif()
147 set(EXTRA_DIST ${EXTRA_DIST} src/kernel/routing/NetZone_test.hpp)
148
149 add_executable       (unit-tests EXCLUDE_FROM_ALL ${UNIT_TESTS})
150 add_dependencies     (tests unit-tests)
151 target_link_libraries(unit-tests simgrid)
152 ADD_TEST(unit-tests ${CMAKE_BINARY_DIR}/unit-tests)
153 set_property(TARGET unit-tests APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
154 set(EXTRA_DIST ${EXTRA_DIST} ${UNIT_TESTS})
155
156 unset(UNIT_TESTS)