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