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