2015-03-10 11:30:14 +08:00
|
|
|
#include "benchmark/benchmark.h"
|
|
|
|
|
2015-03-13 08:27:29 +08:00
|
|
|
#include <cassert>
|
|
|
|
#include <cmath>
|
|
|
|
#include <cstdint>
|
2015-10-05 16:43:06 +08:00
|
|
|
#include <cstdlib>
|
2015-03-10 11:30:14 +08:00
|
|
|
|
|
|
|
#include <iostream>
|
2015-03-18 00:31:46 +08:00
|
|
|
#include <limits>
|
2015-03-10 11:30:14 +08:00
|
|
|
#include <sstream>
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
2015-03-18 02:15:16 +08:00
|
|
|
class TestReporter : public benchmark::ConsoleReporter {
|
2015-03-10 11:30:14 +08:00
|
|
|
public:
|
2015-03-18 04:16:36 +08:00
|
|
|
virtual bool ReportContext(const Context& context) {
|
2015-03-10 11:30:14 +08:00
|
|
|
return ConsoleReporter::ReportContext(context);
|
|
|
|
};
|
|
|
|
|
2015-03-18 04:16:36 +08:00
|
|
|
virtual void ReportRuns(const std::vector<Run>& report) {
|
2015-03-10 11:30:14 +08:00
|
|
|
++count_;
|
|
|
|
ConsoleReporter::ReportRuns(report);
|
|
|
|
};
|
|
|
|
|
|
|
|
TestReporter() : count_(0) {}
|
|
|
|
|
|
|
|
virtual ~TestReporter() {}
|
|
|
|
|
2016-10-08 02:04:50 +08:00
|
|
|
size_t GetCount() const { return count_; }
|
2015-03-10 11:30:14 +08:00
|
|
|
|
|
|
|
private:
|
|
|
|
mutable size_t count_;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // end namespace
|
|
|
|
|
2015-03-31 12:05:02 +08:00
|
|
|
static void NoPrefix(benchmark::State& state) {
|
2017-10-18 02:17:02 +08:00
|
|
|
for (auto _ : state) {
|
2016-10-08 02:04:50 +08:00
|
|
|
}
|
2015-03-10 11:30:14 +08:00
|
|
|
}
|
2015-03-31 12:05:02 +08:00
|
|
|
BENCHMARK(NoPrefix);
|
2015-03-10 11:30:14 +08:00
|
|
|
|
2015-03-31 12:05:02 +08:00
|
|
|
static void BM_Foo(benchmark::State& state) {
|
2017-10-18 02:17:02 +08:00
|
|
|
for (auto _ : state) {
|
2016-10-08 02:04:50 +08:00
|
|
|
}
|
2015-03-10 11:30:14 +08:00
|
|
|
}
|
2015-03-31 12:05:02 +08:00
|
|
|
BENCHMARK(BM_Foo);
|
|
|
|
|
|
|
|
static void BM_Bar(benchmark::State& state) {
|
2017-10-18 02:17:02 +08:00
|
|
|
for (auto _ : state) {
|
2016-10-08 02:04:50 +08:00
|
|
|
}
|
2015-03-31 12:05:02 +08:00
|
|
|
}
|
|
|
|
BENCHMARK(BM_Bar);
|
|
|
|
|
|
|
|
static void BM_FooBar(benchmark::State& state) {
|
2017-10-18 02:17:02 +08:00
|
|
|
for (auto _ : state) {
|
2016-10-08 02:04:50 +08:00
|
|
|
}
|
2015-03-31 12:05:02 +08:00
|
|
|
}
|
|
|
|
BENCHMARK(BM_FooBar);
|
|
|
|
|
|
|
|
static void BM_FooBa(benchmark::State& state) {
|
2017-10-18 02:17:02 +08:00
|
|
|
for (auto _ : state) {
|
2016-10-08 02:04:50 +08:00
|
|
|
}
|
2015-03-31 12:05:02 +08:00
|
|
|
}
|
|
|
|
BENCHMARK(BM_FooBa);
|
|
|
|
|
2016-10-08 02:04:50 +08:00
|
|
|
int main(int argc, char **argv) {
|
2016-05-24 14:42:11 +08:00
|
|
|
bool list_only = false;
|
2016-10-08 02:04:50 +08:00
|
|
|
for (int i = 0; i < argc; ++i)
|
|
|
|
list_only |= std::string(argv[i]).find("--benchmark_list_tests") !=
|
|
|
|
std::string::npos;
|
2016-05-24 14:42:11 +08:00
|
|
|
|
2015-03-10 11:30:14 +08:00
|
|
|
benchmark::Initialize(&argc, argv);
|
|
|
|
|
|
|
|
TestReporter test_reporter;
|
2016-10-08 02:04:50 +08:00
|
|
|
const size_t returned_count =
|
|
|
|
benchmark::RunSpecifiedBenchmarks(&test_reporter);
|
2015-03-10 11:30:14 +08:00
|
|
|
|
2015-10-07 15:12:56 +08:00
|
|
|
if (argc == 2) {
|
|
|
|
// Make sure we ran all of the tests
|
|
|
|
std::stringstream ss(argv[1]);
|
2016-05-24 14:42:11 +08:00
|
|
|
size_t expected_return;
|
|
|
|
ss >> expected_return;
|
2015-10-07 15:12:56 +08:00
|
|
|
|
2016-05-24 14:42:11 +08:00
|
|
|
if (returned_count != expected_return) {
|
|
|
|
std::cerr << "ERROR: Expected " << expected_return
|
|
|
|
<< " tests to match the filter but returned_count = "
|
|
|
|
<< returned_count << std::endl;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
const size_t expected_reports = list_only ? 0 : expected_return;
|
|
|
|
const size_t reports_count = test_reporter.GetCount();
|
|
|
|
if (reports_count != expected_reports) {
|
|
|
|
std::cerr << "ERROR: Expected " << expected_reports
|
|
|
|
<< " tests to be run but reported_count = " << reports_count
|
|
|
|
<< std::endl;
|
2015-10-07 15:12:56 +08:00
|
|
|
return -1;
|
|
|
|
}
|
2015-03-10 11:30:14 +08:00
|
|
|
}
|
2016-05-24 14:42:11 +08:00
|
|
|
|
2015-10-07 15:12:56 +08:00
|
|
|
return 0;
|
2015-03-10 11:30:14 +08:00
|
|
|
}
|