From 255c1062e42271f015113d07262ae9ccbf1db7b9 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sun, 1 Sep 2019 23:53:35 -0500 Subject: [PATCH] Run test fixtures as seperate tests so they can run in parallel (#2126) --- test/CMakeLists.txt | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e7596540a..c641a0564 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,5 +1,16 @@ if (BUILD_TESTS) + cmake_policy(SET CMP0064 NEW) + cmake_policy(SET CMP0057 NEW) + + include(CTest) + + find_package(Threads REQUIRED) + include(ProcessorCount) + ProcessorCount(N) + set(CTEST_PARALLEL_LEVEL ${N} CACHE STRING "CTest parallel level") + add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -j ${CTEST_PARALLEL_LEVEL} -C ${CMAKE_CFG_INTDIR} --timeout 90) + include_directories(${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/cli/) include_directories(SYSTEM ${PROJECT_SOURCE_DIR}/externals/tinyxml) include_directories(${PROJECT_SOURCE_DIR}/externals/simplecpp/) @@ -24,10 +35,35 @@ if (BUILD_TESTS) endif() add_dependencies(testrunner copy_cfg) - - add_test(NAME testrunner COMMAND testrunner WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - - add_custom_target(check COMMAND $ -q WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) add_dependencies(check testrunner) + set(SKIP_TESTS "" CACHE STRING "A list of tests to skip") + + function(add_fixture NAME) + if (${NAME} IN_LIST SKIP_TESTS) + else() + add_test(NAME ${NAME} COMMAND testrunner ${NAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + endif() + endfunction() + + function(fixture_cost NAME COST) + if(TEST ${NAME}) + set_tests_properties(${NAME} PROPERTIES COST ${COST}) + endif() + endfunction() + + foreach(SRC ${srcs}) + file(STRINGS ${SRC} FIXTURE_LINE REGEX "TestFixture\\(" LIMIT_COUNT 1) + if(FIXTURE_LINE MATCHES "TestFixture\\(\"([a-zA-z0-9]+)\"\\)") + add_fixture(${CMAKE_MATCH_1}) + endif() + endforeach() + + # Set cost of the more expensive tests to help improve parallel scheduling + # of tests + fixture_cost(TestIO 20) + fixture_cost(TestThreadExecutor 5) + fixture_cost(TestLeakAutoVar 4) + fixture_cost(TestTokenizer 4) + endif()