File: Tests.cmake

package info (click to toggle)
simgrid 4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 39,192 kB
  • sloc: cpp: 124,913; ansic: 66,744; python: 8,560; java: 6,773; fortran: 6,079; f90: 5,123; xml: 4,587; sh: 2,194; perl: 1,436; makefile: 111; lisp: 49; javascript: 7; sed: 6
file content (159 lines) | stat: -rw-r--r-- 6,318 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
SET(TESH_OPTION "--ignore-jenkins")
SET(TESH_COMMAND "${PYTHON_EXECUTABLE}" ${CMAKE_BINARY_DIR}/bin/tesh)

SET(TESH_LIBRARY_PATH "${CMAKE_BINARY_DIR}/lib")
if(NOT $ENV{LD_LIBRARY_PATH} STREQUAL "")
  SET(TESH_LIBRARY_PATH "${TESH_LIBRARY_PATH}:$ENV{LD_LIBRARY_PATH}")
endif()

IF(enable_memcheck)
  INCLUDE(FindValgrind)

  if (NOT VALGRIND_EXE MATCHES "NOTFOUND")
    execute_process(COMMAND ${VALGRIND_EXE} --version  OUTPUT_VARIABLE "VALGRIND_VERSION")
    message(STATUS "Valgrind version: ${VALGRIND_VERSION}")

    set(VALGRIND_WRAPPER ${CMAKE_HOME_DIRECTORY}/tools/cmake/scripts/my_valgrind.pl)
    set(VALGRIND_WRAPPER ${VALGRIND_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\ )
    if(enable_memcheck_xml)
      SET(VALGRIND_WRAPPER ${VALGRIND_WRAPPER}\ --xml=yes\ --xml-file=memcheck_test_%p.memcheck\ --child-silent-after-fork=yes\ )
    endif()
    set(TESH_OPTION ${TESH_OPTION} --setenv VALGRIND_NO_LEAK_CHECK=--leak-check=no\ --show-leak-kinds=none)
    set(TESH_OPTION ${TESH_OPTION} --setenv VALGRIND_NO_TRACE_CHILDREN=--trace-children=no)

#    message(STATUS "tesh wrapper: ${VALGRIND_WRAPPER}")

    mark_as_advanced(VALGRIND_WRAPPER)
  else()
    set(enable_memcheck false)
    message(STATUS "Error: Command valgrind not found --> enable_memcheck autoset to false.")
  endif()
ENDIF()
SET(VALGRIND_WRAPPER_UNBOXED "${VALGRIND_WRAPPER}")
SEPARATE_ARGUMENTS(VALGRIND_WRAPPER_UNBOXED)

#some tests may take forever on non futexes systems, using busy_wait with n cores < n workers
# default to posix for these tests if futexes are not supported
IF(NOT HAVE_FUTEX_H)
  SET(CONTEXTS_SYNCHRO --cfg contexts/synchro:posix)
ENDIF()

MACRO(ADD_TESH NAME)
  SET(ARGT ${ARGV})
  LIST(REMOVE_AT ARGT 0)
  if(VALGRIND_WRAPPER)
    ADD_TEST(${NAME} ${TESH_COMMAND} --wrapper "${VALGRIND_WRAPPER}" ${TESH_OPTION} ${ARGT})
  else()
    ADD_TEST(${NAME} ${TESH_COMMAND} ${TESH_OPTION} ${ARGT})
  endif()
ENDMACRO()

# Build a list variable named FACTORIES_LIST with the given arguments, but:
# - replace wildcard "*" with all known factories
# - if the list begins with "^", take the complement
# - finally remove unsupported factories
#
# Used by ADD_TESH_FACTORIES, and SET_TESH_PROPERTIES
MACRO(SETUP_FACTORIES_LIST)
  set(ALL_KNOWN_FACTORIES "thread;boost;raw")

  if("${ARGV}" STREQUAL "*")    # take all known factories
    SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES})
  elseif("${ARGV}" MATCHES "^\\^") # exclude given factories
    SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES})
    STRING(SUBSTRING "${ARGV}" 1 -1 EXCLUDED)
    LIST(REMOVE_ITEM FACTORIES_LIST ${EXCLUDED})
  else()                        # take given factories
    SET(FACTORIES_LIST "${ARGV}")
  endif()

  # Exclude unsupported factories. Threads are always available, thanks to C++11 threads.
  if(NOT HAVE_BOOST_CONTEXTS)
    LIST(REMOVE_ITEM FACTORIES_LIST "boost")
  endif()
  if(NOT HAVE_RAW_CONTEXTS)
    LIST(REMOVE_ITEM FACTORIES_LIST "raw")
  endif()

  # Check that there is no unknown factory
  FOREACH(FACTORY ${FACTORIES_LIST})
    if(NOT FACTORY IN_LIST ALL_KNOWN_FACTORIES)
      message(FATAL_ERROR "Unknown factory: ${FACTORY}")
    endif()
  ENDFOREACH()
ENDMACRO()

MACRO(ADD_TESH_FACTORIES NAME FACTORIES)
  SET(ARGR ${ARGV})
  LIST(REMOVE_AT ARGR 0) # remove name
  FOREACH(I ${FACTORIES}) # remove all factories
    LIST(REMOVE_AT ARGR 0)
  ENDFOREACH()
  SETUP_FACTORIES_LIST(${FACTORIES})
  FOREACH(FACTORY ${FACTORIES_LIST})
    ADD_TESH("${NAME}-${FACTORY}" "--cfg" "contexts/factory:${FACTORY}" ${ARGR})
  ENDFOREACH()
ENDMACRO()

MACRO(SET_TESH_PROPERTIES NAME FACTORIES)
  SET(ARGR ${ARGV})
  LIST(REMOVE_AT ARGR 0) # remove name
  FOREACH(I ${FACTORIES}) # remove all factories
    LIST(REMOVE_AT ARGR 0)
  ENDFOREACH()
  SETUP_FACTORIES_LIST(${FACTORIES})
  FOREACH(FACTORY ${FACTORIES_LIST})
    set_tests_properties("${NAME}-${FACTORY}" PROPERTIES ${ARGR})
  ENDFOREACH()
ENDMACRO()

# New tests should use the Catch Framework
set(UNIT_TESTS  src/xbt/unit-tests_main.cpp
                src/kernel/resource/NetworkModelFactors_test.cpp
                src/kernel/resource/SplitDuplexLinkImpl_test.cpp
                src/kernel/resource/profile/Profile_test.cpp
                src/kernel/routing/DijkstraZone_test.cpp
                src/kernel/routing/DragonflyZone_test.cpp
                src/kernel/routing/FatTreeZone_test.cpp
                src/kernel/routing/FloydZone_test.cpp
                src/kernel/routing/FullZone_test.cpp
                src/kernel/routing/StarZone_test.cpp
                src/kernel/routing/TorusZone_test.cpp
                src/xbt/config_test.cpp
                src/xbt/dict_test.cpp
                src/xbt/dynar_test.cpp
                src/xbt/random_test.cpp
                src/xbt/xbt_str_test.cpp
                src/xbt/utils/iter/subsets_tests.cpp
                src/kernel/lmm/maxmin_test.cpp)

set(MC_UNIT_TESTS src/mc/explo/odpor/ClockVector_test.cpp
                  src/mc/explo/odpor/Execution_test.cpp
                  src/mc/explo/odpor/WakeupTree_test.cpp
                  
                  src/mc/explo/udpor/Unfolding_test.cpp
                  src/mc/explo/udpor/UnfoldingEvent_test.cpp
                  src/mc/explo/udpor/EventSet_test.cpp
                  src/mc/explo/udpor/ExtensionSet_test.cpp
                  src/mc/explo/udpor/History_test.cpp
                  src/mc/explo/udpor/Configuration_test.cpp)
if (SIMGRID_HAVE_MC)
  set(UNIT_TESTS ${UNIT_TESTS} ${MC_UNIT_TESTS})
else()
  set(EXTRA_DIST ${EXTRA_DIST} ${MC_UNIT_TESTS})
endif()
if (SIMGRID_HAVE_EIGEN3)
  set(UNIT_TESTS ${UNIT_TESTS} src/kernel/lmm/bmf_test.cpp)
else()
  set(EXTRA_DIST ${EXTRA_DIST} src/kernel/lmm/bmf_test.cpp)
endif()
set(EXTRA_DIST ${EXTRA_DIST} src/kernel/routing/NetZone_test.hpp)

add_executable       (unit-tests EXCLUDE_FROM_ALL ${UNIT_TESTS})
add_dependencies     (tests unit-tests)
target_link_libraries(unit-tests simgrid)
ADD_TEST(unit-tests ${VALGRIND_WRAPPER_UNBOXED} ${CMAKE_BINARY_DIR}/unit-tests)
set_property(TARGET unit-tests APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
set(EXTRA_DIST ${EXTRA_DIST} ${UNIT_TESTS})

unset(UNIT_TESTS)