1*dbb99499SAndroid Build Coastguard Worker #undef NDEBUG
2*dbb99499SAndroid Build Coastguard Worker #include <algorithm>
3*dbb99499SAndroid Build Coastguard Worker #include <cassert>
4*dbb99499SAndroid Build Coastguard Worker #include <cmath>
5*dbb99499SAndroid Build Coastguard Worker #include <cstdlib>
6*dbb99499SAndroid Build Coastguard Worker #include <vector>
7*dbb99499SAndroid Build Coastguard Worker
8*dbb99499SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
9*dbb99499SAndroid Build Coastguard Worker #include "output_test.h"
10*dbb99499SAndroid Build Coastguard Worker
11*dbb99499SAndroid Build Coastguard Worker namespace {
12*dbb99499SAndroid Build Coastguard Worker
13*dbb99499SAndroid Build Coastguard Worker #define ADD_COMPLEXITY_CASES(...) \
14*dbb99499SAndroid Build Coastguard Worker int CONCAT(dummy, __LINE__) = AddComplexityTest(__VA_ARGS__)
15*dbb99499SAndroid Build Coastguard Worker
AddComplexityTest(const std::string & test_name,const std::string & big_o_test_name,const std::string & rms_test_name,const std::string & big_o,int family_index)16*dbb99499SAndroid Build Coastguard Worker int AddComplexityTest(const std::string &test_name,
17*dbb99499SAndroid Build Coastguard Worker const std::string &big_o_test_name,
18*dbb99499SAndroid Build Coastguard Worker const std::string &rms_test_name,
19*dbb99499SAndroid Build Coastguard Worker const std::string &big_o, int family_index) {
20*dbb99499SAndroid Build Coastguard Worker SetSubstitutions({{"%name", test_name},
21*dbb99499SAndroid Build Coastguard Worker {"%bigo_name", big_o_test_name},
22*dbb99499SAndroid Build Coastguard Worker {"%rms_name", rms_test_name},
23*dbb99499SAndroid Build Coastguard Worker {"%bigo_str", "[ ]* %float " + big_o},
24*dbb99499SAndroid Build Coastguard Worker {"%bigo", big_o},
25*dbb99499SAndroid Build Coastguard Worker {"%rms", "[ ]*[0-9]+ %"}});
26*dbb99499SAndroid Build Coastguard Worker AddCases(
27*dbb99499SAndroid Build Coastguard Worker TC_ConsoleOut,
28*dbb99499SAndroid Build Coastguard Worker {{"^%bigo_name %bigo_str %bigo_str[ ]*$"},
29*dbb99499SAndroid Build Coastguard Worker {"^%bigo_name", MR_Not}, // Assert we we didn't only matched a name.
30*dbb99499SAndroid Build Coastguard Worker {"^%rms_name %rms %rms[ ]*$", MR_Next}});
31*dbb99499SAndroid Build Coastguard Worker AddCases(
32*dbb99499SAndroid Build Coastguard Worker TC_JSONOut,
33*dbb99499SAndroid Build Coastguard Worker {{"\"name\": \"%bigo_name\",$"},
34*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": " + std::to_string(family_index) + ",$", MR_Next},
35*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
36*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"%name\",$", MR_Next},
37*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
38*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": %int,$", MR_Next},
39*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
40*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"BigO\",$", MR_Next},
41*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"time\",$", MR_Next},
42*dbb99499SAndroid Build Coastguard Worker {"\"cpu_coefficient\": %float,$", MR_Next},
43*dbb99499SAndroid Build Coastguard Worker {"\"real_coefficient\": %float,$", MR_Next},
44*dbb99499SAndroid Build Coastguard Worker {"\"big_o\": \"%bigo\",$", MR_Next},
45*dbb99499SAndroid Build Coastguard Worker {"\"time_unit\": \"ns\"$", MR_Next},
46*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next},
47*dbb99499SAndroid Build Coastguard Worker {"\"name\": \"%rms_name\",$"},
48*dbb99499SAndroid Build Coastguard Worker {"\"family_index\": " + std::to_string(family_index) + ",$", MR_Next},
49*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
50*dbb99499SAndroid Build Coastguard Worker {"\"run_name\": \"%name\",$", MR_Next},
51*dbb99499SAndroid Build Coastguard Worker {"\"run_type\": \"aggregate\",$", MR_Next},
52*dbb99499SAndroid Build Coastguard Worker {"\"repetitions\": %int,$", MR_Next},
53*dbb99499SAndroid Build Coastguard Worker {"\"threads\": 1,$", MR_Next},
54*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_name\": \"RMS\",$", MR_Next},
55*dbb99499SAndroid Build Coastguard Worker {"\"aggregate_unit\": \"percentage\",$", MR_Next},
56*dbb99499SAndroid Build Coastguard Worker {"\"rms\": %float$", MR_Next},
57*dbb99499SAndroid Build Coastguard Worker {"}", MR_Next}});
58*dbb99499SAndroid Build Coastguard Worker AddCases(TC_CSVOut, {{"^\"%bigo_name\",,%float,%float,%bigo,,,,,$"},
59*dbb99499SAndroid Build Coastguard Worker {"^\"%bigo_name\"", MR_Not},
60*dbb99499SAndroid Build Coastguard Worker {"^\"%rms_name\",,%float,%float,,,,,,$", MR_Next}});
61*dbb99499SAndroid Build Coastguard Worker return 0;
62*dbb99499SAndroid Build Coastguard Worker }
63*dbb99499SAndroid Build Coastguard Worker
64*dbb99499SAndroid Build Coastguard Worker } // end namespace
65*dbb99499SAndroid Build Coastguard Worker
66*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
67*dbb99499SAndroid Build Coastguard Worker // --------------------------- Testing BigO O(1) --------------------------- //
68*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
69*dbb99499SAndroid Build Coastguard Worker
BM_Complexity_O1(benchmark::State & state)70*dbb99499SAndroid Build Coastguard Worker void BM_Complexity_O1(benchmark::State &state) {
71*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
72*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
73*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
74*dbb99499SAndroid Build Coastguard Worker double tmp = static_cast<double>(state.iterations());
75*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
76*dbb99499SAndroid Build Coastguard Worker for (benchmark::IterationCount i = 0; i < state.iterations(); ++i) {
77*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
78*dbb99499SAndroid Build Coastguard Worker tmp *= static_cast<double>(state.iterations());
79*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
80*dbb99499SAndroid Build Coastguard Worker }
81*dbb99499SAndroid Build Coastguard Worker
82*dbb99499SAndroid Build Coastguard Worker // always 1ns per iteration
83*dbb99499SAndroid Build Coastguard Worker state.SetIterationTime(42 * 1e-9);
84*dbb99499SAndroid Build Coastguard Worker }
85*dbb99499SAndroid Build Coastguard Worker state.SetComplexityN(state.range(0));
86*dbb99499SAndroid Build Coastguard Worker }
87*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O1)
88*dbb99499SAndroid Build Coastguard Worker ->Range(1, 1 << 18)
89*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
90*dbb99499SAndroid Build Coastguard Worker ->Complexity(benchmark::o1);
91*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O1)->Range(1, 1 << 18)->UseManualTime()->Complexity();
92*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O1)
93*dbb99499SAndroid Build Coastguard Worker ->Range(1, 1 << 18)
94*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
__anon692759fb0202(benchmark::IterationCount) 95*dbb99499SAndroid Build Coastguard Worker ->Complexity([](benchmark::IterationCount) { return 1.0; });
96*dbb99499SAndroid Build Coastguard Worker
97*dbb99499SAndroid Build Coastguard Worker const char *one_test_name = "BM_Complexity_O1/manual_time";
98*dbb99499SAndroid Build Coastguard Worker const char *big_o_1_test_name = "BM_Complexity_O1/manual_time_BigO";
99*dbb99499SAndroid Build Coastguard Worker const char *rms_o_1_test_name = "BM_Complexity_O1/manual_time_RMS";
100*dbb99499SAndroid Build Coastguard Worker const char *enum_auto_big_o_1 = "\\([0-9]+\\)";
101*dbb99499SAndroid Build Coastguard Worker const char *lambda_big_o_1 = "f\\(N\\)";
102*dbb99499SAndroid Build Coastguard Worker
103*dbb99499SAndroid Build Coastguard Worker // Add enum tests
104*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(one_test_name, big_o_1_test_name, rms_o_1_test_name,
105*dbb99499SAndroid Build Coastguard Worker enum_auto_big_o_1, /*family_index=*/0);
106*dbb99499SAndroid Build Coastguard Worker
107*dbb99499SAndroid Build Coastguard Worker // Add auto tests
108*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(one_test_name, big_o_1_test_name, rms_o_1_test_name,
109*dbb99499SAndroid Build Coastguard Worker enum_auto_big_o_1, /*family_index=*/1);
110*dbb99499SAndroid Build Coastguard Worker
111*dbb99499SAndroid Build Coastguard Worker // Add lambda tests
112*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(one_test_name, big_o_1_test_name, rms_o_1_test_name,
113*dbb99499SAndroid Build Coastguard Worker lambda_big_o_1, /*family_index=*/2);
114*dbb99499SAndroid Build Coastguard Worker
115*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
116*dbb99499SAndroid Build Coastguard Worker // --------------------------- Testing BigO O(N) --------------------------- //
117*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
118*dbb99499SAndroid Build Coastguard Worker
BM_Complexity_O_N(benchmark::State & state)119*dbb99499SAndroid Build Coastguard Worker void BM_Complexity_O_N(benchmark::State &state) {
120*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
121*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
122*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
123*dbb99499SAndroid Build Coastguard Worker double tmp = static_cast<double>(state.iterations());
124*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
125*dbb99499SAndroid Build Coastguard Worker for (benchmark::IterationCount i = 0; i < state.iterations(); ++i) {
126*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
127*dbb99499SAndroid Build Coastguard Worker tmp *= static_cast<double>(state.iterations());
128*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
129*dbb99499SAndroid Build Coastguard Worker }
130*dbb99499SAndroid Build Coastguard Worker
131*dbb99499SAndroid Build Coastguard Worker // 1ns per iteration per entry
132*dbb99499SAndroid Build Coastguard Worker state.SetIterationTime(static_cast<double>(state.range(0)) * 42 * 1e-9);
133*dbb99499SAndroid Build Coastguard Worker }
134*dbb99499SAndroid Build Coastguard Worker state.SetComplexityN(state.range(0));
135*dbb99499SAndroid Build Coastguard Worker }
136*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N)
137*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
138*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1 << 20)
139*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
140*dbb99499SAndroid Build Coastguard Worker ->Complexity(benchmark::oN);
141*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N)
142*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
143*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1 << 20)
144*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
145*dbb99499SAndroid Build Coastguard Worker ->Complexity();
146*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N)
147*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
148*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1 << 20)
149*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
__anon692759fb0302(benchmark::IterationCount n) 150*dbb99499SAndroid Build Coastguard Worker ->Complexity([](benchmark::IterationCount n) -> double {
151*dbb99499SAndroid Build Coastguard Worker return static_cast<double>(n);
152*dbb99499SAndroid Build Coastguard Worker });
153*dbb99499SAndroid Build Coastguard Worker
154*dbb99499SAndroid Build Coastguard Worker const char *n_test_name = "BM_Complexity_O_N/manual_time";
155*dbb99499SAndroid Build Coastguard Worker const char *big_o_n_test_name = "BM_Complexity_O_N/manual_time_BigO";
156*dbb99499SAndroid Build Coastguard Worker const char *rms_o_n_test_name = "BM_Complexity_O_N/manual_time_RMS";
157*dbb99499SAndroid Build Coastguard Worker const char *enum_auto_big_o_n = "N";
158*dbb99499SAndroid Build Coastguard Worker const char *lambda_big_o_n = "f\\(N\\)";
159*dbb99499SAndroid Build Coastguard Worker
160*dbb99499SAndroid Build Coastguard Worker // Add enum tests
161*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_test_name, big_o_n_test_name, rms_o_n_test_name,
162*dbb99499SAndroid Build Coastguard Worker enum_auto_big_o_n, /*family_index=*/3);
163*dbb99499SAndroid Build Coastguard Worker
164*dbb99499SAndroid Build Coastguard Worker // Add auto tests
165*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_test_name, big_o_n_test_name, rms_o_n_test_name,
166*dbb99499SAndroid Build Coastguard Worker enum_auto_big_o_n, /*family_index=*/4);
167*dbb99499SAndroid Build Coastguard Worker
168*dbb99499SAndroid Build Coastguard Worker // Add lambda tests
169*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_test_name, big_o_n_test_name, rms_o_n_test_name,
170*dbb99499SAndroid Build Coastguard Worker lambda_big_o_n, /*family_index=*/5);
171*dbb99499SAndroid Build Coastguard Worker
172*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
173*dbb99499SAndroid Build Coastguard Worker // ------------------------- Testing BigO O(NlgN) ------------------------- //
174*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
175*dbb99499SAndroid Build Coastguard Worker
176*dbb99499SAndroid Build Coastguard Worker static const double kLog2E = 1.44269504088896340736;
BM_Complexity_O_N_log_N(benchmark::State & state)177*dbb99499SAndroid Build Coastguard Worker static void BM_Complexity_O_N_log_N(benchmark::State &state) {
178*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
179*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
180*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
181*dbb99499SAndroid Build Coastguard Worker double tmp = static_cast<double>(state.iterations());
182*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
183*dbb99499SAndroid Build Coastguard Worker for (benchmark::IterationCount i = 0; i < state.iterations(); ++i) {
184*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
185*dbb99499SAndroid Build Coastguard Worker tmp *= static_cast<double>(state.iterations());
186*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
187*dbb99499SAndroid Build Coastguard Worker }
188*dbb99499SAndroid Build Coastguard Worker
189*dbb99499SAndroid Build Coastguard Worker state.SetIterationTime(static_cast<double>(state.range(0)) * kLog2E *
190*dbb99499SAndroid Build Coastguard Worker std::log(state.range(0)) * 42 * 1e-9);
191*dbb99499SAndroid Build Coastguard Worker }
192*dbb99499SAndroid Build Coastguard Worker state.SetComplexityN(state.range(0));
193*dbb99499SAndroid Build Coastguard Worker }
194*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N_log_N)
195*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
196*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1U << 24)
197*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
198*dbb99499SAndroid Build Coastguard Worker ->Complexity(benchmark::oNLogN);
199*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N_log_N)
200*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
201*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1U << 24)
202*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
203*dbb99499SAndroid Build Coastguard Worker ->Complexity();
204*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O_N_log_N)
205*dbb99499SAndroid Build Coastguard Worker ->RangeMultiplier(2)
206*dbb99499SAndroid Build Coastguard Worker ->Range(1 << 10, 1U << 24)
207*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
__anon692759fb0402(benchmark::IterationCount n) 208*dbb99499SAndroid Build Coastguard Worker ->Complexity([](benchmark::IterationCount n) {
209*dbb99499SAndroid Build Coastguard Worker return kLog2E * static_cast<double>(n) * std::log(static_cast<double>(n));
210*dbb99499SAndroid Build Coastguard Worker });
211*dbb99499SAndroid Build Coastguard Worker
212*dbb99499SAndroid Build Coastguard Worker const char *n_lg_n_test_name = "BM_Complexity_O_N_log_N/manual_time";
213*dbb99499SAndroid Build Coastguard Worker const char *big_o_n_lg_n_test_name = "BM_Complexity_O_N_log_N/manual_time_BigO";
214*dbb99499SAndroid Build Coastguard Worker const char *rms_o_n_lg_n_test_name = "BM_Complexity_O_N_log_N/manual_time_RMS";
215*dbb99499SAndroid Build Coastguard Worker const char *enum_auto_big_o_n_lg_n = "NlgN";
216*dbb99499SAndroid Build Coastguard Worker const char *lambda_big_o_n_lg_n = "f\\(N\\)";
217*dbb99499SAndroid Build Coastguard Worker
218*dbb99499SAndroid Build Coastguard Worker // Add enum tests
219*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_lg_n_test_name, big_o_n_lg_n_test_name,
220*dbb99499SAndroid Build Coastguard Worker rms_o_n_lg_n_test_name, enum_auto_big_o_n_lg_n,
221*dbb99499SAndroid Build Coastguard Worker /*family_index=*/6);
222*dbb99499SAndroid Build Coastguard Worker
223*dbb99499SAndroid Build Coastguard Worker // NOTE: auto big-o is wron.g
224*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_lg_n_test_name, big_o_n_lg_n_test_name,
225*dbb99499SAndroid Build Coastguard Worker rms_o_n_lg_n_test_name, enum_auto_big_o_n_lg_n,
226*dbb99499SAndroid Build Coastguard Worker /*family_index=*/7);
227*dbb99499SAndroid Build Coastguard Worker
228*dbb99499SAndroid Build Coastguard Worker //// Add lambda tests
229*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(n_lg_n_test_name, big_o_n_lg_n_test_name,
230*dbb99499SAndroid Build Coastguard Worker rms_o_n_lg_n_test_name, lambda_big_o_n_lg_n,
231*dbb99499SAndroid Build Coastguard Worker /*family_index=*/8);
232*dbb99499SAndroid Build Coastguard Worker
233*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
234*dbb99499SAndroid Build Coastguard Worker // -------- Testing formatting of Complexity with captured args ------------ //
235*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
236*dbb99499SAndroid Build Coastguard Worker
BM_ComplexityCaptureArgs(benchmark::State & state,int n)237*dbb99499SAndroid Build Coastguard Worker void BM_ComplexityCaptureArgs(benchmark::State &state, int n) {
238*dbb99499SAndroid Build Coastguard Worker for (auto _ : state) {
239*dbb99499SAndroid Build Coastguard Worker // This test requires a non-zero CPU time to avoid divide-by-zero
240*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
241*dbb99499SAndroid Build Coastguard Worker double tmp = static_cast<double>(state.iterations());
242*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
243*dbb99499SAndroid Build Coastguard Worker for (benchmark::IterationCount i = 0; i < state.iterations(); ++i) {
244*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(state.iterations());
245*dbb99499SAndroid Build Coastguard Worker tmp *= static_cast<double>(state.iterations());
246*dbb99499SAndroid Build Coastguard Worker benchmark::DoNotOptimize(tmp);
247*dbb99499SAndroid Build Coastguard Worker }
248*dbb99499SAndroid Build Coastguard Worker
249*dbb99499SAndroid Build Coastguard Worker state.SetIterationTime(static_cast<double>(state.range(0)) * 42 * 1e-9);
250*dbb99499SAndroid Build Coastguard Worker }
251*dbb99499SAndroid Build Coastguard Worker state.SetComplexityN(n);
252*dbb99499SAndroid Build Coastguard Worker }
253*dbb99499SAndroid Build Coastguard Worker
254*dbb99499SAndroid Build Coastguard Worker BENCHMARK_CAPTURE(BM_ComplexityCaptureArgs, capture_test, 100)
255*dbb99499SAndroid Build Coastguard Worker ->UseManualTime()
256*dbb99499SAndroid Build Coastguard Worker ->Complexity(benchmark::oN)
257*dbb99499SAndroid Build Coastguard Worker ->Ranges({{1, 2}, {3, 4}});
258*dbb99499SAndroid Build Coastguard Worker
259*dbb99499SAndroid Build Coastguard Worker const std::string complexity_capture_name =
260*dbb99499SAndroid Build Coastguard Worker "BM_ComplexityCaptureArgs/capture_test/manual_time";
261*dbb99499SAndroid Build Coastguard Worker
262*dbb99499SAndroid Build Coastguard Worker ADD_COMPLEXITY_CASES(complexity_capture_name, complexity_capture_name + "_BigO",
263*dbb99499SAndroid Build Coastguard Worker complexity_capture_name + "_RMS", "N",
264*dbb99499SAndroid Build Coastguard Worker /*family_index=*/9);
265*dbb99499SAndroid Build Coastguard Worker
266*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
267*dbb99499SAndroid Build Coastguard Worker // --------------------------- TEST CASES END ------------------------------ //
268*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
269*dbb99499SAndroid Build Coastguard Worker
main(int argc,char * argv[])270*dbb99499SAndroid Build Coastguard Worker int main(int argc, char *argv[]) { RunOutputTests(argc, argv); }
271