106 lines · plain
1#include <algorithm>2#include <cassert>3#include <cstdint>4#include <cstdlib>5#include <cstring>6#include <iostream>7#include <limits>8#include <string>9#include <vector>10 11#include "benchmark/benchmark.h"12 13// Tests that we can override benchmark-spec value from FLAGS_benchmark_filter14// with argument to RunSpecifiedBenchmarks(...).15 16namespace {17 18class TestReporter : public benchmark::ConsoleReporter {19 public:20 bool ReportContext(const Context& context) override {21 return ConsoleReporter::ReportContext(context);22 };23 24 void ReportRuns(const std::vector<Run>& report) override {25 assert(report.size() == 1);26 matched_functions.push_back(report[0].run_name.function_name);27 ConsoleReporter::ReportRuns(report);28 };29 30 TestReporter() {}31 32 ~TestReporter() override {}33 34 const std::vector<std::string>& GetMatchedFunctions() const {35 return matched_functions;36 }37 38 private:39 std::vector<std::string> matched_functions;40};41 42} // end namespace43 44static void BM_NotChosen(benchmark::State& state) {45 assert(false && "SHOULD NOT BE CALLED");46 for (auto _ : state) {47 }48}49BENCHMARK(BM_NotChosen);50 51static void BM_Chosen(benchmark::State& state) {52 for (auto _ : state) {53 }54}55BENCHMARK(BM_Chosen);56 57int main(int argc, char** argv) {58 const std::string flag = "BM_NotChosen";59 60 // Verify that argv specify --benchmark_filter=BM_NotChosen.61 bool found = false;62 for (int i = 0; i < argc; ++i) {63 if (strcmp("--benchmark_filter=BM_NotChosen", argv[i]) == 0) {64 found = true;65 break;66 }67 }68 assert(found);69 70 benchmark::Initialize(&argc, argv);71 72 // Check that the current flag value is reported accurately via the73 // GetBenchmarkFilter() function.74 if (flag != benchmark::GetBenchmarkFilter()) {75 std::cerr76 << "Seeing different value for flags. GetBenchmarkFilter() returns ["77 << benchmark::GetBenchmarkFilter() << "] expected flag=[" << flag78 << "]\n";79 return 1;80 }81 TestReporter test_reporter;82 const char* const spec = "BM_Chosen";83 const size_t returned_count =84 benchmark::RunSpecifiedBenchmarks(&test_reporter, spec);85 assert(returned_count == 1);86 const std::vector<std::string> matched_functions =87 test_reporter.GetMatchedFunctions();88 assert(matched_functions.size() == 1);89 if (strcmp(spec, matched_functions.front().c_str()) != 0) {90 std::cerr << "Expected benchmark [" << spec << "] to run, but got ["91 << matched_functions.front() << "]\n";92 return 2;93 }94 95 // Test that SetBenchmarkFilter works.96 const std::string golden_value = "golden_value";97 benchmark::SetBenchmarkFilter(golden_value);98 std::string current_value = benchmark::GetBenchmarkFilter();99 if (golden_value != current_value) {100 std::cerr << "Expected [" << golden_value101 << "] for --benchmark_filter but got [" << current_value << "]\n";102 return 3;103 }104 return 0;105}106