From 11769369660577d67b70725c13a16b05f4d584b6 Mon Sep 17 00:00:00 2001 From: Matt Clarkson Date: Fri, 8 Aug 2014 10:22:31 +0100 Subject: [PATCH] Check the number of benchmark tests ran Previously the benchmark_test program executed the benchmark tests to make sure the API was working but was not checking the number of tests that were completed. If the regular expression matching breaks, zero tests could be ran. Similarly, if one of the APIs breaks and doesn't run the correct amount of tests then `make test` will catch this. --- test/CMakeLists.txt | 7 ++++++- test/benchmark_test.cc | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 95b4f37b..195d6797 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,12 @@ # Demonstration executable add_executable(benchmark_test benchmark_test.cc) target_link_libraries(benchmark_test benchmark ${CMAKE_THREAD_LIBS_INIT}) -add_test(benchmark benchmark_test) +add_test(benchmark benchmark_test 50) +add_test(benchmark_filter_simple benchmark_test --benchmark_filter=Calculate 16) +add_test(benchmark_filter_prefix benchmark_test --benchmark_filter=*Calculate 0) +add_test(benchmark_filter_suffix benchmark_test --benchmark_filter=Calculate* 16) +add_test(benchmark_filter_both benchmark_test --benchmark_filter=*Calculate* 0) +add_test(benchmark_filter_regex_wildcard benchmark_test --benchmark_filter=.*Calculate.* 16) # Test harness for regex wrapper add_executable(re_test ${RE_FILES} "re_test.cc") diff --git a/test/benchmark_test.cc b/test/benchmark_test.cc index 5474000c..07016b77 100644 --- a/test/benchmark_test.cc +++ b/test/benchmark_test.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace { @@ -141,12 +142,45 @@ static void BM_LongTest(benchmark::State& state) { } BENCHMARK(BM_LongTest)->Range(1<<16,1<<28); +class TestReporter : public benchmark::internal::ConsoleReporter { + public: + virtual bool ReportContext(const Context& context) const { + return ConsoleReporter::ReportContext(context); + }; + + virtual void ReportRuns(const std::vector& report) const { + ++count_; + ConsoleReporter::ReportRuns(report); + }; + + TestReporter() : count_(0) {} + + virtual ~TestReporter() {} + + int GetCount() const { + return count_; + } + + private: + mutable size_t count_; +}; + int main(int argc, const char* argv[]) { benchmark::Initialize(&argc, argv); CHECK(Factorial(8) == 40320); CHECK(CalculatePi(1) == 0.0); - benchmark::RunSpecifiedBenchmarks(); + TestReporter test_reporter; + benchmark::RunSpecifiedBenchmarks(&test_reporter); + + // Make sure we ran all of the tests + const size_t count = test_reporter.GetCount(); + const size_t expected = (argc == 2) ? std::stoul(argv[1]) : count; + if (count != expected) { + std::cerr << "ERROR: Expected " << expected << " tests to be ran but only " + << count << " completed" << std::endl; + return -1; + } }