Skip to content

Commit ddf49fd

Browse files
authored
Merge 72cfb60 into 7b03df7
2 parents 7b03df7 + 72cfb60 commit ddf49fd

1 file changed

Lines changed: 119 additions & 107 deletions

File tree

test/CMakeLists.txt

Lines changed: 119 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,81 @@ if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
2222
endforeach()
2323
endif()
2424

25-
check_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG)
26-
set(BENCHMARK_O3_FLAG "")
27-
if (BENCHMARK_HAS_O3_FLAG)
28-
set(BENCHMARK_O3_FLAG "-O3")
29-
endif()
30-
3125
# NOTE: These flags must be added after find_package(Threads REQUIRED) otherwise
3226
# they will break the configuration check.
3327
if (DEFINED BENCHMARK_CXX_LINKER_FLAGS)
3428
list(APPEND CMAKE_EXE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
3529
endif()
3630

3731
add_library(output_test_helper STATIC output_test_helper.cc output_test.h)
32+
target_link_libraries(output_test_helper benchmark)
33+
34+
function(add_benchmark_test target)
35+
cmake_parse_arguments(ARG
36+
"EXCLUDE_FROM_TEST;OUTPUT_TEST;GTEST_TEST"
37+
"SOURCE;REQUIRES"
38+
"COMPILE_FLAGS;LINK_FLAGS;LIBRARIES;TEST_ARGS"
39+
${ARGN})
40+
if (NOT BENCHMARK_ENABLE_GTEST_TESTS AND ARG_GTEST_TEST)
41+
return()
42+
endif()
43+
if (ARG_REQUIRES)
44+
if (NOT ${ARG_REQUIRES})
45+
return()
46+
endif()
47+
endif()
3848

39-
macro(compile_benchmark_test name)
40-
add_executable(${name} "${name}.cc")
41-
target_link_libraries(${name} benchmark ${CMAKE_THREAD_LIBS_INIT})
42-
endmacro(compile_benchmark_test)
43-
49+
# Create the test executable
50+
if (NOT ARG_SOURCE)
51+
set(ARG_SOURCE "${target}.cc")
52+
endif()
53+
add_executable(${target} ${ARG_SOURCE})
54+
set_target_properties(${target}
55+
PROPERTIES
56+
COMPILE_FLAGS "${ARG_COMPILE_FLAGS}"
57+
LINK_FLAGS "${ARG_LINK_FLAGS}")
58+
target_link_libraries(${target} benchmark ${ARG_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
59+
60+
# Handle specifics for each different type of test. ex. output tests, gtests, ect.
61+
if (ARG_OUTPUT_TEST)
62+
target_link_libraries(${target} output_test_helper ${BENCHMARK_CXX_LIBRARIES})
63+
elseif (ARG_GTEST_TEST)
64+
if (TARGET googletest)
65+
add_dependencies(${target} googletest)
66+
endif()
67+
if (GTEST_INCLUDE_DIRS)
68+
target_include_directories(${target} PRIVATE ${GTEST_INCLUDE_DIRS})
69+
endif()
70+
target_link_libraries(${target} ${GTEST_BOTH_LIBRARIES})
71+
endif()
4472

45-
macro(compile_output_test name)
46-
add_executable(${name} "${name}.cc" output_test.h)
47-
target_link_libraries(${name} output_test_helper benchmark
48-
${BENCHMARK_CXX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
49-
endmacro(compile_output_test)
73+
# Unless otherwise specified, supply default arguments to each benchmark test.
74+
if (NOT ARG_TEST_ARGS AND NOT ARG_GTEST_TEST)
75+
set(ARG_TEST_ARGS --benchmark_min_time=0.01)
76+
endif()
5077

51-
# Demonstration executable
52-
compile_benchmark_test(benchmark_test)
53-
add_test(benchmark benchmark_test --benchmark_min_time=0.01)
78+
if (NOT ARG_EXCLUDE_FROM_TEST)
79+
add_test(${target} ${target} ${ARG_TEST_ARGS})
80+
endif()
81+
endfunction(add_benchmark_test)
82+
83+
function(add_benchmark_tests)
84+
cmake_parse_arguments(ARG "" "" "OPTIONS" ${ARGN})
85+
set(TEST_TARGETS ${ARG_UNPARSED_ARGUMENTS})
86+
foreach(target ${TEST_TARGETS})
87+
add_benchmark_test(${target}
88+
${ARG_OPTIONS})
89+
endforeach()
90+
endfunction()
5491

55-
compile_benchmark_test(filter_test)
92+
###############################################################################
93+
# Filter Tests
94+
###############################################################################
95+
add_benchmark_test(filter_test EXCLUDE_FROM_TEST)
5696
macro(add_filter_test name filter expect)
5797
add_test(${name} filter_test --benchmark_min_time=0.01 --benchmark_filter=${filter} ${expect})
5898
add_test(${name}_list_only filter_test --benchmark_list_tests --benchmark_filter=${filter} ${expect})
5999
endmacro(add_filter_test)
60-
61100
add_filter_test(filter_simple "Foo" 3)
62101
add_filter_test(filter_suffix "BM_.*" 4)
63102
add_filter_test(filter_regex_all ".*" 5)
@@ -68,107 +107,82 @@ add_filter_test(filter_regex_begin "^BM_.*" 4)
68107
add_filter_test(filter_regex_begin2 "^N" 1)
69108
add_filter_test(filter_regex_end ".*Ba$" 1)
70109

71-
compile_benchmark_test(options_test)
72-
add_test(options_benchmarks options_test --benchmark_min_time=0.01)
73-
74-
compile_benchmark_test(basic_test)
75-
add_test(basic_benchmark basic_test --benchmark_min_time=0.01)
76-
77-
compile_benchmark_test(diagnostics_test)
78-
add_test(diagnostics_test diagnostics_test --benchmark_min_time=0.01)
79-
80-
compile_benchmark_test(skip_with_error_test)
81-
add_test(skip_with_error_test skip_with_error_test --benchmark_min_time=0.01)
82-
83-
compile_benchmark_test(donotoptimize_test)
84-
# Some of the issues with DoNotOptimize only occur when optimization is enabled
110+
###############################################################################
111+
# Basic Benchmark Tests
112+
###############################################################################
113+
add_benchmark_tests(
114+
benchmark_test
115+
options_test
116+
diagnostics_test
117+
skip_with_error_test
118+
donotoptimize_test
119+
fixture_test
120+
register_benchmark_test
121+
map_test
122+
multiple_ranges_test
123+
)
124+
add_benchmark_test(basic_benchmark SOURCE basic_test.cc)
125+
# Some of the issues with DoNotOptimize only occur when optimization is enabled.
126+
# Others only occur when they are disabled. Test both.
85127
check_cxx_compiler_flag(-O3 BENCHMARK_HAS_O3_FLAG)
86-
if (BENCHMARK_HAS_O3_FLAG)
87-
set_target_properties(donotoptimize_test PROPERTIES COMPILE_FLAGS "-O3")
128+
add_benchmark_test(donotoptimize_test_O3
129+
REQUIRES BENCHMARK_HAS_O3_FLAG
130+
SOURCE donotoptimize_test.cc
131+
COMPILE_FLAGS "-O3")
132+
check_cxx_compiler_flag(-O0 BENCHMARK_HAS_O0_FLAG)
133+
add_benchmark_test(donotoptimize_test_O0
134+
REQUIRES BENCHMARK_HAS_O0_FLAG
135+
SOURCE donotoptimize_test.cc
136+
COMPILE_FLAGS "-O0")
137+
add_benchmark_tests(
138+
reporter_output_test
139+
templated_fixture_test
140+
user_counters_test
141+
OPTIONS
142+
OUTPUT_TEST
143+
)
144+
add_benchmark_test(
145+
user_counters_tabular_test
146+
OUTPUT_TEST
147+
TEST_ARGS --benchmark_counters_tabular=true --benchmark_min_time=0.01
148+
)
149+
150+
# libstdc++ provides different definitions within <map> between dialects. When
151+
# LTO is enabled and -Werror is specified GCC diagnoses this ODR violation
152+
# causing the test to fail to compile. To prevent this we explicitly disable
153+
# the warning.
154+
check_cxx_compiler_flag(-Wno-odr BENCHMARK_HAS_WNO_ODR)
155+
if (BENCHMARK_ENABLE_LTO AND BENCHMARK_HAS_WNO_ODR)
156+
set(LINK_FLAGS "-Wno-odr")
88157
endif()
89-
add_test(donotoptimize_test donotoptimize_test --benchmark_min_time=0.01)
90-
91-
compile_benchmark_test(fixture_test)
92-
add_test(fixture_test fixture_test --benchmark_min_time=0.01)
93-
94-
compile_benchmark_test(register_benchmark_test)
95-
add_test(register_benchmark_test register_benchmark_test --benchmark_min_time=0.01)
96-
97-
compile_benchmark_test(map_test)
98-
add_test(map_test map_test --benchmark_min_time=0.01)
99-
100-
compile_benchmark_test(multiple_ranges_test)
101-
add_test(multiple_ranges_test multiple_ranges_test --benchmark_min_time=0.01)
102-
103-
compile_output_test(reporter_output_test)
104-
add_test(reporter_output_test reporter_output_test --benchmark_min_time=0.01)
105-
106-
compile_output_test(templated_fixture_test)
107-
add_test(templated_fixture_test templated_fixture_test --benchmark_min_time=0.01)
108-
109-
compile_output_test(user_counters_test)
110-
add_test(user_counters_test user_counters_test --benchmark_min_time=0.01)
111-
112-
compile_output_test(user_counters_tabular_test)
113-
add_test(user_counters_tabular_test user_counters_tabular_test --benchmark_counters_tabular=true --benchmark_min_time=0.01)
114-
115158
check_cxx_compiler_flag(-std=c++03 BENCHMARK_HAS_CXX03_FLAG)
116-
if (BENCHMARK_HAS_CXX03_FLAG)
117-
compile_benchmark_test(cxx03_test)
118-
set_target_properties(cxx03_test
119-
PROPERTIES
120-
COMPILE_FLAGS "-std=c++03")
121-
# libstdc++ provides different definitions within <map> between dialects. When
122-
# LTO is enabled and -Werror is specified GCC diagnoses this ODR violation
123-
# causing the test to fail to compile. To prevent this we explicitly disable
124-
# the warning.
125-
check_cxx_compiler_flag(-Wno-odr BENCHMARK_HAS_WNO_ODR)
126-
if (BENCHMARK_ENABLE_LTO AND BENCHMARK_HAS_WNO_ODR)
127-
set_target_properties(cxx03_test
128-
PROPERTIES
129-
LINK_FLAGS "-Wno-odr")
130-
endif()
131-
add_test(cxx03 cxx03_test --benchmark_min_time=0.01)
132-
endif()
159+
add_benchmark_test(cxx03_test
160+
REQUIRES BENCHMARK_HAS_CXX03_FLAG
161+
COMPILE_FLAGS "-std=c++03"
162+
LINK_FLAGS "${LINK_FLAGS}")
133163

134164
# Attempt to work around flaky test failures when running on Appveyor servers.
135165
if (DEFINED ENV{APPVEYOR})
136166
set(COMPLEXITY_MIN_TIME "0.5")
137167
else()
138168
set(COMPLEXITY_MIN_TIME "0.01")
139169
endif()
140-
compile_output_test(complexity_test)
141-
add_test(complexity_benchmark complexity_test --benchmark_min_time=${COMPLEXITY_MIN_TIME})
170+
add_benchmark_test(complexity_test OUTPUT_TEST
171+
TEST_ARGS --benchmark_min_time=${COMPLEXITY_MIN_TIME})
172+
142173

143174
###############################################################################
144-
# GoogleTest Unit Tests
175+
# GTEST Unit Tests
145176
###############################################################################
146-
147-
if (BENCHMARK_ENABLE_GTEST_TESTS)
148-
macro(compile_gtest name)
149-
add_executable(${name} "${name}.cc")
150-
if (TARGET googletest)
151-
add_dependencies(${name} googletest)
152-
endif()
153-
if (GTEST_INCLUDE_DIRS)
154-
target_include_directories(${name} PRIVATE ${GTEST_INCLUDE_DIRS})
155-
endif()
156-
target_link_libraries(${name} benchmark
157-
${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
158-
endmacro(compile_gtest)
159-
160-
macro(add_gtest name)
161-
compile_gtest(${name})
162-
add_test(${name} ${name})
163-
endmacro()
164-
165-
add_gtest(statistics_test)
166-
endif(BENCHMARK_ENABLE_GTEST_TESTS)
177+
add_benchmark_tests(
178+
statistics_test
179+
OPTIONS
180+
GTEST_TEST
181+
)
167182

168183
###############################################################################
169184
# Assembly Unit Tests
170185
###############################################################################
171-
172186
if (BENCHMARK_ENABLE_ASSEMBLY_TESTS)
173187
if (NOT LLVM_FILECHECK_EXE)
174188
message(FATAL_ERROR "LLVM FileCheck is required when including this file")
@@ -179,8 +193,6 @@ if (BENCHMARK_ENABLE_ASSEMBLY_TESTS)
179193
add_filecheck_test(clobber_memory_assembly_test)
180194
endif()
181195

182-
183-
184196
###############################################################################
185197
# Code Coverage Configuration
186198
###############################################################################

0 commit comments

Comments
 (0)