1a8c51b3fSopenharmony_ci#include <cassert> 2a8c51b3fSopenharmony_ci#include <cstdlib> 3a8c51b3fSopenharmony_ci#include <cstring> 4a8c51b3fSopenharmony_ci#include <iostream> 5a8c51b3fSopenharmony_ci#include <string> 6a8c51b3fSopenharmony_ci#include <vector> 7a8c51b3fSopenharmony_ci 8a8c51b3fSopenharmony_ci#include "benchmark/benchmark.h" 9a8c51b3fSopenharmony_ci 10a8c51b3fSopenharmony_ci// Tests that we can specify the number of iterations with 11a8c51b3fSopenharmony_ci// --benchmark_min_time=<NUM>x. 12a8c51b3fSopenharmony_cinamespace { 13a8c51b3fSopenharmony_ci 14a8c51b3fSopenharmony_ciclass TestReporter : public benchmark::ConsoleReporter { 15a8c51b3fSopenharmony_ci public: 16a8c51b3fSopenharmony_ci virtual bool ReportContext(const Context& context) BENCHMARK_OVERRIDE { 17a8c51b3fSopenharmony_ci return ConsoleReporter::ReportContext(context); 18a8c51b3fSopenharmony_ci }; 19a8c51b3fSopenharmony_ci 20a8c51b3fSopenharmony_ci virtual void ReportRuns(const std::vector<Run>& report) BENCHMARK_OVERRIDE { 21a8c51b3fSopenharmony_ci assert(report.size() == 1); 22a8c51b3fSopenharmony_ci iter_nums_.push_back(report[0].iterations); 23a8c51b3fSopenharmony_ci ConsoleReporter::ReportRuns(report); 24a8c51b3fSopenharmony_ci }; 25a8c51b3fSopenharmony_ci 26a8c51b3fSopenharmony_ci TestReporter() {} 27a8c51b3fSopenharmony_ci 28a8c51b3fSopenharmony_ci virtual ~TestReporter() {} 29a8c51b3fSopenharmony_ci 30a8c51b3fSopenharmony_ci const std::vector<benchmark::IterationCount>& GetIters() const { 31a8c51b3fSopenharmony_ci return iter_nums_; 32a8c51b3fSopenharmony_ci } 33a8c51b3fSopenharmony_ci 34a8c51b3fSopenharmony_ci private: 35a8c51b3fSopenharmony_ci std::vector<benchmark::IterationCount> iter_nums_; 36a8c51b3fSopenharmony_ci}; 37a8c51b3fSopenharmony_ci 38a8c51b3fSopenharmony_ci} // end namespace 39a8c51b3fSopenharmony_ci 40a8c51b3fSopenharmony_cistatic void BM_MyBench(benchmark::State& state) { 41a8c51b3fSopenharmony_ci for (auto s : state) { 42a8c51b3fSopenharmony_ci } 43a8c51b3fSopenharmony_ci} 44a8c51b3fSopenharmony_ciBENCHMARK(BM_MyBench); 45a8c51b3fSopenharmony_ci 46a8c51b3fSopenharmony_ciint main(int argc, char** argv) { 47a8c51b3fSopenharmony_ci // Make a fake argv and append the new --benchmark_min_time=<foo> to it. 48a8c51b3fSopenharmony_ci int fake_argc = argc + 1; 49a8c51b3fSopenharmony_ci const char** fake_argv = new const char*[static_cast<size_t>(fake_argc)]; 50a8c51b3fSopenharmony_ci for (int i = 0; i < argc; ++i) fake_argv[i] = argv[i]; 51a8c51b3fSopenharmony_ci fake_argv[argc] = "--benchmark_min_time=4x"; 52a8c51b3fSopenharmony_ci 53a8c51b3fSopenharmony_ci benchmark::Initialize(&fake_argc, const_cast<char**>(fake_argv)); 54a8c51b3fSopenharmony_ci 55a8c51b3fSopenharmony_ci TestReporter test_reporter; 56a8c51b3fSopenharmony_ci const size_t returned_count = 57a8c51b3fSopenharmony_ci benchmark::RunSpecifiedBenchmarks(&test_reporter, "BM_MyBench"); 58a8c51b3fSopenharmony_ci assert(returned_count == 1); 59a8c51b3fSopenharmony_ci 60a8c51b3fSopenharmony_ci // Check the executed iters. 61a8c51b3fSopenharmony_ci const std::vector<benchmark::IterationCount> iters = test_reporter.GetIters(); 62a8c51b3fSopenharmony_ci assert(!iters.empty() && iters[0] == 4); 63a8c51b3fSopenharmony_ci 64a8c51b3fSopenharmony_ci delete[] fake_argv; 65a8c51b3fSopenharmony_ci return 0; 66a8c51b3fSopenharmony_ci} 67