xref: /llvm-project/third-party/benchmark/test/user_counters_tabular_test.cc (revision a5b797172cc902db166e9a695716fb81405f86e4)
15dda2efdSMircea Trofin 
25dda2efdSMircea Trofin #undef NDEBUG
35dda2efdSMircea Trofin 
45dda2efdSMircea Trofin #include "benchmark/benchmark.h"
55dda2efdSMircea Trofin #include "output_test.h"
65dda2efdSMircea Trofin 
75dda2efdSMircea Trofin // @todo: <jpmag> this checks the full output at once; the rule for
85dda2efdSMircea Trofin // CounterSet1 was failing because it was not matching "^[-]+$".
95dda2efdSMircea Trofin // @todo: <jpmag> check that the counters are vertically aligned.
105dda2efdSMircea Trofin ADD_CASES(TC_ConsoleOut,
115dda2efdSMircea Trofin           {
125dda2efdSMircea Trofin               // keeping these lines long improves readability, so:
135dda2efdSMircea Trofin               // clang-format off
145dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
155dda2efdSMircea Trofin     {"^Benchmark %s Time %s CPU %s Iterations %s Bar %s Bat %s Baz %s Foo %s Frob %s Lob$", MR_Next},
165dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
175dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:1 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
185dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:1 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
195dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:1_mean %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
205dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:1_median %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
215dda2efdSMircea Trofin             {"^BM_Counters_Tabular/repeats:2/threads:1_stddev %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
22a290770fSMircea Trofin             {"^BM_Counters_Tabular/repeats:2/threads:1_cv %console_percentage_report [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*%$", MR_Next},
235dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:2 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
245dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:2 %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
255dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:2_mean %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
265dda2efdSMircea Trofin       {"^BM_Counters_Tabular/repeats:2/threads:2_median %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
275dda2efdSMircea Trofin             {"^BM_Counters_Tabular/repeats:2/threads:2_stddev %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
28a290770fSMircea Trofin             {"^BM_Counters_Tabular/repeats:2/threads:2_cv %console_percentage_report [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*% [ ]*%percentage[ ]*%$", MR_Next},
295dda2efdSMircea Trofin     {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
305dda2efdSMircea Trofin     {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
315dda2efdSMircea Trofin     {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
325dda2efdSMircea Trofin     {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
335dda2efdSMircea Trofin     {"^BM_CounterRates_Tabular/threads:%int %console_report [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s [ ]*%hrfloat/s$", MR_Next},
345dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
355dda2efdSMircea Trofin     {"^Benchmark %s Time %s CPU %s Iterations %s Bar %s Baz %s Foo$", MR_Next},
365dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
375dda2efdSMircea Trofin     {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
385dda2efdSMircea Trofin     {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
395dda2efdSMircea Trofin     {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
405dda2efdSMircea Trofin     {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
415dda2efdSMircea Trofin     {"^BM_CounterSet0_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
425dda2efdSMircea Trofin     {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
435dda2efdSMircea Trofin     {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
445dda2efdSMircea Trofin     {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
455dda2efdSMircea Trofin     {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
465dda2efdSMircea Trofin     {"^BM_CounterSet1_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
475dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
485dda2efdSMircea Trofin     {"^Benchmark %s Time %s CPU %s Iterations %s Bat %s Baz %s Foo$", MR_Next},
495dda2efdSMircea Trofin     {"^[-]+$", MR_Next},
505dda2efdSMircea Trofin     {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
515dda2efdSMircea Trofin     {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
525dda2efdSMircea Trofin     {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
535dda2efdSMircea Trofin     {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$", MR_Next},
545dda2efdSMircea Trofin     {"^BM_CounterSet2_Tabular/threads:%int %console_report [ ]*%hrfloat [ ]*%hrfloat [ ]*%hrfloat$"},
555dda2efdSMircea Trofin               // clang-format on
565dda2efdSMircea Trofin           });
575dda2efdSMircea Trofin ADD_CASES(TC_CSVOut, {{"%csv_header,"
585dda2efdSMircea Trofin                        "\"Bar\",\"Bat\",\"Baz\",\"Foo\",\"Frob\",\"Lob\""}});
595dda2efdSMircea Trofin 
605dda2efdSMircea Trofin // ========================================================================= //
615dda2efdSMircea Trofin // ------------------------- Tabular Counters Output ----------------------- //
625dda2efdSMircea Trofin // ========================================================================= //
635dda2efdSMircea Trofin 
BM_Counters_Tabular(benchmark::State & state)645dda2efdSMircea Trofin void BM_Counters_Tabular(benchmark::State& state) {
655dda2efdSMircea Trofin   for (auto _ : state) {
66*a5b79717SMircea Trofin     // This test requires a non-zero CPU time to avoid divide-by-zero
67*a5b79717SMircea Trofin     auto iterations = double(state.iterations()) * double(state.iterations());
68*a5b79717SMircea Trofin     benchmark::DoNotOptimize(iterations);
695dda2efdSMircea Trofin   }
705dda2efdSMircea Trofin   namespace bm = benchmark;
715dda2efdSMircea Trofin   state.counters.insert({
725dda2efdSMircea Trofin       {"Foo", {1, bm::Counter::kAvgThreads}},
735dda2efdSMircea Trofin       {"Bar", {2, bm::Counter::kAvgThreads}},
745dda2efdSMircea Trofin       {"Baz", {4, bm::Counter::kAvgThreads}},
755dda2efdSMircea Trofin       {"Bat", {8, bm::Counter::kAvgThreads}},
765dda2efdSMircea Trofin       {"Frob", {16, bm::Counter::kAvgThreads}},
775dda2efdSMircea Trofin       {"Lob", {32, bm::Counter::kAvgThreads}},
785dda2efdSMircea Trofin   });
795dda2efdSMircea Trofin }
805dda2efdSMircea Trofin BENCHMARK(BM_Counters_Tabular)->ThreadRange(1, 2)->Repetitions(2);
815dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
825dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$"},
835dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
845dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
855dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
865dda2efdSMircea Trofin             MR_Next},
875dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
885dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
895dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
905dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
915dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
925dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
935dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
945dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
955dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
965dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
975dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
985dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
995dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
1005dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
1015dda2efdSMircea Trofin            {"}", MR_Next}});
1025dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
1035dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$"},
1045dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
1055dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
1065dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
1075dda2efdSMircea Trofin             MR_Next},
1085dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
1095dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
1105dda2efdSMircea Trofin            {"\"repetition_index\": 1,$", MR_Next},
1115dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
1125dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
1135dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
1145dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
1155dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
1165dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
1175dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
1185dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
1195dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
1205dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
1215dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
1225dda2efdSMircea Trofin            {"}", MR_Next}});
1235dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
1245dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_mean\",$"},
1255dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
1265dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
1275dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
1285dda2efdSMircea Trofin             MR_Next},
1295dda2efdSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
1305dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
1315dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
1325dda2efdSMircea Trofin            {"\"aggregate_name\": \"mean\",$", MR_Next},
133a290770fSMircea Trofin            {"\"aggregate_unit\": \"time\",$", MR_Next},
1345dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
1355dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
1365dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
1375dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
1385dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
1395dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
1405dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
1415dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
1425dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
1435dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
1445dda2efdSMircea Trofin            {"}", MR_Next}});
1455dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
1465dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_median\",$"},
1475dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
1485dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
1495dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
1505dda2efdSMircea Trofin             MR_Next},
1515dda2efdSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
1525dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
1535dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
1545dda2efdSMircea Trofin            {"\"aggregate_name\": \"median\",$", MR_Next},
155a290770fSMircea Trofin            {"\"aggregate_unit\": \"time\",$", MR_Next},
1565dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
1575dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
1585dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
1595dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
1605dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
1615dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
1625dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
1635dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
1645dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
1655dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
1665dda2efdSMircea Trofin            {"}", MR_Next}});
1675dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
1685dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_stddev\",$"},
1695dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
1705dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
1715dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
1725dda2efdSMircea Trofin             MR_Next},
1735dda2efdSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
1745dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
1755dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
1765dda2efdSMircea Trofin            {"\"aggregate_name\": \"stddev\",$", MR_Next},
177a290770fSMircea Trofin            {"\"aggregate_unit\": \"time\",$", MR_Next},
178a290770fSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
179a290770fSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
180a290770fSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
181a290770fSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
182a290770fSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
183a290770fSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
184a290770fSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
185a290770fSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
186a290770fSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
187a290770fSMircea Trofin            {"\"Lob\": %float$", MR_Next},
188a290770fSMircea Trofin            {"}", MR_Next}});
189a290770fSMircea Trofin ADD_CASES(TC_JSONOut,
190a290770fSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:1_cv\",$"},
191a290770fSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
192a290770fSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
193a290770fSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:1\",$",
194a290770fSMircea Trofin             MR_Next},
195a290770fSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
196a290770fSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
197a290770fSMircea Trofin            {"\"threads\": 1,$", MR_Next},
198a290770fSMircea Trofin            {"\"aggregate_name\": \"cv\",$", MR_Next},
199a290770fSMircea Trofin            {"\"aggregate_unit\": \"percentage\",$", MR_Next},
2005dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
2015dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
2025dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
2035dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
2045dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
2055dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
2065dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
2075dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
2085dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
2095dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
2105dda2efdSMircea Trofin            {"}", MR_Next}});
2115dda2efdSMircea Trofin 
2125dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
2135dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$"},
2145dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
2155dda2efdSMircea Trofin            {"\"per_family_instance_index\": 1,$", MR_Next},
2165dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
2175dda2efdSMircea Trofin             MR_Next},
2185dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
2195dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
2205dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
2215dda2efdSMircea Trofin            {"\"threads\": 2,$", MR_Next},
2225dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
2235dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
2245dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
2255dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
2265dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
2275dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
2285dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
2295dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
2305dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
2315dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
2325dda2efdSMircea Trofin            {"}", MR_Next}});
2335dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
2345dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$"},
2355dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
2365dda2efdSMircea Trofin            {"\"per_family_instance_index\": 1,$", MR_Next},
2375dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
2385dda2efdSMircea Trofin             MR_Next},
2395dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
2405dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
2415dda2efdSMircea Trofin            {"\"repetition_index\": 1,$", MR_Next},
2425dda2efdSMircea Trofin            {"\"threads\": 2,$", MR_Next},
2435dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
2445dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
2455dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
2465dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
2475dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
2485dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
2495dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
2505dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
2515dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
2525dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
2535dda2efdSMircea Trofin            {"}", MR_Next}});
2545dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
2555dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_median\",$"},
2565dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
2575dda2efdSMircea Trofin            {"\"per_family_instance_index\": 1,$", MR_Next},
2585dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
2595dda2efdSMircea Trofin             MR_Next},
2605dda2efdSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
2615dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
2625dda2efdSMircea Trofin            {"\"threads\": 2,$", MR_Next},
2635dda2efdSMircea Trofin            {"\"aggregate_name\": \"median\",$", MR_Next},
264a290770fSMircea Trofin            {"\"aggregate_unit\": \"time\",$", MR_Next},
2655dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
2665dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
2675dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
2685dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
2695dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
2705dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
2715dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
2725dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
2735dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
2745dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
2755dda2efdSMircea Trofin            {"}", MR_Next}});
2765dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
2775dda2efdSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_stddev\",$"},
2785dda2efdSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
2795dda2efdSMircea Trofin            {"\"per_family_instance_index\": 1,$", MR_Next},
2805dda2efdSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
2815dda2efdSMircea Trofin             MR_Next},
2825dda2efdSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
2835dda2efdSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
2845dda2efdSMircea Trofin            {"\"threads\": 2,$", MR_Next},
2855dda2efdSMircea Trofin            {"\"aggregate_name\": \"stddev\",$", MR_Next},
286a290770fSMircea Trofin            {"\"aggregate_unit\": \"time\",$", MR_Next},
287a290770fSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
288a290770fSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
289a290770fSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
290a290770fSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
291a290770fSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
292a290770fSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
293a290770fSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
294a290770fSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
295a290770fSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
296a290770fSMircea Trofin            {"\"Lob\": %float$", MR_Next},
297a290770fSMircea Trofin            {"}", MR_Next}});
298a290770fSMircea Trofin ADD_CASES(TC_JSONOut,
299a290770fSMircea Trofin           {{"\"name\": \"BM_Counters_Tabular/repeats:2/threads:2_cv\",$"},
300a290770fSMircea Trofin            {"\"family_index\": 0,$", MR_Next},
301a290770fSMircea Trofin            {"\"per_family_instance_index\": 1,$", MR_Next},
302a290770fSMircea Trofin            {"\"run_name\": \"BM_Counters_Tabular/repeats:2/threads:2\",$",
303a290770fSMircea Trofin             MR_Next},
304a290770fSMircea Trofin            {"\"run_type\": \"aggregate\",$", MR_Next},
305a290770fSMircea Trofin            {"\"repetitions\": 2,$", MR_Next},
306a290770fSMircea Trofin            {"\"threads\": 2,$", MR_Next},
307a290770fSMircea Trofin            {"\"aggregate_name\": \"cv\",$", MR_Next},
308a290770fSMircea Trofin            {"\"aggregate_unit\": \"percentage\",$", MR_Next},
3095dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
3105dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
3115dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
3125dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
3135dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
3145dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
3155dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
3165dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
3175dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
3185dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
3195dda2efdSMircea Trofin            {"}", MR_Next}});
3205dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3215dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1\",%csv_report,"
3225dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3235dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3245dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1\",%csv_report,"
3255dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3265dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3275dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1_mean\",%csv_report,"
3285dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3295dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3305dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1_median\",%csv_report,"
3315dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3325dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3335dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1_stddev\",%csv_report,"
3345dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3355dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
336*a5b79717SMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:1_cv\",%csv_cv_report,"
337a290770fSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
338a290770fSMircea Trofin ADD_CASES(TC_CSVOut,
3395dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2\",%csv_report,"
3405dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3415dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3425dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2\",%csv_report,"
3435dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3445dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3455dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2_mean\",%csv_report,"
3465dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3475dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3485dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2_median\",%csv_report,"
3495dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3505dda2efdSMircea Trofin ADD_CASES(TC_CSVOut,
3515dda2efdSMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2_stddev\",%csv_report,"
3525dda2efdSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
353a290770fSMircea Trofin ADD_CASES(TC_CSVOut,
354*a5b79717SMircea Trofin           {{"^\"BM_Counters_Tabular/repeats:2/threads:2_cv\",%csv_cv_report,"
355a290770fSMircea Trofin             "%float,%float,%float,%float,%float,%float$"}});
3565dda2efdSMircea Trofin // VS2013 does not allow this function to be passed as a lambda argument
3575dda2efdSMircea Trofin // to CHECK_BENCHMARK_RESULTS()
CheckTabular(Results const & e)3585dda2efdSMircea Trofin void CheckTabular(Results const& e) {
3595dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 1);
3605dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 2);
3615dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 4);
3625dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Bat", EQ, 8);
3635dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Frob", EQ, 16);
3645dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Lob", EQ, 32);
3655dda2efdSMircea Trofin }
3665dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_Counters_Tabular/repeats:2/threads:1$",
3675dda2efdSMircea Trofin                         &CheckTabular);
3685dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_Counters_Tabular/repeats:2/threads:2$",
3695dda2efdSMircea Trofin                         &CheckTabular);
3705dda2efdSMircea Trofin 
3715dda2efdSMircea Trofin // ========================================================================= //
3725dda2efdSMircea Trofin // -------------------- Tabular+Rate Counters Output ----------------------- //
3735dda2efdSMircea Trofin // ========================================================================= //
3745dda2efdSMircea Trofin 
BM_CounterRates_Tabular(benchmark::State & state)3755dda2efdSMircea Trofin void BM_CounterRates_Tabular(benchmark::State& state) {
3765dda2efdSMircea Trofin   for (auto _ : state) {
3775dda2efdSMircea Trofin     // This test requires a non-zero CPU time to avoid divide-by-zero
378*a5b79717SMircea Trofin     auto iterations = double(state.iterations()) * double(state.iterations());
379*a5b79717SMircea Trofin     benchmark::DoNotOptimize(iterations);
3805dda2efdSMircea Trofin   }
3815dda2efdSMircea Trofin   namespace bm = benchmark;
3825dda2efdSMircea Trofin   state.counters.insert({
3835dda2efdSMircea Trofin       {"Foo", {1, bm::Counter::kAvgThreadsRate}},
3845dda2efdSMircea Trofin       {"Bar", {2, bm::Counter::kAvgThreadsRate}},
3855dda2efdSMircea Trofin       {"Baz", {4, bm::Counter::kAvgThreadsRate}},
3865dda2efdSMircea Trofin       {"Bat", {8, bm::Counter::kAvgThreadsRate}},
3875dda2efdSMircea Trofin       {"Frob", {16, bm::Counter::kAvgThreadsRate}},
3885dda2efdSMircea Trofin       {"Lob", {32, bm::Counter::kAvgThreadsRate}},
3895dda2efdSMircea Trofin   });
3905dda2efdSMircea Trofin }
3915dda2efdSMircea Trofin BENCHMARK(BM_CounterRates_Tabular)->ThreadRange(1, 16);
3925dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
3935dda2efdSMircea Trofin           {{"\"name\": \"BM_CounterRates_Tabular/threads:%int\",$"},
3945dda2efdSMircea Trofin            {"\"family_index\": 1,$", MR_Next},
3955dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
3965dda2efdSMircea Trofin            {"\"run_name\": \"BM_CounterRates_Tabular/threads:%int\",$",
3975dda2efdSMircea Trofin             MR_Next},
3985dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
3995dda2efdSMircea Trofin            {"\"repetitions\": 1,$", MR_Next},
4005dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
4015dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
4025dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
4035dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
4045dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
4055dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
4065dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
4075dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
4085dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
4095dda2efdSMircea Trofin            {"\"Foo\": %float,$", MR_Next},
4105dda2efdSMircea Trofin            {"\"Frob\": %float,$", MR_Next},
4115dda2efdSMircea Trofin            {"\"Lob\": %float$", MR_Next},
4125dda2efdSMircea Trofin            {"}", MR_Next}});
4135dda2efdSMircea Trofin ADD_CASES(TC_CSVOut, {{"^\"BM_CounterRates_Tabular/threads:%int\",%csv_report,"
4145dda2efdSMircea Trofin                        "%float,%float,%float,%float,%float,%float$"}});
4155dda2efdSMircea Trofin // VS2013 does not allow this function to be passed as a lambda argument
4165dda2efdSMircea Trofin // to CHECK_BENCHMARK_RESULTS()
CheckTabularRate(Results const & e)4175dda2efdSMircea Trofin void CheckTabularRate(Results const& e) {
4185dda2efdSMircea Trofin   double t = e.DurationCPUTime();
4195dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Foo", EQ, 1. / t, 0.001);
4205dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Bar", EQ, 2. / t, 0.001);
4215dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Baz", EQ, 4. / t, 0.001);
4225dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Bat", EQ, 8. / t, 0.001);
4235dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Frob", EQ, 16. / t, 0.001);
4245dda2efdSMircea Trofin   CHECK_FLOAT_COUNTER_VALUE(e, "Lob", EQ, 32. / t, 0.001);
4255dda2efdSMircea Trofin }
4265dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_CounterRates_Tabular/threads:%int",
4275dda2efdSMircea Trofin                         &CheckTabularRate);
4285dda2efdSMircea Trofin 
4295dda2efdSMircea Trofin // ========================================================================= //
4305dda2efdSMircea Trofin // ------------------------- Tabular Counters Output ----------------------- //
4315dda2efdSMircea Trofin // ========================================================================= //
4325dda2efdSMircea Trofin 
4335dda2efdSMircea Trofin // set only some of the counters
BM_CounterSet0_Tabular(benchmark::State & state)4345dda2efdSMircea Trofin void BM_CounterSet0_Tabular(benchmark::State& state) {
4355dda2efdSMircea Trofin   for (auto _ : state) {
4365dda2efdSMircea Trofin   }
4375dda2efdSMircea Trofin   namespace bm = benchmark;
4385dda2efdSMircea Trofin   state.counters.insert({
4395dda2efdSMircea Trofin       {"Foo", {10, bm::Counter::kAvgThreads}},
4405dda2efdSMircea Trofin       {"Bar", {20, bm::Counter::kAvgThreads}},
4415dda2efdSMircea Trofin       {"Baz", {40, bm::Counter::kAvgThreads}},
4425dda2efdSMircea Trofin   });
4435dda2efdSMircea Trofin }
4445dda2efdSMircea Trofin BENCHMARK(BM_CounterSet0_Tabular)->ThreadRange(1, 16);
4455dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
4465dda2efdSMircea Trofin           {{"\"name\": \"BM_CounterSet0_Tabular/threads:%int\",$"},
4475dda2efdSMircea Trofin            {"\"family_index\": 2,$", MR_Next},
4485dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
4495dda2efdSMircea Trofin            {"\"run_name\": \"BM_CounterSet0_Tabular/threads:%int\",$", MR_Next},
4505dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
4515dda2efdSMircea Trofin            {"\"repetitions\": 1,$", MR_Next},
4525dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
4535dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
4545dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
4555dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
4565dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
4575dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
4585dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
4595dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
4605dda2efdSMircea Trofin            {"\"Foo\": %float$", MR_Next},
4615dda2efdSMircea Trofin            {"}", MR_Next}});
4625dda2efdSMircea Trofin ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet0_Tabular/threads:%int\",%csv_report,"
4635dda2efdSMircea Trofin                        "%float,,%float,%float,,"}});
4645dda2efdSMircea Trofin // VS2013 does not allow this function to be passed as a lambda argument
4655dda2efdSMircea Trofin // to CHECK_BENCHMARK_RESULTS()
CheckSet0(Results const & e)4665dda2efdSMircea Trofin void CheckSet0(Results const& e) {
4675dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 10);
4685dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 20);
4695dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 40);
4705dda2efdSMircea Trofin }
4715dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_CounterSet0_Tabular", &CheckSet0);
4725dda2efdSMircea Trofin 
4735dda2efdSMircea Trofin // again.
BM_CounterSet1_Tabular(benchmark::State & state)4745dda2efdSMircea Trofin void BM_CounterSet1_Tabular(benchmark::State& state) {
4755dda2efdSMircea Trofin   for (auto _ : state) {
4765dda2efdSMircea Trofin   }
4775dda2efdSMircea Trofin   namespace bm = benchmark;
4785dda2efdSMircea Trofin   state.counters.insert({
4795dda2efdSMircea Trofin       {"Foo", {15, bm::Counter::kAvgThreads}},
4805dda2efdSMircea Trofin       {"Bar", {25, bm::Counter::kAvgThreads}},
4815dda2efdSMircea Trofin       {"Baz", {45, bm::Counter::kAvgThreads}},
4825dda2efdSMircea Trofin   });
4835dda2efdSMircea Trofin }
4845dda2efdSMircea Trofin BENCHMARK(BM_CounterSet1_Tabular)->ThreadRange(1, 16);
4855dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
4865dda2efdSMircea Trofin           {{"\"name\": \"BM_CounterSet1_Tabular/threads:%int\",$"},
4875dda2efdSMircea Trofin            {"\"family_index\": 3,$", MR_Next},
4885dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
4895dda2efdSMircea Trofin            {"\"run_name\": \"BM_CounterSet1_Tabular/threads:%int\",$", MR_Next},
4905dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
4915dda2efdSMircea Trofin            {"\"repetitions\": 1,$", MR_Next},
4925dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
4935dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
4945dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
4955dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
4965dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
4975dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
4985dda2efdSMircea Trofin            {"\"Bar\": %float,$", MR_Next},
4995dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
5005dda2efdSMircea Trofin            {"\"Foo\": %float$", MR_Next},
5015dda2efdSMircea Trofin            {"}", MR_Next}});
5025dda2efdSMircea Trofin ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet1_Tabular/threads:%int\",%csv_report,"
5035dda2efdSMircea Trofin                        "%float,,%float,%float,,"}});
5045dda2efdSMircea Trofin // VS2013 does not allow this function to be passed as a lambda argument
5055dda2efdSMircea Trofin // to CHECK_BENCHMARK_RESULTS()
CheckSet1(Results const & e)5065dda2efdSMircea Trofin void CheckSet1(Results const& e) {
5075dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 15);
5085dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Bar", EQ, 25);
5095dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 45);
5105dda2efdSMircea Trofin }
5115dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_CounterSet1_Tabular/threads:%int", &CheckSet1);
5125dda2efdSMircea Trofin 
5135dda2efdSMircea Trofin // ========================================================================= //
5145dda2efdSMircea Trofin // ------------------------- Tabular Counters Output ----------------------- //
5155dda2efdSMircea Trofin // ========================================================================= //
5165dda2efdSMircea Trofin 
5175dda2efdSMircea Trofin // set only some of the counters, different set now.
BM_CounterSet2_Tabular(benchmark::State & state)5185dda2efdSMircea Trofin void BM_CounterSet2_Tabular(benchmark::State& state) {
5195dda2efdSMircea Trofin   for (auto _ : state) {
5205dda2efdSMircea Trofin   }
5215dda2efdSMircea Trofin   namespace bm = benchmark;
5225dda2efdSMircea Trofin   state.counters.insert({
5235dda2efdSMircea Trofin       {"Foo", {10, bm::Counter::kAvgThreads}},
5245dda2efdSMircea Trofin       {"Bat", {30, bm::Counter::kAvgThreads}},
5255dda2efdSMircea Trofin       {"Baz", {40, bm::Counter::kAvgThreads}},
5265dda2efdSMircea Trofin   });
5275dda2efdSMircea Trofin }
5285dda2efdSMircea Trofin BENCHMARK(BM_CounterSet2_Tabular)->ThreadRange(1, 16);
5295dda2efdSMircea Trofin ADD_CASES(TC_JSONOut,
5305dda2efdSMircea Trofin           {{"\"name\": \"BM_CounterSet2_Tabular/threads:%int\",$"},
5315dda2efdSMircea Trofin            {"\"family_index\": 4,$", MR_Next},
5325dda2efdSMircea Trofin            {"\"per_family_instance_index\": 0,$", MR_Next},
5335dda2efdSMircea Trofin            {"\"run_name\": \"BM_CounterSet2_Tabular/threads:%int\",$", MR_Next},
5345dda2efdSMircea Trofin            {"\"run_type\": \"iteration\",$", MR_Next},
5355dda2efdSMircea Trofin            {"\"repetitions\": 1,$", MR_Next},
5365dda2efdSMircea Trofin            {"\"repetition_index\": 0,$", MR_Next},
5375dda2efdSMircea Trofin            {"\"threads\": 1,$", MR_Next},
5385dda2efdSMircea Trofin            {"\"iterations\": %int,$", MR_Next},
5395dda2efdSMircea Trofin            {"\"real_time\": %float,$", MR_Next},
5405dda2efdSMircea Trofin            {"\"cpu_time\": %float,$", MR_Next},
5415dda2efdSMircea Trofin            {"\"time_unit\": \"ns\",$", MR_Next},
5425dda2efdSMircea Trofin            {"\"Bat\": %float,$", MR_Next},
5435dda2efdSMircea Trofin            {"\"Baz\": %float,$", MR_Next},
5445dda2efdSMircea Trofin            {"\"Foo\": %float$", MR_Next},
5455dda2efdSMircea Trofin            {"}", MR_Next}});
5465dda2efdSMircea Trofin ADD_CASES(TC_CSVOut, {{"^\"BM_CounterSet2_Tabular/threads:%int\",%csv_report,"
5475dda2efdSMircea Trofin                        ",%float,%float,%float,,"}});
5485dda2efdSMircea Trofin // VS2013 does not allow this function to be passed as a lambda argument
5495dda2efdSMircea Trofin // to CHECK_BENCHMARK_RESULTS()
CheckSet2(Results const & e)5505dda2efdSMircea Trofin void CheckSet2(Results const& e) {
5515dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Foo", EQ, 10);
5525dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Bat", EQ, 30);
5535dda2efdSMircea Trofin   CHECK_COUNTER_VALUE(e, int, "Baz", EQ, 40);
5545dda2efdSMircea Trofin }
5555dda2efdSMircea Trofin CHECK_BENCHMARK_RESULTS("BM_CounterSet2_Tabular", &CheckSet2);
5565dda2efdSMircea Trofin 
5575dda2efdSMircea Trofin // ========================================================================= //
5585dda2efdSMircea Trofin // --------------------------- TEST CASES END ------------------------------ //
5595dda2efdSMircea Trofin // ========================================================================= //
5605dda2efdSMircea Trofin 
main(int argc,char * argv[])5615dda2efdSMircea Trofin int main(int argc, char* argv[]) { RunOutputTests(argc, argv); }
562