xref: /netbsd-src/external/apache2/llvm/dist/libcxx/utils/google-benchmark/test/fixture_test.cc (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
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*4d6fc14bSjoerg BENCHMARK_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*4d6fc14bSjoerg BENCHMARK_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