blob: 1462b10f02f96325354344f07d8c494ee7f8f345 [file] [log] [blame]
Eric Fiselierb08d8b12016-07-19 23:07:03 +00001
2#include "benchmark/benchmark.h"
3
4#include <cassert>
5#include <memory>
6
7class MyFixture : public ::benchmark::Fixture {
8 public:
9 void SetUp(const ::benchmark::State& state) {
10 if (state.thread_index == 0) {
11 assert(data.get() == nullptr);
12 data.reset(new int(42));
13 }
14 }
15
16 void TearDown(const ::benchmark::State& state) {
17 if (state.thread_index == 0) {
18 assert(data.get() != nullptr);
19 data.reset();
20 }
21 }
22
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000023 ~MyFixture() { assert(data == nullptr); }
Eric Fiselierb08d8b12016-07-19 23:07:03 +000024
25 std::unique_ptr<int> data;
26};
27
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000028BENCHMARK_F(MyFixture, Foo)(benchmark::State &st) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000029 assert(data.get() != nullptr);
30 assert(*data == 42);
Eric Fiselier19039762018-01-18 04:23:01 +000031 for (auto _ : st) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000032 }
33}
34
35BENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) {
36 if (st.thread_index == 0) {
37 assert(data.get() != nullptr);
38 assert(*data == 42);
39 }
Eric Fiselier19039762018-01-18 04:23:01 +000040 for (auto _ : st) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000041 assert(data.get() != nullptr);
42 assert(*data == 42);
43 }
Eric Fiselierf6e09e52016-08-09 18:56:48 +000044 st.SetItemsProcessed(st.range(0));
Eric Fiselierb08d8b12016-07-19 23:07:03 +000045}
46BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42);
47BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu();
48
Eric Fiselier19039762018-01-18 04:23:01 +000049BENCHMARK_MAIN();