xref: /third_party/benchmark/test/cxx03_test.cc (revision a8c51b3f)
1a8c51b3fSopenharmony_ci#undef NDEBUG
2a8c51b3fSopenharmony_ci#include <cassert>
3a8c51b3fSopenharmony_ci#include <cstddef>
4a8c51b3fSopenharmony_ci
5a8c51b3fSopenharmony_ci#include "benchmark/benchmark.h"
6a8c51b3fSopenharmony_ci
7a8c51b3fSopenharmony_ci#if __cplusplus >= 201103L
8a8c51b3fSopenharmony_ci#error C++11 or greater detected. Should be C++03.
9a8c51b3fSopenharmony_ci#endif
10a8c51b3fSopenharmony_ci
11a8c51b3fSopenharmony_ci#ifdef BENCHMARK_HAS_CXX11
12a8c51b3fSopenharmony_ci#error C++11 or greater detected by the library. BENCHMARK_HAS_CXX11 is defined.
13a8c51b3fSopenharmony_ci#endif
14a8c51b3fSopenharmony_ci
15a8c51b3fSopenharmony_civoid BM_empty(benchmark::State& state) {
16a8c51b3fSopenharmony_ci  while (state.KeepRunning()) {
17a8c51b3fSopenharmony_ci    volatile benchmark::IterationCount x = state.iterations();
18a8c51b3fSopenharmony_ci    ((void)x);
19a8c51b3fSopenharmony_ci  }
20a8c51b3fSopenharmony_ci}
21a8c51b3fSopenharmony_ciBENCHMARK(BM_empty);
22a8c51b3fSopenharmony_ci
23a8c51b3fSopenharmony_ci// The new C++11 interface for args/ranges requires initializer list support.
24a8c51b3fSopenharmony_ci// Therefore we provide the old interface to support C++03.
25a8c51b3fSopenharmony_civoid BM_old_arg_range_interface(benchmark::State& state) {
26a8c51b3fSopenharmony_ci  assert((state.range(0) == 1 && state.range(1) == 2) ||
27a8c51b3fSopenharmony_ci         (state.range(0) == 5 && state.range(1) == 6));
28a8c51b3fSopenharmony_ci  while (state.KeepRunning()) {
29a8c51b3fSopenharmony_ci  }
30a8c51b3fSopenharmony_ci}
31a8c51b3fSopenharmony_ciBENCHMARK(BM_old_arg_range_interface)->ArgPair(1, 2)->RangePair(5, 5, 6, 6);
32a8c51b3fSopenharmony_ci
33a8c51b3fSopenharmony_citemplate <class T, class U>
34a8c51b3fSopenharmony_civoid BM_template2(benchmark::State& state) {
35a8c51b3fSopenharmony_ci  BM_empty(state);
36a8c51b3fSopenharmony_ci}
37a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE2(BM_template2, int, long);
38a8c51b3fSopenharmony_ci
39a8c51b3fSopenharmony_citemplate <class T>
40a8c51b3fSopenharmony_civoid BM_template1(benchmark::State& state) {
41a8c51b3fSopenharmony_ci  BM_empty(state);
42a8c51b3fSopenharmony_ci}
43a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE(BM_template1, long);
44a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE1(BM_template1, int);
45a8c51b3fSopenharmony_ci
46a8c51b3fSopenharmony_citemplate <class T>
47a8c51b3fSopenharmony_cistruct BM_Fixture : public ::benchmark::Fixture {};
48a8c51b3fSopenharmony_ci
49a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE_F(BM_Fixture, BM_template1, long)(benchmark::State& state) {
50a8c51b3fSopenharmony_ci  BM_empty(state);
51a8c51b3fSopenharmony_ci}
52a8c51b3fSopenharmony_ciBENCHMARK_TEMPLATE1_F(BM_Fixture, BM_template2, int)(benchmark::State& state) {
53a8c51b3fSopenharmony_ci  BM_empty(state);
54a8c51b3fSopenharmony_ci}
55a8c51b3fSopenharmony_ci
56a8c51b3fSopenharmony_civoid BM_counters(benchmark::State& state) {
57a8c51b3fSopenharmony_ci  BM_empty(state);
58a8c51b3fSopenharmony_ci  state.counters["Foo"] = 2;
59a8c51b3fSopenharmony_ci}
60a8c51b3fSopenharmony_ciBENCHMARK(BM_counters);
61a8c51b3fSopenharmony_ci
62a8c51b3fSopenharmony_ciBENCHMARK_MAIN();
63