52 lines · plain
1 2#include <cassert>3#include <memory>4 5#include "benchmark/benchmark.h"6 7#define FIXTURE_BECHMARK_NAME MyFixture8 9class FIXTURE_BECHMARK_NAME : public ::benchmark::Fixture {10 public:11 void SetUp(const ::benchmark::State& state) override {12 if (state.thread_index() == 0) {13 assert(data.get() == nullptr);14 data.reset(new int(42));15 }16 }17 18 void TearDown(const ::benchmark::State& state) override {19 if (state.thread_index() == 0) {20 assert(data.get() != nullptr);21 data.reset();22 }23 }24 25 ~FIXTURE_BECHMARK_NAME() override { assert(data == nullptr); }26 27 std::unique_ptr<int> data;28};29 30BENCHMARK_F(FIXTURE_BECHMARK_NAME, Foo)(benchmark::State& st) {31 assert(data.get() != nullptr);32 assert(*data == 42);33 for (auto _ : st) {34 }35}36 37BENCHMARK_DEFINE_F(FIXTURE_BECHMARK_NAME, Bar)(benchmark::State& st) {38 if (st.thread_index() == 0) {39 assert(data.get() != nullptr);40 assert(*data == 42);41 }42 for (auto _ : st) {43 assert(data.get() != nullptr);44 assert(*data == 42);45 }46 st.SetItemsProcessed(st.range(0));47}48BENCHMARK_REGISTER_F(FIXTURE_BECHMARK_NAME, Bar)->Arg(42);49BENCHMARK_REGISTER_F(FIXTURE_BECHMARK_NAME, Bar)->Arg(42)->ThreadPerCpu();50 51BENCHMARK_MAIN();52