diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-05-23 23:32:05 -0600 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-05-23 23:35:09 -0600 |
commit | e0de8171c678c0f0c643efa9e18de40ad119122b (patch) | |
tree | 3939e202bdb78da512164d83618f379ee88a0048 | |
parent | 9fcdd6fc25fcb232038355c6103eb6f06bcd5dd5 (diff) | |
download | google-benchmark-e0de8171c678c0f0c643efa9e18de40ad119122b.tar.gz |
Change RunSpecifiedBenchmarks to return the number of benchmarks run. Fixes #145
-rw-r--r-- | include/benchmark/benchmark_api.h | 12 | ||||
-rw-r--r-- | src/benchmark.cc | 20 | ||||
-rw-r--r-- | test/filter_test.cc | 8 |
3 files changed, 23 insertions, 17 deletions
diff --git a/include/benchmark/benchmark_api.h b/include/benchmark/benchmark_api.h index 2ded481..81f7b57 100644 --- a/include/benchmark/benchmark_api.h +++ b/include/benchmark/benchmark_api.h @@ -160,10 +160,14 @@ class BenchmarkReporter; void Initialize(int* argc, char** argv); -// Otherwise, run all benchmarks specified by the --benchmark_filter flag, -// and exit after running the benchmarks. -void RunSpecifiedBenchmarks(); -void RunSpecifiedBenchmarks(BenchmarkReporter* reporter); +// Run all benchmarks which match the specified --benchmark_filter flag. +// The second overload reports the results using the specified 'reporter'. +// +// RETURNS: The number of benchmarks run, not including repetitions. If +// '--benchmark_list_tests' is specified '0' is returned. +size_t RunSpecifiedBenchmarks(); +size_t RunSpecifiedBenchmarks(BenchmarkReporter* reporter); + // If this routine is called, peak memory allocation past this point in the // benchmark is reported at the end of the benchmark report line. (It is diff --git a/src/benchmark.cc b/src/benchmark.cc index 3d12d28..f78f2a3 100644 --- a/src/benchmark.cc +++ b/src/benchmark.cc @@ -863,14 +863,14 @@ void PrintBenchmarkList() { } } -void RunMatchingBenchmarks(const std::string& spec, - BenchmarkReporter* reporter) { +size_t RunMatchingBenchmarks(const std::string& spec, + BenchmarkReporter* reporter) { CHECK(reporter != nullptr); - if (spec.empty()) return; + CHECK(!spec.empty()); std::vector<Benchmark::Instance> benchmarks; auto families = BenchmarkFamilies::GetInstance(); - if (!families->FindBenchmarks(spec, &benchmarks)) return; + if (!families->FindBenchmarks(spec, &benchmarks)) return 0; // Determine the width of the name field using a minimum width of 10. size_t name_field_width = 10; @@ -894,6 +894,7 @@ void RunMatchingBenchmarks(const std::string& spec, RunBenchmark(benchmark, reporter); } } + return benchmarks.size(); } std::unique_ptr<BenchmarkReporter> GetDefaultReporter() { @@ -913,14 +914,14 @@ std::unique_ptr<BenchmarkReporter> GetDefaultReporter() { } // end namespace } // end namespace internal -void RunSpecifiedBenchmarks() { - RunSpecifiedBenchmarks(nullptr); +size_t RunSpecifiedBenchmarks() { + return RunSpecifiedBenchmarks(nullptr); } -void RunSpecifiedBenchmarks(BenchmarkReporter* reporter) { +size_t RunSpecifiedBenchmarks(BenchmarkReporter* reporter) { if (FLAGS_benchmark_list_tests) { internal::PrintBenchmarkList(); - return; + return 0; } std::string spec = FLAGS_benchmark_filter; if (spec.empty() || spec == "all") @@ -931,8 +932,9 @@ void RunSpecifiedBenchmarks(BenchmarkReporter* reporter) { default_reporter = internal::GetDefaultReporter(); reporter = default_reporter.get(); } - internal::RunMatchingBenchmarks(spec, reporter); + size_t num_run = internal::RunMatchingBenchmarks(spec, reporter); reporter->Finalize(); + return num_run; } namespace internal { diff --git a/test/filter_test.cc b/test/filter_test.cc index 2a278ff..3f58242 100644 --- a/test/filter_test.cc +++ b/test/filter_test.cc @@ -72,7 +72,7 @@ int main(int argc, char* argv[]) { benchmark::Initialize(&argc, argv); TestReporter test_reporter; - benchmark::RunSpecifiedBenchmarks(&test_reporter); + const size_t returned_count = benchmark::RunSpecifiedBenchmarks(&test_reporter); if (argc == 2) { // Make sure we ran all of the tests @@ -81,9 +81,9 @@ int main(int argc, char* argv[]) { ss >> expected; const size_t count = test_reporter.GetCount(); - if (count != expected) { - std::cerr << "ERROR: Expected " << expected << " tests to be ran but only " - << count << " completed" << std::endl; + if (count != expected || returned_count != expected) { + std::cerr << "ERROR: Expected " << expected << " tests to be run but returned_count = " + << returned_count << " and reporter_count = " << count << std::endl; return -1; } } |