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