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