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