xref: /aosp_15_r20/external/google-benchmark/test/reporter_output_test.cc (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker 
2*dbb99499SAndroid Build Coastguard Worker #undef NDEBUG
3*dbb99499SAndroid Build Coastguard Worker #include <numeric>
4*dbb99499SAndroid Build Coastguard Worker #include <utility>
5*dbb99499SAndroid Build Coastguard Worker 
6*dbb99499SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
7*dbb99499SAndroid Build Coastguard Worker #include "output_test.h"
8*dbb99499SAndroid Build Coastguard Worker 
9*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
10*dbb99499SAndroid Build Coastguard Worker // ---------------------- Testing Prologue Output -------------------------- //
11*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
12*dbb99499SAndroid Build Coastguard Worker 
13*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^[-]+$", MR_Next},
14*dbb99499SAndroid Build Coastguard Worker                           {"^Benchmark %s Time %s CPU %s Iterations$", MR_Next},
15*dbb99499SAndroid Build Coastguard Worker                           {"^[-]+$", MR_Next}});
AddContextCases()16*dbb99499SAndroid Build Coastguard Worker static int AddContextCases() {
17*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_ConsoleErr,
18*dbb99499SAndroid Build Coastguard Worker            {
19*dbb99499SAndroid Build Coastguard Worker                {"^%int-%int-%intT%int:%int:%int[-+]%int:%int$", MR_Default},
20*dbb99499SAndroid Build Coastguard Worker                {"Running .*(/|\\\\)reporter_output_test(\\.exe)?$", MR_Next},
21*dbb99499SAndroid Build Coastguard Worker                {"Run on \\(%int X %float MHz CPU s?\\)", MR_Next},
22*dbb99499SAndroid Build Coastguard Worker            });
23*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut,
24*dbb99499SAndroid Build Coastguard Worker            {{"^\\{", MR_Default},
25*dbb99499SAndroid Build Coastguard Worker             {"\"context\":", MR_Next},
26*dbb99499SAndroid Build Coastguard Worker             {"\"date\": \"", MR_Next},
27*dbb99499SAndroid Build Coastguard Worker             {"\"host_name\":", MR_Next},
28*dbb99499SAndroid Build Coastguard Worker             {"\"executable\": \".*(/|\\\\)reporter_output_test(\\.exe)?\",",
29*dbb99499SAndroid Build Coastguard Worker              MR_Next},
30*dbb99499SAndroid Build Coastguard Worker             {"\"num_cpus\": %int,$", MR_Next},
31*dbb99499SAndroid Build Coastguard Worker             {"\"mhz_per_cpu\": %float,$", MR_Next},
32*dbb99499SAndroid Build Coastguard Worker             {"\"caches\": \\[$", MR_Default}});
33*dbb99499SAndroid Build Coastguard Worker   auto const& Info = benchmark::CPUInfo::Get();
34*dbb99499SAndroid Build Coastguard Worker   auto const& Caches = Info.caches;
35*dbb99499SAndroid Build Coastguard Worker   if (!Caches.empty()) {
36*dbb99499SAndroid Build Coastguard Worker     AddCases(TC_ConsoleErr, {{"CPU Caches:$", MR_Next}});
37*dbb99499SAndroid Build Coastguard Worker   }
38*dbb99499SAndroid Build Coastguard Worker   for (size_t I = 0; I < Caches.size(); ++I) {
39*dbb99499SAndroid Build Coastguard Worker     std::string num_caches_str =
40*dbb99499SAndroid Build Coastguard Worker         Caches[I].num_sharing != 0 ? " \\(x%int\\)$" : "$";
41*dbb99499SAndroid Build Coastguard Worker     AddCases(TC_ConsoleErr,
42*dbb99499SAndroid Build Coastguard Worker              {{"L%int (Data|Instruction|Unified) %int KiB" + num_caches_str,
43*dbb99499SAndroid Build Coastguard Worker                MR_Next}});
44*dbb99499SAndroid Build Coastguard Worker     AddCases(TC_JSONOut, {{"\\{$", MR_Next},
45*dbb99499SAndroid Build Coastguard Worker                           {"\"type\": \"", MR_Next},
46*dbb99499SAndroid Build Coastguard Worker                           {"\"level\": %int,$", MR_Next},
47*dbb99499SAndroid Build Coastguard Worker                           {"\"size\": %int,$", MR_Next},
48*dbb99499SAndroid Build Coastguard Worker                           {"\"num_sharing\": %int$", MR_Next},
49*dbb99499SAndroid Build Coastguard Worker                           {"}[,]{0,1}$", MR_Next}});
50*dbb99499SAndroid Build Coastguard Worker   }
51*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut, {{"],$"}});
52*dbb99499SAndroid Build Coastguard Worker   auto const& LoadAvg = Info.load_avg;
53*dbb99499SAndroid Build Coastguard Worker   if (!LoadAvg.empty()) {
54*dbb99499SAndroid Build Coastguard Worker     AddCases(TC_ConsoleErr,
55*dbb99499SAndroid Build Coastguard Worker              {{"Load Average: (%float, ){0,2}%float$", MR_Next}});
56*dbb99499SAndroid Build Coastguard Worker   }
57*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut, {{"\"load_avg\": \\[(%float,?){0,3}],$", MR_Next}});
58*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut, {{"\"library_version\": \".*\",$", MR_Next}});
59*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut, {{"\"library_build_type\": \".*\",$", MR_Next}});
60*dbb99499SAndroid Build Coastguard Worker   AddCases(TC_JSONOut, {{"\"json_schema_version\": 1$", MR_Next}});
61*dbb99499SAndroid Build Coastguard Worker   return 0;
62*dbb99499SAndroid Build Coastguard Worker }
63*dbb99499SAndroid Build Coastguard Worker int dummy_register = AddContextCases();
64*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"%csv_header"}});
65*dbb99499SAndroid Build Coastguard Worker 
66*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
67*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Basic Output --------------------------- //
68*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
69*dbb99499SAndroid Build Coastguard Worker 
BM_basic(benchmark::State & state)70*dbb99499SAndroid Build Coastguard Worker void BM_basic(benchmark::State& state) {
71*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
72*dbb99499SAndroid Build Coastguard Worker   }
73*dbb99499SAndroid Build Coastguard Worker }
74*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_basic);
75*dbb99499SAndroid Build Coastguard Worker 
76*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_basic %console_report$"}});
77*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_basic\",$"},
78*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 0,$", MR_Next},
79*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
80*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_basic\",$", MR_Next},
81*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
82*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
83*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
84*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
85*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
86*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
87*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
88*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"ns\"$", MR_Next},
89*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
90*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_basic\",%csv_report$"}});
91*dbb99499SAndroid Build Coastguard Worker 
92*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
93*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Bytes per Second Output ---------------- //
94*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
95*dbb99499SAndroid Build Coastguard Worker 
BM_bytes_per_second(benchmark::State & state)96*dbb99499SAndroid Build Coastguard Worker void BM_bytes_per_second(benchmark::State& state) {
97*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
98*dbb99499SAndroid Build Coastguard Worker     // This test requires a non-zero CPU time to avoid divide-by-zero
99*dbb99499SAndroid Build Coastguard Worker     auto iterations = double(state.iterations()) * double(state.iterations());
100*dbb99499SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(iterations);
101*dbb99499SAndroid Build Coastguard Worker   }
102*dbb99499SAndroid Build Coastguard Worker   state.SetBytesProcessed(1);
103*dbb99499SAndroid Build Coastguard Worker }
104*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_bytes_per_second);
105*dbb99499SAndroid Build Coastguard Worker 
106*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_bytes_per_second %console_report "
107*dbb99499SAndroid Build Coastguard Worker                            "bytes_per_second=%float[kM]{0,1}/s$"}});
108*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_bytes_per_second\",$"},
109*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 1,$", MR_Next},
110*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
111*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_bytes_per_second\",$", MR_Next},
112*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
113*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
114*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
115*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
116*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
117*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
118*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
119*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"ns\",$", MR_Next},
120*dbb99499SAndroid Build Coastguard Worker                        {"\"bytes_per_second\": %float$", MR_Next},
121*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
122*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_bytes_per_second\",%csv_bytes_report$"}});
123*dbb99499SAndroid Build Coastguard Worker 
124*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
125*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Items per Second Output ---------------- //
126*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
127*dbb99499SAndroid Build Coastguard Worker 
BM_items_per_second(benchmark::State & state)128*dbb99499SAndroid Build Coastguard Worker void BM_items_per_second(benchmark::State& state) {
129*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
130*dbb99499SAndroid Build Coastguard Worker     // This test requires a non-zero CPU time to avoid divide-by-zero
131*dbb99499SAndroid Build Coastguard Worker     auto iterations = double(state.iterations()) * double(state.iterations());
132*dbb99499SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(iterations);
133*dbb99499SAndroid Build Coastguard Worker   }
134*dbb99499SAndroid Build Coastguard Worker   state.SetItemsProcessed(1);
135*dbb99499SAndroid Build Coastguard Worker }
136*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_items_per_second);
137*dbb99499SAndroid Build Coastguard Worker 
138*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_items_per_second %console_report "
139*dbb99499SAndroid Build Coastguard Worker                            "items_per_second=%float[kM]{0,1}/s$"}});
140*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_items_per_second\",$"},
141*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 2,$", MR_Next},
142*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
143*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_items_per_second\",$", MR_Next},
144*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
145*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
146*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
147*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
148*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
149*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
150*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
151*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"ns\",$", MR_Next},
152*dbb99499SAndroid Build Coastguard Worker                        {"\"items_per_second\": %float$", MR_Next},
153*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
154*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_items_per_second\",%csv_items_report$"}});
155*dbb99499SAndroid Build Coastguard Worker 
156*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
157*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Label Output --------------------------- //
158*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
159*dbb99499SAndroid Build Coastguard Worker 
BM_label(benchmark::State & state)160*dbb99499SAndroid Build Coastguard Worker void BM_label(benchmark::State& state) {
161*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
162*dbb99499SAndroid Build Coastguard Worker   }
163*dbb99499SAndroid Build Coastguard Worker   state.SetLabel("some label");
164*dbb99499SAndroid Build Coastguard Worker }
165*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_label);
166*dbb99499SAndroid Build Coastguard Worker 
167*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_label %console_report some label$"}});
168*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_label\",$"},
169*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 3,$", MR_Next},
170*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
171*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_label\",$", MR_Next},
172*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
173*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
174*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
175*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
176*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
177*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
178*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
179*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"ns\",$", MR_Next},
180*dbb99499SAndroid Build Coastguard Worker                        {"\"label\": \"some label\"$", MR_Next},
181*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
182*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_label\",%csv_label_report_begin\"some "
183*dbb99499SAndroid Build Coastguard Worker                        "label\"%csv_label_report_end$"}});
184*dbb99499SAndroid Build Coastguard Worker 
185*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
186*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Time Label Output ---------------------- //
187*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
188*dbb99499SAndroid Build Coastguard Worker 
BM_time_label_nanosecond(benchmark::State & state)189*dbb99499SAndroid Build Coastguard Worker void BM_time_label_nanosecond(benchmark::State& state) {
190*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
191*dbb99499SAndroid Build Coastguard Worker   }
192*dbb99499SAndroid Build Coastguard Worker }
193*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_time_label_nanosecond)->Unit(benchmark::kNanosecond);
194*dbb99499SAndroid Build Coastguard Worker 
195*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_time_label_nanosecond %console_report$"}});
196*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
197*dbb99499SAndroid Build Coastguard Worker           {{"\"name\": \"BM_time_label_nanosecond\",$"},
198*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 4,$", MR_Next},
199*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
200*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_time_label_nanosecond\",$", MR_Next},
201*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"iteration\",$", MR_Next},
202*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 1,$", MR_Next},
203*dbb99499SAndroid Build Coastguard Worker            {"\"repetition_index\": 0,$", MR_Next},
204*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
205*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": %int,$", MR_Next},
206*dbb99499SAndroid Build Coastguard Worker            {"\"real_time\": %float,$", MR_Next},
207*dbb99499SAndroid Build Coastguard Worker            {"\"cpu_time\": %float,$", MR_Next},
208*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"ns\"$", MR_Next},
209*dbb99499SAndroid Build Coastguard Worker            {"}", MR_Next}});
210*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_time_label_nanosecond\",%csv_report$"}});
211*dbb99499SAndroid Build Coastguard Worker 
BM_time_label_microsecond(benchmark::State & state)212*dbb99499SAndroid Build Coastguard Worker void BM_time_label_microsecond(benchmark::State& state) {
213*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
214*dbb99499SAndroid Build Coastguard Worker   }
215*dbb99499SAndroid Build Coastguard Worker }
216*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_time_label_microsecond)->Unit(benchmark::kMicrosecond);
217*dbb99499SAndroid Build Coastguard Worker 
218*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_time_label_microsecond %console_us_report$"}});
219*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
220*dbb99499SAndroid Build Coastguard Worker           {{"\"name\": \"BM_time_label_microsecond\",$"},
221*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 5,$", MR_Next},
222*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
223*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_time_label_microsecond\",$", MR_Next},
224*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"iteration\",$", MR_Next},
225*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 1,$", MR_Next},
226*dbb99499SAndroid Build Coastguard Worker            {"\"repetition_index\": 0,$", MR_Next},
227*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
228*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": %int,$", MR_Next},
229*dbb99499SAndroid Build Coastguard Worker            {"\"real_time\": %float,$", MR_Next},
230*dbb99499SAndroid Build Coastguard Worker            {"\"cpu_time\": %float,$", MR_Next},
231*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"us\"$", MR_Next},
232*dbb99499SAndroid Build Coastguard Worker            {"}", MR_Next}});
233*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_time_label_microsecond\",%csv_us_report$"}});
234*dbb99499SAndroid Build Coastguard Worker 
BM_time_label_millisecond(benchmark::State & state)235*dbb99499SAndroid Build Coastguard Worker void BM_time_label_millisecond(benchmark::State& state) {
236*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
237*dbb99499SAndroid Build Coastguard Worker   }
238*dbb99499SAndroid Build Coastguard Worker }
239*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_time_label_millisecond)->Unit(benchmark::kMillisecond);
240*dbb99499SAndroid Build Coastguard Worker 
241*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_time_label_millisecond %console_ms_report$"}});
242*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
243*dbb99499SAndroid Build Coastguard Worker           {{"\"name\": \"BM_time_label_millisecond\",$"},
244*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 6,$", MR_Next},
245*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
246*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_time_label_millisecond\",$", MR_Next},
247*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"iteration\",$", MR_Next},
248*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 1,$", MR_Next},
249*dbb99499SAndroid Build Coastguard Worker            {"\"repetition_index\": 0,$", MR_Next},
250*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
251*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": %int,$", MR_Next},
252*dbb99499SAndroid Build Coastguard Worker            {"\"real_time\": %float,$", MR_Next},
253*dbb99499SAndroid Build Coastguard Worker            {"\"cpu_time\": %float,$", MR_Next},
254*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"ms\"$", MR_Next},
255*dbb99499SAndroid Build Coastguard Worker            {"}", MR_Next}});
256*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_time_label_millisecond\",%csv_ms_report$"}});
257*dbb99499SAndroid Build Coastguard Worker 
BM_time_label_second(benchmark::State & state)258*dbb99499SAndroid Build Coastguard Worker void BM_time_label_second(benchmark::State& state) {
259*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
260*dbb99499SAndroid Build Coastguard Worker   }
261*dbb99499SAndroid Build Coastguard Worker }
262*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_time_label_second)->Unit(benchmark::kSecond);
263*dbb99499SAndroid Build Coastguard Worker 
264*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_time_label_second %console_s_report$"}});
265*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_time_label_second\",$"},
266*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 7,$", MR_Next},
267*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
268*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_time_label_second\",$", MR_Next},
269*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
270*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
271*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
272*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
273*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
274*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
275*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
276*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"s\"$", MR_Next},
277*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
278*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_time_label_second\",%csv_s_report$"}});
279*dbb99499SAndroid Build Coastguard Worker 
280*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
281*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Error Output --------------------------- //
282*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
283*dbb99499SAndroid Build Coastguard Worker 
BM_error(benchmark::State & state)284*dbb99499SAndroid Build Coastguard Worker void BM_error(benchmark::State& state) {
285*dbb99499SAndroid Build Coastguard Worker   state.SkipWithError("message");
286*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
287*dbb99499SAndroid Build Coastguard Worker   }
288*dbb99499SAndroid Build Coastguard Worker }
289*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_error);
290*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_error[ ]+ERROR OCCURRED: 'message'$"}});
291*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_error\",$"},
292*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 8,$", MR_Next},
293*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
294*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_error\",$", MR_Next},
295*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
296*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
297*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
298*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
299*dbb99499SAndroid Build Coastguard Worker                        {"\"error_occurred\": true,$", MR_Next},
300*dbb99499SAndroid Build Coastguard Worker                        {"\"error_message\": \"message\",$", MR_Next}});
301*dbb99499SAndroid Build Coastguard Worker 
302*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_error\",,,,,,,,true,\"message\"$"}});
303*dbb99499SAndroid Build Coastguard Worker 
304*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
305*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing No Arg Name Output -----------------------
306*dbb99499SAndroid Build Coastguard Worker // //
307*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
308*dbb99499SAndroid Build Coastguard Worker 
BM_no_arg_name(benchmark::State & state)309*dbb99499SAndroid Build Coastguard Worker void BM_no_arg_name(benchmark::State& state) {
310*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
311*dbb99499SAndroid Build Coastguard Worker   }
312*dbb99499SAndroid Build Coastguard Worker }
313*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_no_arg_name)->Arg(3);
314*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_no_arg_name/3 %console_report$"}});
315*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_no_arg_name/3\",$"},
316*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 9,$", MR_Next},
317*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
318*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_no_arg_name/3\",$", MR_Next},
319*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
320*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
321*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
322*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next}});
323*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_no_arg_name/3\",%csv_report$"}});
324*dbb99499SAndroid Build Coastguard Worker 
325*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
326*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Arg Name Output ------------------------ //
327*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
328*dbb99499SAndroid Build Coastguard Worker 
BM_arg_name(benchmark::State & state)329*dbb99499SAndroid Build Coastguard Worker void BM_arg_name(benchmark::State& state) {
330*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
331*dbb99499SAndroid Build Coastguard Worker   }
332*dbb99499SAndroid Build Coastguard Worker }
333*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_arg_name)->ArgName("first")->Arg(3);
334*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_arg_name/first:3 %console_report$"}});
335*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_arg_name/first:3\",$"},
336*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 10,$", MR_Next},
337*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
338*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_arg_name/first:3\",$", MR_Next},
339*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
340*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
341*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
342*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next}});
343*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_arg_name/first:3\",%csv_report$"}});
344*dbb99499SAndroid Build Coastguard Worker 
345*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
346*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Arg Names Output ----------------------- //
347*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
348*dbb99499SAndroid Build Coastguard Worker 
BM_arg_names(benchmark::State & state)349*dbb99499SAndroid Build Coastguard Worker void BM_arg_names(benchmark::State& state) {
350*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
351*dbb99499SAndroid Build Coastguard Worker   }
352*dbb99499SAndroid Build Coastguard Worker }
353*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_arg_names)->Args({2, 5, 4})->ArgNames({"first", "", "third"});
354*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
355*dbb99499SAndroid Build Coastguard Worker           {{"^BM_arg_names/first:2/5/third:4 %console_report$"}});
356*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
357*dbb99499SAndroid Build Coastguard Worker           {{"\"name\": \"BM_arg_names/first:2/5/third:4\",$"},
358*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 11,$", MR_Next},
359*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
360*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_arg_names/first:2/5/third:4\",$", MR_Next},
361*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"iteration\",$", MR_Next},
362*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 1,$", MR_Next},
363*dbb99499SAndroid Build Coastguard Worker            {"\"repetition_index\": 0,$", MR_Next},
364*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next}});
365*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_arg_names/first:2/5/third:4\",%csv_report$"}});
366*dbb99499SAndroid Build Coastguard Worker 
367*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
368*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Name Output ---------------------------- //
369*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
370*dbb99499SAndroid Build Coastguard Worker 
BM_name(benchmark::State & state)371*dbb99499SAndroid Build Coastguard Worker void BM_name(benchmark::State& state) {
372*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
373*dbb99499SAndroid Build Coastguard Worker   }
374*dbb99499SAndroid Build Coastguard Worker }
375*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_name)->Name("BM_custom_name");
376*dbb99499SAndroid Build Coastguard Worker 
377*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_custom_name %console_report$"}});
378*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_custom_name\",$"},
379*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 12,$", MR_Next},
380*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
381*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_custom_name\",$", MR_Next},
382*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
383*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
384*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
385*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
386*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": %int,$", MR_Next},
387*dbb99499SAndroid Build Coastguard Worker                        {"\"real_time\": %float,$", MR_Next},
388*dbb99499SAndroid Build Coastguard Worker                        {"\"cpu_time\": %float,$", MR_Next},
389*dbb99499SAndroid Build Coastguard Worker                        {"\"time_unit\": \"ns\"$", MR_Next},
390*dbb99499SAndroid Build Coastguard Worker                        {"}", MR_Next}});
391*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_custom_name\",%csv_report$"}});
392*dbb99499SAndroid Build Coastguard Worker 
393*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
394*dbb99499SAndroid Build Coastguard Worker // ------------------------ Testing Big Args Output ------------------------ //
395*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
396*dbb99499SAndroid Build Coastguard Worker 
BM_BigArgs(benchmark::State & state)397*dbb99499SAndroid Build Coastguard Worker void BM_BigArgs(benchmark::State& state) {
398*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
399*dbb99499SAndroid Build Coastguard Worker   }
400*dbb99499SAndroid Build Coastguard Worker }
401*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_BigArgs)->RangeMultiplier(2)->Range(1U << 30U, 1U << 31U);
402*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_BigArgs/1073741824 %console_report$"},
403*dbb99499SAndroid Build Coastguard Worker                           {"^BM_BigArgs/2147483648 %console_report$"}});
404*dbb99499SAndroid Build Coastguard Worker 
405*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
406*dbb99499SAndroid Build Coastguard Worker // ----------------------- Testing Complexity Output ----------------------- //
407*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
408*dbb99499SAndroid Build Coastguard Worker 
BM_Complexity_O1(benchmark::State & state)409*dbb99499SAndroid Build Coastguard Worker void BM_Complexity_O1(benchmark::State& state) {
410*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
411*dbb99499SAndroid Build Coastguard Worker     // This test requires a non-zero CPU time to avoid divide-by-zero
412*dbb99499SAndroid Build Coastguard Worker     auto iterations = double(state.iterations()) * double(state.iterations());
413*dbb99499SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(iterations);
414*dbb99499SAndroid Build Coastguard Worker   }
415*dbb99499SAndroid Build Coastguard Worker   state.SetComplexityN(state.range(0));
416*dbb99499SAndroid Build Coastguard Worker }
417*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Complexity_O1)->Range(1, 1 << 18)->Complexity(benchmark::o1);
418*dbb99499SAndroid Build Coastguard Worker SET_SUBSTITUTIONS({{"%bigOStr", "[ ]* %float \\([0-9]+\\)"},
419*dbb99499SAndroid Build Coastguard Worker                    {"%RMS", "[ ]*[0-9]+ %"}});
420*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_Complexity_O1_BigO %bigOStr %bigOStr[ ]*$"},
421*dbb99499SAndroid Build Coastguard Worker                           {"^BM_Complexity_O1_RMS %RMS %RMS[ ]*$"}});
422*dbb99499SAndroid Build Coastguard Worker 
423*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
424*dbb99499SAndroid Build Coastguard Worker // ----------------------- Testing Aggregate Output ------------------------ //
425*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
426*dbb99499SAndroid Build Coastguard Worker 
427*dbb99499SAndroid Build Coastguard Worker // Test that non-aggregate data is printed by default
BM_Repeat(benchmark::State & state)428*dbb99499SAndroid Build Coastguard Worker void BM_Repeat(benchmark::State& state) {
429*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
430*dbb99499SAndroid Build Coastguard Worker   }
431*dbb99499SAndroid Build Coastguard Worker }
432*dbb99499SAndroid Build Coastguard Worker // need two repetitions min to be able to output any aggregate output
433*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Repeat)->Repetitions(2);
434*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
435*dbb99499SAndroid Build Coastguard Worker           {{"^BM_Repeat/repeats:2 %console_report$"},
436*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:2 %console_report$"},
437*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:2_mean %console_time_only_report [ ]*2$"},
438*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:2_median %console_time_only_report [ ]*2$"},
439*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:2_stddev %console_time_only_report [ ]*2$"}});
440*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_Repeat/repeats:2\",$"},
441*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 15,$", MR_Next},
442*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
443*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:2\"", MR_Next},
444*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
445*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 2,$", MR_Next},
446*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
447*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
448*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:2\",$"},
449*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 15,$", MR_Next},
450*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
451*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:2\",$", MR_Next},
452*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
453*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 2,$", MR_Next},
454*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 1,$", MR_Next},
455*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
456*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:2_mean\",$"},
457*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 15,$", MR_Next},
458*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
459*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:2\",$", MR_Next},
460*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
461*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 2,$", MR_Next},
462*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
463*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"mean\",$", MR_Next},
464*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
465*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 2,$", MR_Next},
466*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:2_median\",$"},
467*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 15,$", MR_Next},
468*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
469*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:2\",$", MR_Next},
470*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
471*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 2,$", MR_Next},
472*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
473*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"median\",$", MR_Next},
474*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
475*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 2,$", MR_Next},
476*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:2_stddev\",$"},
477*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 15,$", MR_Next},
478*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
479*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:2\",$", MR_Next},
480*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
481*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 2,$", MR_Next},
482*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
483*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"stddev\",$", MR_Next},
484*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
485*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 2,$", MR_Next}});
486*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_Repeat/repeats:2\",%csv_report$"},
487*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:2\",%csv_report$"},
488*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:2_mean\",%csv_report$"},
489*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:2_median\",%csv_report$"},
490*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:2_stddev\",%csv_report$"}});
491*dbb99499SAndroid Build Coastguard Worker // but for two repetitions, mean and median is the same, so let's repeat..
492*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Repeat)->Repetitions(3);
493*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
494*dbb99499SAndroid Build Coastguard Worker           {{"^BM_Repeat/repeats:3 %console_report$"},
495*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:3 %console_report$"},
496*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:3 %console_report$"},
497*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:3_mean %console_time_only_report [ ]*3$"},
498*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:3_median %console_time_only_report [ ]*3$"},
499*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:3_stddev %console_time_only_report [ ]*3$"}});
500*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_Repeat/repeats:3\",$"},
501*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
502*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
503*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
504*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
505*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
506*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
507*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
508*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:3\",$"},
509*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
510*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
511*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
512*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
513*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
514*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 1,$", MR_Next},
515*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
516*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:3\",$"},
517*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
518*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
519*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
520*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
521*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
522*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 2,$", MR_Next},
523*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
524*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:3_mean\",$"},
525*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
526*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
527*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
528*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
529*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
530*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
531*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"mean\",$", MR_Next},
532*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
533*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 3,$", MR_Next},
534*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:3_median\",$"},
535*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
536*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
537*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
538*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
539*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
540*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
541*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"median\",$", MR_Next},
542*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
543*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 3,$", MR_Next},
544*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:3_stddev\",$"},
545*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 16,$", MR_Next},
546*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
547*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:3\",$", MR_Next},
548*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
549*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 3,$", MR_Next},
550*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
551*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"stddev\",$", MR_Next},
552*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
553*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 3,$", MR_Next}});
554*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_Repeat/repeats:3\",%csv_report$"},
555*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:3\",%csv_report$"},
556*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:3\",%csv_report$"},
557*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:3_mean\",%csv_report$"},
558*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:3_median\",%csv_report$"},
559*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:3_stddev\",%csv_report$"}});
560*dbb99499SAndroid Build Coastguard Worker // median differs between even/odd number of repetitions, so just to be sure
561*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_Repeat)->Repetitions(4);
562*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
563*dbb99499SAndroid Build Coastguard Worker           {{"^BM_Repeat/repeats:4 %console_report$"},
564*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4 %console_report$"},
565*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4 %console_report$"},
566*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4 %console_report$"},
567*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4_mean %console_time_only_report [ ]*4$"},
568*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4_median %console_time_only_report [ ]*4$"},
569*dbb99499SAndroid Build Coastguard Worker            {"^BM_Repeat/repeats:4_stddev %console_time_only_report [ ]*4$"}});
570*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_Repeat/repeats:4\",$"},
571*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
572*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
573*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
574*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
575*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
576*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
577*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
578*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4\",$"},
579*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
580*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
581*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
582*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
583*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
584*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 1,$", MR_Next},
585*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
586*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4\",$"},
587*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
588*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
589*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
590*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
591*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
592*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 2,$", MR_Next},
593*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
594*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4\",$"},
595*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
596*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
597*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
598*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
599*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
600*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 3,$", MR_Next},
601*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
602*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4_mean\",$"},
603*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
604*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
605*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
606*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
607*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
608*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
609*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"mean\",$", MR_Next},
610*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
611*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 4,$", MR_Next},
612*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4_median\",$"},
613*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
614*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
615*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
616*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
617*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
618*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
619*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"median\",$", MR_Next},
620*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
621*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 4,$", MR_Next},
622*dbb99499SAndroid Build Coastguard Worker                        {"\"name\": \"BM_Repeat/repeats:4_stddev\",$"},
623*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 17,$", MR_Next},
624*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
625*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_Repeat/repeats:4\",$", MR_Next},
626*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"aggregate\",$", MR_Next},
627*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 4,$", MR_Next},
628*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
629*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_name\": \"stddev\",$", MR_Next},
630*dbb99499SAndroid Build Coastguard Worker                        {"\"aggregate_unit\": \"time\",$", MR_Next},
631*dbb99499SAndroid Build Coastguard Worker                        {"\"iterations\": 4,$", MR_Next}});
632*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_Repeat/repeats:4\",%csv_report$"},
633*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4\",%csv_report$"},
634*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4\",%csv_report$"},
635*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4\",%csv_report$"},
636*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4_mean\",%csv_report$"},
637*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4_median\",%csv_report$"},
638*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_Repeat/repeats:4_stddev\",%csv_report$"}});
639*dbb99499SAndroid Build Coastguard Worker 
640*dbb99499SAndroid Build Coastguard Worker // Test that a non-repeated test still prints non-aggregate results even when
641*dbb99499SAndroid Build Coastguard Worker // only-aggregate reports have been requested
BM_RepeatOnce(benchmark::State & state)642*dbb99499SAndroid Build Coastguard Worker void BM_RepeatOnce(benchmark::State& state) {
643*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
644*dbb99499SAndroid Build Coastguard Worker   }
645*dbb99499SAndroid Build Coastguard Worker }
646*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_RepeatOnce)->Repetitions(1)->ReportAggregatesOnly();
647*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_RepeatOnce/repeats:1 %console_report$"}});
648*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_RepeatOnce/repeats:1\",$"},
649*dbb99499SAndroid Build Coastguard Worker                        {"\"family_index\": 18,$", MR_Next},
650*dbb99499SAndroid Build Coastguard Worker                        {"\"per_family_instance_index\": 0,$", MR_Next},
651*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_RepeatOnce/repeats:1\",$", MR_Next},
652*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
653*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
654*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
655*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next}});
656*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_RepeatOnce/repeats:1\",%csv_report$"}});
657*dbb99499SAndroid Build Coastguard Worker 
658*dbb99499SAndroid Build Coastguard Worker // Test that non-aggregate data is not reported
BM_SummaryRepeat(benchmark::State & state)659*dbb99499SAndroid Build Coastguard Worker void BM_SummaryRepeat(benchmark::State& state) {
660*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
661*dbb99499SAndroid Build Coastguard Worker   }
662*dbb99499SAndroid Build Coastguard Worker }
663*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_SummaryRepeat)->Repetitions(3)->ReportAggregatesOnly();
664*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
665*dbb99499SAndroid Build Coastguard Worker     TC_ConsoleOut,
666*dbb99499SAndroid Build Coastguard Worker     {{".*BM_SummaryRepeat/repeats:3 ", MR_Not},
667*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryRepeat/repeats:3_mean %console_time_only_report [ ]*3$"},
668*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryRepeat/repeats:3_median %console_time_only_report [ ]*3$"},
669*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryRepeat/repeats:3_stddev %console_time_only_report [ ]*3$"}});
670*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
671*dbb99499SAndroid Build Coastguard Worker           {{".*BM_SummaryRepeat/repeats:3 ", MR_Not},
672*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryRepeat/repeats:3_mean\",$"},
673*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 19,$", MR_Next},
674*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
675*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryRepeat/repeats:3\",$", MR_Next},
676*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
677*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
678*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
679*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"mean\",$", MR_Next},
680*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
681*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next},
682*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryRepeat/repeats:3_median\",$"},
683*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 19,$", MR_Next},
684*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
685*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryRepeat/repeats:3\",$", MR_Next},
686*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
687*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
688*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
689*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"median\",$", MR_Next},
690*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
691*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next},
692*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryRepeat/repeats:3_stddev\",$"},
693*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 19,$", MR_Next},
694*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
695*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryRepeat/repeats:3\",$", MR_Next},
696*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
697*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
698*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
699*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"stddev\",$", MR_Next},
700*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
701*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next}});
702*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{".*BM_SummaryRepeat/repeats:3 ", MR_Not},
703*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_SummaryRepeat/repeats:3_mean\",%csv_report$"},
704*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_SummaryRepeat/repeats:3_median\",%csv_report$"},
705*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_SummaryRepeat/repeats:3_stddev\",%csv_report$"}});
706*dbb99499SAndroid Build Coastguard Worker 
707*dbb99499SAndroid Build Coastguard Worker // Test that non-aggregate data is not displayed.
708*dbb99499SAndroid Build Coastguard Worker // NOTE: this test is kinda bad. we are only testing the display output.
709*dbb99499SAndroid Build Coastguard Worker //       But we don't check that the file output still contains everything...
BM_SummaryDisplay(benchmark::State & state)710*dbb99499SAndroid Build Coastguard Worker void BM_SummaryDisplay(benchmark::State& state) {
711*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
712*dbb99499SAndroid Build Coastguard Worker   }
713*dbb99499SAndroid Build Coastguard Worker }
714*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_SummaryDisplay)->Repetitions(2)->DisplayAggregatesOnly();
715*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
716*dbb99499SAndroid Build Coastguard Worker     TC_ConsoleOut,
717*dbb99499SAndroid Build Coastguard Worker     {{".*BM_SummaryDisplay/repeats:2 ", MR_Not},
718*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryDisplay/repeats:2_mean %console_time_only_report [ ]*2$"},
719*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryDisplay/repeats:2_median %console_time_only_report [ ]*2$"},
720*dbb99499SAndroid Build Coastguard Worker      {"^BM_SummaryDisplay/repeats:2_stddev %console_time_only_report [ ]*2$"}});
721*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
722*dbb99499SAndroid Build Coastguard Worker           {{".*BM_SummaryDisplay/repeats:2 ", MR_Not},
723*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryDisplay/repeats:2_mean\",$"},
724*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 20,$", MR_Next},
725*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
726*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryDisplay/repeats:2\",$", MR_Next},
727*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
728*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 2,$", MR_Next},
729*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
730*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"mean\",$", MR_Next},
731*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
732*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 2,$", MR_Next},
733*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryDisplay/repeats:2_median\",$"},
734*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 20,$", MR_Next},
735*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
736*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryDisplay/repeats:2\",$", MR_Next},
737*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
738*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 2,$", MR_Next},
739*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
740*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"median\",$", MR_Next},
741*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
742*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 2,$", MR_Next},
743*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_SummaryDisplay/repeats:2_stddev\",$"},
744*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 20,$", MR_Next},
745*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
746*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_SummaryDisplay/repeats:2\",$", MR_Next},
747*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
748*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 2,$", MR_Next},
749*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
750*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"stddev\",$", MR_Next},
751*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
752*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 2,$", MR_Next}});
753*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
754*dbb99499SAndroid Build Coastguard Worker           {{".*BM_SummaryDisplay/repeats:2 ", MR_Not},
755*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_SummaryDisplay/repeats:2_mean\",%csv_report$"},
756*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_SummaryDisplay/repeats:2_median\",%csv_report$"},
757*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_SummaryDisplay/repeats:2_stddev\",%csv_report$"}});
758*dbb99499SAndroid Build Coastguard Worker 
759*dbb99499SAndroid Build Coastguard Worker // Test repeats with custom time unit.
BM_RepeatTimeUnit(benchmark::State & state)760*dbb99499SAndroid Build Coastguard Worker void BM_RepeatTimeUnit(benchmark::State& state) {
761*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
762*dbb99499SAndroid Build Coastguard Worker   }
763*dbb99499SAndroid Build Coastguard Worker }
764*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_RepeatTimeUnit)
765*dbb99499SAndroid Build Coastguard Worker     ->Repetitions(3)
766*dbb99499SAndroid Build Coastguard Worker     ->ReportAggregatesOnly()
767*dbb99499SAndroid Build Coastguard Worker     ->Unit(benchmark::kMicrosecond);
768*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
769*dbb99499SAndroid Build Coastguard Worker     TC_ConsoleOut,
770*dbb99499SAndroid Build Coastguard Worker     {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not},
771*dbb99499SAndroid Build Coastguard Worker      {"^BM_RepeatTimeUnit/repeats:3_mean %console_us_time_only_report [ ]*3$"},
772*dbb99499SAndroid Build Coastguard Worker      {"^BM_RepeatTimeUnit/repeats:3_median %console_us_time_only_report [ "
773*dbb99499SAndroid Build Coastguard Worker       "]*3$"},
774*dbb99499SAndroid Build Coastguard Worker      {"^BM_RepeatTimeUnit/repeats:3_stddev %console_us_time_only_report [ "
775*dbb99499SAndroid Build Coastguard Worker       "]*3$"}});
776*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut,
777*dbb99499SAndroid Build Coastguard Worker           {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not},
778*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_RepeatTimeUnit/repeats:3_mean\",$"},
779*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 21,$", MR_Next},
780*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
781*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_RepeatTimeUnit/repeats:3\",$", MR_Next},
782*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
783*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
784*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
785*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"mean\",$", MR_Next},
786*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
787*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next},
788*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"us\",?$"},
789*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_RepeatTimeUnit/repeats:3_median\",$"},
790*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 21,$", MR_Next},
791*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
792*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_RepeatTimeUnit/repeats:3\",$", MR_Next},
793*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
794*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
795*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
796*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"median\",$", MR_Next},
797*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
798*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next},
799*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"us\",?$"},
800*dbb99499SAndroid Build Coastguard Worker            {"\"name\": \"BM_RepeatTimeUnit/repeats:3_stddev\",$"},
801*dbb99499SAndroid Build Coastguard Worker            {"\"family_index\": 21,$", MR_Next},
802*dbb99499SAndroid Build Coastguard Worker            {"\"per_family_instance_index\": 0,$", MR_Next},
803*dbb99499SAndroid Build Coastguard Worker            {"\"run_name\": \"BM_RepeatTimeUnit/repeats:3\",$", MR_Next},
804*dbb99499SAndroid Build Coastguard Worker            {"\"run_type\": \"aggregate\",$", MR_Next},
805*dbb99499SAndroid Build Coastguard Worker            {"\"repetitions\": 3,$", MR_Next},
806*dbb99499SAndroid Build Coastguard Worker            {"\"threads\": 1,$", MR_Next},
807*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_name\": \"stddev\",$", MR_Next},
808*dbb99499SAndroid Build Coastguard Worker            {"\"aggregate_unit\": \"time\",$", MR_Next},
809*dbb99499SAndroid Build Coastguard Worker            {"\"iterations\": 3,$", MR_Next},
810*dbb99499SAndroid Build Coastguard Worker            {"\"time_unit\": \"us\",?$"}});
811*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut,
812*dbb99499SAndroid Build Coastguard Worker           {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not},
813*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_RepeatTimeUnit/repeats:3_mean\",%csv_us_report$"},
814*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_RepeatTimeUnit/repeats:3_median\",%csv_us_report$"},
815*dbb99499SAndroid Build Coastguard Worker            {"^\"BM_RepeatTimeUnit/repeats:3_stddev\",%csv_us_report$"}});
816*dbb99499SAndroid Build Coastguard Worker 
817*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
818*dbb99499SAndroid Build Coastguard Worker // -------------------- Testing user-provided statistics ------------------- //
819*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
820*dbb99499SAndroid Build Coastguard Worker 
__anon67cceb300102(const std::vector<double>& v) 821*dbb99499SAndroid Build Coastguard Worker const auto UserStatistics = [](const std::vector<double>& v) {
822*dbb99499SAndroid Build Coastguard Worker   return v.back();
823*dbb99499SAndroid Build Coastguard Worker };
BM_UserStats(benchmark::State & state)824*dbb99499SAndroid Build Coastguard Worker void BM_UserStats(benchmark::State& state) {
825*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
826*dbb99499SAndroid Build Coastguard Worker     state.SetIterationTime(150 / 10e8);
827*dbb99499SAndroid Build Coastguard Worker   }
828*dbb99499SAndroid Build Coastguard Worker }
829*dbb99499SAndroid Build Coastguard Worker // clang-format off
830*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_UserStats)
831*dbb99499SAndroid Build Coastguard Worker   ->Repetitions(3)
832*dbb99499SAndroid Build Coastguard Worker   ->Iterations(5)
833*dbb99499SAndroid Build Coastguard Worker   ->UseManualTime()
834*dbb99499SAndroid Build Coastguard Worker   ->ComputeStatistics("", UserStatistics);
835*dbb99499SAndroid Build Coastguard Worker // clang-format on
836*dbb99499SAndroid Build Coastguard Worker 
837*dbb99499SAndroid Build Coastguard Worker // check that user-provided stats is calculated, and is after the default-ones
838*dbb99499SAndroid Build Coastguard Worker // empty string as name is intentional, it would sort before anything else
839*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut, {{"^BM_UserStats/iterations:5/repeats:3/manual_time [ "
840*dbb99499SAndroid Build Coastguard Worker                            "]* 150 ns %time [ ]*5$"},
841*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/manual_time [ "
842*dbb99499SAndroid Build Coastguard Worker                            "]* 150 ns %time [ ]*5$"},
843*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/manual_time [ "
844*dbb99499SAndroid Build Coastguard Worker                            "]* 150 ns %time [ ]*5$"},
845*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/"
846*dbb99499SAndroid Build Coastguard Worker                            "manual_time_mean [ ]* 150 ns %time [ ]*3$"},
847*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/"
848*dbb99499SAndroid Build Coastguard Worker                            "manual_time_median [ ]* 150 ns %time [ ]*3$"},
849*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/"
850*dbb99499SAndroid Build Coastguard Worker                            "manual_time_stddev [ ]* 0.000 ns %time [ ]*3$"},
851*dbb99499SAndroid Build Coastguard Worker                           {"^BM_UserStats/iterations:5/repeats:3/manual_time_ "
852*dbb99499SAndroid Build Coastguard Worker                            "[ ]* 150 ns %time [ ]*3$"}});
853*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
854*dbb99499SAndroid Build Coastguard Worker     TC_JSONOut,
855*dbb99499SAndroid Build Coastguard Worker     {{"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$"},
856*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
857*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
858*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
859*dbb99499SAndroid Build Coastguard Worker       MR_Next},
860*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
861*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
862*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 0,$", MR_Next},
863*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
864*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
865*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
866*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$"},
867*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
868*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
869*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
870*dbb99499SAndroid Build Coastguard Worker       MR_Next},
871*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
872*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
873*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 1,$", MR_Next},
874*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
875*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
876*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
877*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$"},
878*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
879*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
880*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
881*dbb99499SAndroid Build Coastguard Worker       MR_Next},
882*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
883*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
884*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 2,$", MR_Next},
885*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
886*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
887*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
888*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time_mean\",$"},
889*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
890*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
891*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
892*dbb99499SAndroid Build Coastguard Worker       MR_Next},
893*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
894*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
895*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
896*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"mean\",$", MR_Next},
897*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
898*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
899*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
900*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time_median\",$"},
901*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
902*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
903*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
904*dbb99499SAndroid Build Coastguard Worker       MR_Next},
905*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
906*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
907*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
908*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"median\",$", MR_Next},
909*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
910*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
911*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
912*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time_stddev\",$"},
913*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
914*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
915*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
916*dbb99499SAndroid Build Coastguard Worker       MR_Next},
917*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
918*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
919*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
920*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"stddev\",$", MR_Next},
921*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
922*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
923*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": %float,$", MR_Next},
924*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserStats/iterations:5/repeats:3/manual_time_\",$"},
925*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 22,$", MR_Next},
926*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
927*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": \"BM_UserStats/iterations:5/repeats:3/manual_time\",$",
928*dbb99499SAndroid Build Coastguard Worker       MR_Next},
929*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
930*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
931*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
932*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"\",$", MR_Next},
933*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
934*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
935*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next}});
936*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
937*dbb99499SAndroid Build Coastguard Worker     TC_CSVOut,
938*dbb99499SAndroid Build Coastguard Worker     {{"^\"BM_UserStats/iterations:5/repeats:3/manual_time\",%csv_report$"},
939*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/manual_time\",%csv_report$"},
940*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/manual_time\",%csv_report$"},
941*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/manual_time_mean\",%csv_report$"},
942*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/"
943*dbb99499SAndroid Build Coastguard Worker       "manual_time_median\",%csv_report$"},
944*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/"
945*dbb99499SAndroid Build Coastguard Worker       "manual_time_stddev\",%csv_report$"},
946*dbb99499SAndroid Build Coastguard Worker      {"^\"BM_UserStats/iterations:5/repeats:3/manual_time_\",%csv_report$"}});
947*dbb99499SAndroid Build Coastguard Worker 
948*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
949*dbb99499SAndroid Build Coastguard Worker // ------------- Testing relative standard deviation statistics ------------ //
950*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
951*dbb99499SAndroid Build Coastguard Worker 
__anon67cceb300202(const std::vector<double>&) 952*dbb99499SAndroid Build Coastguard Worker const auto UserPercentStatistics = [](const std::vector<double>&) {
953*dbb99499SAndroid Build Coastguard Worker   return 1. / 100.;
954*dbb99499SAndroid Build Coastguard Worker };
BM_UserPercentStats(benchmark::State & state)955*dbb99499SAndroid Build Coastguard Worker void BM_UserPercentStats(benchmark::State& state) {
956*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
957*dbb99499SAndroid Build Coastguard Worker     state.SetIterationTime(150 / 10e8);
958*dbb99499SAndroid Build Coastguard Worker   }
959*dbb99499SAndroid Build Coastguard Worker }
960*dbb99499SAndroid Build Coastguard Worker // clang-format off
961*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_UserPercentStats)
962*dbb99499SAndroid Build Coastguard Worker   ->Repetitions(3)
963*dbb99499SAndroid Build Coastguard Worker   ->Iterations(5)
964*dbb99499SAndroid Build Coastguard Worker   ->UseManualTime()
965*dbb99499SAndroid Build Coastguard Worker   ->Unit(benchmark::TimeUnit::kNanosecond)
966*dbb99499SAndroid Build Coastguard Worker   ->ComputeStatistics("", UserPercentStatistics, benchmark::StatisticUnit::kPercentage);
967*dbb99499SAndroid Build Coastguard Worker // clang-format on
968*dbb99499SAndroid Build Coastguard Worker 
969*dbb99499SAndroid Build Coastguard Worker // check that UserPercent-provided stats is calculated, and is after the
970*dbb99499SAndroid Build Coastguard Worker // default-ones empty string as name is intentional, it would sort before
971*dbb99499SAndroid Build Coastguard Worker // anything else
972*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_ConsoleOut,
973*dbb99499SAndroid Build Coastguard Worker           {{"^BM_UserPercentStats/iterations:5/repeats:3/manual_time [ "
974*dbb99499SAndroid Build Coastguard Worker             "]* 150 ns %time [ ]*5$"},
975*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/manual_time [ "
976*dbb99499SAndroid Build Coastguard Worker             "]* 150 ns %time [ ]*5$"},
977*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/manual_time [ "
978*dbb99499SAndroid Build Coastguard Worker             "]* 150 ns %time [ ]*5$"},
979*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/"
980*dbb99499SAndroid Build Coastguard Worker             "manual_time_mean [ ]* 150 ns %time [ ]*3$"},
981*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/"
982*dbb99499SAndroid Build Coastguard Worker             "manual_time_median [ ]* 150 ns %time [ ]*3$"},
983*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/"
984*dbb99499SAndroid Build Coastguard Worker             "manual_time_stddev [ ]* 0.000 ns %time [ ]*3$"},
985*dbb99499SAndroid Build Coastguard Worker            {"^BM_UserPercentStats/iterations:5/repeats:3/manual_time_ "
986*dbb99499SAndroid Build Coastguard Worker             "[ ]* 1.00 % [ ]* 1.00 %[ ]*3$"}});
987*dbb99499SAndroid Build Coastguard Worker ADD_CASES(
988*dbb99499SAndroid Build Coastguard Worker     TC_JSONOut,
989*dbb99499SAndroid Build Coastguard Worker     {{"\"name\": \"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$"},
990*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
991*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
992*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
993*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
994*dbb99499SAndroid Build Coastguard Worker       MR_Next},
995*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
996*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
997*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 0,$", MR_Next},
998*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
999*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
1000*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
1001*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$"},
1002*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1003*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1004*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1005*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1006*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1007*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
1008*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1009*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 1,$", MR_Next},
1010*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1011*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
1012*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
1013*dbb99499SAndroid Build Coastguard Worker      {"\"name\": \"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$"},
1014*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1015*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1016*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1017*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1018*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1019*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"iteration\",$", MR_Next},
1020*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1021*dbb99499SAndroid Build Coastguard Worker      {"\"repetition_index\": 2,$", MR_Next},
1022*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1023*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 5,$", MR_Next},
1024*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
1025*dbb99499SAndroid Build Coastguard Worker      {"\"name\": "
1026*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time_mean\",$"},
1027*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1028*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1029*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1030*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1031*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1032*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
1033*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1034*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1035*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"mean\",$", MR_Next},
1036*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
1037*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
1038*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
1039*dbb99499SAndroid Build Coastguard Worker      {"\"name\": "
1040*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time_median\",$"},
1041*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1042*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1043*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1044*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1045*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1046*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
1047*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1048*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1049*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"median\",$", MR_Next},
1050*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
1051*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
1052*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.5(0)*e\\+(0)*2,$", MR_Next},
1053*dbb99499SAndroid Build Coastguard Worker      {"\"name\": "
1054*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time_stddev\",$"},
1055*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1056*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1057*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1058*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1059*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1060*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
1061*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1062*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1063*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"stddev\",$", MR_Next},
1064*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"time\",$", MR_Next},
1065*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
1066*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": %float,$", MR_Next},
1067*dbb99499SAndroid Build Coastguard Worker      {"\"name\": "
1068*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time_\",$"},
1069*dbb99499SAndroid Build Coastguard Worker      {"\"family_index\": 23,$", MR_Next},
1070*dbb99499SAndroid Build Coastguard Worker      {"\"per_family_instance_index\": 0,$", MR_Next},
1071*dbb99499SAndroid Build Coastguard Worker      {"\"run_name\": "
1072*dbb99499SAndroid Build Coastguard Worker       "\"BM_UserPercentStats/iterations:5/repeats:3/manual_time\",$",
1073*dbb99499SAndroid Build Coastguard Worker       MR_Next},
1074*dbb99499SAndroid Build Coastguard Worker      {"\"run_type\": \"aggregate\",$", MR_Next},
1075*dbb99499SAndroid Build Coastguard Worker      {"\"repetitions\": 3,$", MR_Next},
1076*dbb99499SAndroid Build Coastguard Worker      {"\"threads\": 1,$", MR_Next},
1077*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_name\": \"\",$", MR_Next},
1078*dbb99499SAndroid Build Coastguard Worker      {"\"aggregate_unit\": \"percentage\",$", MR_Next},
1079*dbb99499SAndroid Build Coastguard Worker      {"\"iterations\": 3,$", MR_Next},
1080*dbb99499SAndroid Build Coastguard Worker      {"\"real_time\": 1\\.(0)*e-(0)*2,$", MR_Next}});
1081*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1082*dbb99499SAndroid Build Coastguard Worker                        "manual_time\",%csv_report$"},
1083*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1084*dbb99499SAndroid Build Coastguard Worker                        "manual_time\",%csv_report$"},
1085*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1086*dbb99499SAndroid Build Coastguard Worker                        "manual_time\",%csv_report$"},
1087*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1088*dbb99499SAndroid Build Coastguard Worker                        "manual_time_mean\",%csv_report$"},
1089*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1090*dbb99499SAndroid Build Coastguard Worker                        "manual_time_median\",%csv_report$"},
1091*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1092*dbb99499SAndroid Build Coastguard Worker                        "manual_time_stddev\",%csv_report$"},
1093*dbb99499SAndroid Build Coastguard Worker                       {"^\"BM_UserPercentStats/iterations:5/repeats:3/"
1094*dbb99499SAndroid Build Coastguard Worker                        "manual_time_\",%csv_cv_report$"}});
1095*dbb99499SAndroid Build Coastguard Worker 
1096*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1097*dbb99499SAndroid Build Coastguard Worker // ------------------------- Testing StrEscape JSON ------------------------ //
1098*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1099*dbb99499SAndroid Build Coastguard Worker #if 0  // enable when csv testing code correctly handles multi-line fields
1100*dbb99499SAndroid Build Coastguard Worker void BM_JSON_Format(benchmark::State& state) {
1101*dbb99499SAndroid Build Coastguard Worker   state.SkipWithError("val\b\f\n\r\t\\\"with\"es,capes");
1102*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
1103*dbb99499SAndroid Build Coastguard Worker   }
1104*dbb99499SAndroid Build Coastguard Worker }
1105*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_JSON_Format);
1106*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_JSON_Format\",$"},
1107*dbb99499SAndroid Build Coastguard Worker                                               {"\"family_index\": 23,$", MR_Next},
1108*dbb99499SAndroid Build Coastguard Worker {"\"per_family_instance_index\": 0,$", MR_Next},
1109*dbb99499SAndroid Build Coastguard Worker                        {"\"run_name\": \"BM_JSON_Format\",$", MR_Next},
1110*dbb99499SAndroid Build Coastguard Worker                        {"\"run_type\": \"iteration\",$", MR_Next},
1111*dbb99499SAndroid Build Coastguard Worker                        {"\"repetitions\": 1,$", MR_Next},
1112*dbb99499SAndroid Build Coastguard Worker                        {"\"repetition_index\": 0,$", MR_Next},
1113*dbb99499SAndroid Build Coastguard Worker                        {"\"threads\": 1,$", MR_Next},
1114*dbb99499SAndroid Build Coastguard Worker                        {"\"error_occurred\": true,$", MR_Next},
1115*dbb99499SAndroid Build Coastguard Worker                        {R"("error_message": "val\\b\\f\\n\\r\\t\\\\\\"with\\"es,capes",$)", MR_Next}});
1116*dbb99499SAndroid Build Coastguard Worker #endif
1117*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1118*dbb99499SAndroid Build Coastguard Worker // -------------------------- Testing CsvEscape ---------------------------- //
1119*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1120*dbb99499SAndroid Build Coastguard Worker 
BM_CSV_Format(benchmark::State & state)1121*dbb99499SAndroid Build Coastguard Worker void BM_CSV_Format(benchmark::State& state) {
1122*dbb99499SAndroid Build Coastguard Worker   state.SkipWithError("\"freedom\"");
1123*dbb99499SAndroid Build Coastguard Worker   for (auto _ : state) {
1124*dbb99499SAndroid Build Coastguard Worker   }
1125*dbb99499SAndroid Build Coastguard Worker }
1126*dbb99499SAndroid Build Coastguard Worker BENCHMARK(BM_CSV_Format);
1127*dbb99499SAndroid Build Coastguard Worker ADD_CASES(TC_CSVOut, {{"^\"BM_CSV_Format\",,,,,,,,true,\"\"\"freedom\"\"\"$"}});
1128*dbb99499SAndroid Build Coastguard Worker 
1129*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1130*dbb99499SAndroid Build Coastguard Worker // --------------------------- TEST CASES END ------------------------------ //
1131*dbb99499SAndroid Build Coastguard Worker // ========================================================================= //
1132*dbb99499SAndroid Build Coastguard Worker 
main(int argc,char * argv[])1133*dbb99499SAndroid Build Coastguard Worker int main(int argc, char* argv[]) { RunOutputTests(argc, argv); }
1134