#include "benchmark/benchmark.h" #include <cassert> #include <memory> class MyFixture : public ::benchmark::Fixture { public: void SetUp(const ::benchmark::State& state) { if (state.thread_index == 0) { assert(data.get() == nullptr); data.reset(new int(42)); } } void TearDown(const ::benchmark::State& state) { if (state.thread_index == 0) { assert(data.get() != nullptr); data.reset(); } } ~MyFixture() { assert(data == nullptr); } std::unique_ptr<int> data; }; BENCHMARK_F(MyFixture, Foo)(benchmark::State &st) { assert(data.get() != nullptr); assert(*data == 42); while (st.KeepRunning()) { } } BENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) { if (st.thread_index == 0) { assert(data.get() != nullptr); assert(*data == 42); } while (st.KeepRunning()) { assert(data.get() != nullptr); assert(*data == 42); } st.SetItemsProcessed(st.range(0)); } BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42); BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu(); BENCHMARK_MAIN()