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