13b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon#include "benchmark/benchmark.h" 23b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 366bf7c8f7194ecd3b9f6426ca3b4807e8a8996a2Eric Fiselier#include <cassert> 466bf7c8f7194ecd3b9f6426ca3b4807e8a8996a2Eric Fiselier#include <cmath> 566bf7c8f7194ecd3b9f6426ca3b4807e8a8996a2Eric Fiselier#include <cstdint> 6df0df4aba9d5997cdcddcec351ed5b5af180bb88Anton Danielsson#include <cstdlib> 73b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 83b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon#include <iostream> 9efe591015d3316c85d1b1f737dba2b56999885acEric Fiselier#include <limits> 103b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon#include <sstream> 113b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon#include <string> 123b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 133b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamonnamespace { 143b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 15e45252e6f59b55f4bbf22ca4208912b68b6c6a67Eric Fiselierclass TestReporter : public benchmark::ConsoleReporter { 163b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon public: 1720f1c0e2a8e692076dd7a5586f73ab8e2d726c12Eric Fiselier virtual bool ReportContext(const Context& context) { 183b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon return ConsoleReporter::ReportContext(context); 193b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon }; 203b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 2120f1c0e2a8e692076dd7a5586f73ab8e2d726c12Eric Fiselier virtual void ReportRuns(const std::vector<Run>& report) { 223b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon ++count_; 233b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon ConsoleReporter::ReportRuns(report); 243b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon }; 253b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 263b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon TestReporter() : count_(0) {} 273b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 283b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon virtual ~TestReporter() {} 293b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 303b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon size_t GetCount() const { 313b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon return count_; 323b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon } 333b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 343b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon private: 353b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon mutable size_t count_; 363b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon}; 373b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 383b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon} // end namespace 393b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 40e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 41e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselierstatic void NoPrefix(benchmark::State& state) { 42e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier while (state.KeepRunning()) {} 433b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon} 44e97a96f9e723bd7bbd239d205132f9462518b332Eric FiselierBENCHMARK(NoPrefix); 453b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 46e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselierstatic void BM_Foo(benchmark::State& state) { 47e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier while (state.KeepRunning()) {} 483b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon} 49e97a96f9e723bd7bbd239d205132f9462518b332Eric FiselierBENCHMARK(BM_Foo); 50e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 51e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 52e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselierstatic void BM_Bar(benchmark::State& state) { 53e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier while (state.KeepRunning()) {} 54e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier} 55e97a96f9e723bd7bbd239d205132f9462518b332Eric FiselierBENCHMARK(BM_Bar); 56e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 57e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 58e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselierstatic void BM_FooBar(benchmark::State& state) { 59e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier while (state.KeepRunning()) {} 60e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier} 61e97a96f9e723bd7bbd239d205132f9462518b332Eric FiselierBENCHMARK(BM_FooBar); 62e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 63e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 64e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselierstatic void BM_FooBa(benchmark::State& state) { 65e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier while (state.KeepRunning()) {} 66e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier} 67e97a96f9e723bd7bbd239d205132f9462518b332Eric FiselierBENCHMARK(BM_FooBa); 68e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 69e97a96f9e723bd7bbd239d205132f9462518b332Eric Fiselier 703b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 712463339d0b76953eb1d1183a927c5c40bb5c3c30Greg Millerint main(int argc, char* argv[]) { 723b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon benchmark::Initialize(&argc, argv); 733b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 743b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon TestReporter test_reporter; 753b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon benchmark::RunSpecifiedBenchmarks(&test_reporter); 763b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon 776abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson if (argc == 2) { 786abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson // Make sure we ran all of the tests 796abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson std::stringstream ss(argv[1]); 806abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson size_t expected; 816abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson ss >> expected; 826abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson 836abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson const size_t count = test_reporter.GetCount(); 846abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson if (count != expected) { 856abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson std::cerr << "ERROR: Expected " << expected << " tests to be ran but only " 866abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson << count << " completed" << std::endl; 876abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson return -1; 886abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson } 893b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon } 906abd53777bf013d5bf6bab2cd1ddce78c3b5b9adAnton Danielsson return 0; 913b40f0a7a320b5551259be8ffe556996efb006d6Dominic Hamon} 92