#include #include #include #include #include #include "benchmark/benchmark_api.h" #include "benchmark/registration.h" #include "benchmark/reporter.h" #include "benchmark/state.h" // Tests that we can specify the number of iterations with // --benchmark_min_time=x. namespace { class TestReporter : public benchmark::ConsoleReporter { public: bool ReportContext(const Context& context) override { return ConsoleReporter::ReportContext(context); }; void ReportRuns(const std::vector& report) override { assert(report.size() == 1); iter_nums_.push_back(report[0].iterations); ConsoleReporter::ReportRuns(report); }; TestReporter() {} ~TestReporter() override {} const std::vector& GetIters() const { return iter_nums_; } private: std::vector iter_nums_; }; void BM_MyBench(benchmark::State& state) { for (auto s : state) { } } } // end namespace BENCHMARK(BM_MyBench); int main(int argc, char** argv) { benchmark::MaybeReenterWithoutASLR(argc, argv); // Make a fake argv and append the new --benchmark_min_time= to it. int fake_argc = argc + 1; std::vector fake_argv(static_cast(fake_argc)); for (size_t i = 0; i < static_cast(argc); ++i) { fake_argv[i] = argv[i]; } fake_argv[static_cast(argc)] = "--benchmark_min_time=4x"; benchmark::Initialize(&fake_argc, const_cast(fake_argv.data())); TestReporter test_reporter; const size_t returned_count = benchmark::RunSpecifiedBenchmarks(&test_reporter, "BM_MyBench"); assert(returned_count == 1); // Check the executed iters. const std::vector iters = test_reporter.GetIters(); assert(!iters.empty() && iters[0] == 4); return 0; }