Home | History | Annotate | Download | only in test
      1 #include "benchmark/benchmark.h"
      2 
      3 #include <cassert>
      4 #include <cmath>
      5 #include <cstdint>
      6 #include <cstdlib>
      7 
      8 #include <iostream>
      9 #include <limits>
     10 #include <sstream>
     11 #include <string>
     12 
     13 namespace {
     14 
     15 class TestReporter : public benchmark::ConsoleReporter {
     16  public:
     17   virtual bool ReportContext(const Context& context) {
     18     return ConsoleReporter::ReportContext(context);
     19   };
     20 
     21   virtual void ReportRuns(const std::vector<Run>& report) {
     22     ++count_;
     23     ConsoleReporter::ReportRuns(report);
     24   };
     25 
     26   TestReporter() : count_(0) {}
     27 
     28   virtual ~TestReporter() {}
     29 
     30   size_t GetCount() const { return count_; }
     31 
     32  private:
     33   mutable size_t count_;
     34 };
     35 
     36 }  // end namespace
     37 
     38 static void NoPrefix(benchmark::State& state) {
     39   for (auto _ : state) {
     40   }
     41 }
     42 BENCHMARK(NoPrefix);
     43 
     44 static void BM_Foo(benchmark::State& state) {
     45   for (auto _ : state) {
     46   }
     47 }
     48 BENCHMARK(BM_Foo);
     49 
     50 static void BM_Bar(benchmark::State& state) {
     51   for (auto _ : state) {
     52   }
     53 }
     54 BENCHMARK(BM_Bar);
     55 
     56 static void BM_FooBar(benchmark::State& state) {
     57   for (auto _ : state) {
     58   }
     59 }
     60 BENCHMARK(BM_FooBar);
     61 
     62 static void BM_FooBa(benchmark::State& state) {
     63   for (auto _ : state) {
     64   }
     65 }
     66 BENCHMARK(BM_FooBa);
     67 
     68 int main(int argc, char **argv) {
     69   bool list_only = false;
     70   for (int i = 0; i < argc; ++i)
     71     list_only |= std::string(argv[i]).find("--benchmark_list_tests") !=
     72                  std::string::npos;
     73 
     74   benchmark::Initialize(&argc, argv);
     75 
     76   TestReporter test_reporter;
     77   const size_t returned_count =
     78       benchmark::RunSpecifiedBenchmarks(&test_reporter);
     79 
     80   if (argc == 2) {
     81     // Make sure we ran all of the tests
     82     std::stringstream ss(argv[1]);
     83     size_t expected_return;
     84     ss >> expected_return;
     85 
     86     if (returned_count != expected_return) {
     87       std::cerr << "ERROR: Expected " << expected_return
     88                 << " tests to match the filter but returned_count = "
     89                 << returned_count << std::endl;
     90       return -1;
     91     }
     92 
     93     const size_t expected_reports = list_only ? 0 : expected_return;
     94     const size_t reports_count = test_reporter.GetCount();
     95     if (reports_count != expected_reports) {
     96       std::cerr << "ERROR: Expected " << expected_reports
     97                 << " tests to be run but reported_count = " << reports_count
     98                 << std::endl;
     99       return -1;
    100     }
    101   }
    102 
    103   return 0;
    104 }
    105