Index: third_party/google_benchmark/test/reporter_output_test.cc |
diff --git a/third_party/google_benchmark/test/reporter_output_test.cc b/third_party/google_benchmark/test/reporter_output_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4a4814334852ba4e476e6e196a37ebfd589a750c |
--- /dev/null |
+++ b/third_party/google_benchmark/test/reporter_output_test.cc |
@@ -0,0 +1,256 @@ |
+ |
+#undef NDEBUG |
+#include <utility> |
+ |
+#include "benchmark/benchmark.h" |
+#include "output_test.h" |
+ |
+// ========================================================================= // |
+// ---------------------- Testing Prologue Output -------------------------- // |
+// ========================================================================= // |
+ |
+ADD_CASES(TC_ConsoleOut, |
+ {{"^[-]+$", MR_Next}, |
+ {"^Benchmark %s Time %s CPU %s Iterations$", MR_Next}, |
+ {"^[-]+$", MR_Next}}); |
+ADD_CASES(TC_CSVOut, {{"%csv_header"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Basic Output --------------------------- // |
+// ========================================================================= // |
+ |
+void BM_basic(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_basic); |
+ |
+ADD_CASES(TC_ConsoleOut, {{"^BM_basic %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_basic\",$"}, |
+ {"\"iterations\": %int,$", MR_Next}, |
+ {"\"real_time\": %int,$", MR_Next}, |
+ {"\"cpu_time\": %int,$", MR_Next}, |
+ {"\"time_unit\": \"ns\"$", MR_Next}, |
+ {"}", MR_Next}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_basic\",%csv_report$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Bytes per Second Output ---------------- // |
+// ========================================================================= // |
+ |
+void BM_bytes_per_second(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+ state.SetBytesProcessed(1); |
+} |
+BENCHMARK(BM_bytes_per_second); |
+ |
+ADD_CASES(TC_ConsoleOut, |
+ {{"^BM_bytes_per_second %console_report +%floatB/s$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_bytes_per_second\",$"}, |
+ {"\"iterations\": %int,$", MR_Next}, |
+ {"\"real_time\": %int,$", MR_Next}, |
+ {"\"cpu_time\": %int,$", MR_Next}, |
+ {"\"time_unit\": \"ns\",$", MR_Next}, |
+ {"\"bytes_per_second\": %int$", MR_Next}, |
+ {"}", MR_Next}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_bytes_per_second\",%csv_bytes_report$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Items per Second Output ---------------- // |
+// ========================================================================= // |
+ |
+void BM_items_per_second(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+ state.SetItemsProcessed(1); |
+} |
+BENCHMARK(BM_items_per_second); |
+ |
+ADD_CASES(TC_ConsoleOut, |
+ {{"^BM_items_per_second %console_report +%float items/s$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_items_per_second\",$"}, |
+ {"\"iterations\": %int,$", MR_Next}, |
+ {"\"real_time\": %int,$", MR_Next}, |
+ {"\"cpu_time\": %int,$", MR_Next}, |
+ {"\"time_unit\": \"ns\",$", MR_Next}, |
+ {"\"items_per_second\": %int$", MR_Next}, |
+ {"}", MR_Next}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_items_per_second\",%csv_items_report$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Label Output --------------------------- // |
+// ========================================================================= // |
+ |
+void BM_label(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+ state.SetLabel("some label"); |
+} |
+BENCHMARK(BM_label); |
+ |
+ADD_CASES(TC_ConsoleOut, {{"^BM_label %console_report some label$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_label\",$"}, |
+ {"\"iterations\": %int,$", MR_Next}, |
+ {"\"real_time\": %int,$", MR_Next}, |
+ {"\"cpu_time\": %int,$", MR_Next}, |
+ {"\"time_unit\": \"ns\",$", MR_Next}, |
+ {"\"label\": \"some label\"$", MR_Next}, |
+ {"}", MR_Next}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_label\",%csv_label_report_begin\"some " |
+ "label\"%csv_label_report_end$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Error Output --------------------------- // |
+// ========================================================================= // |
+ |
+void BM_error(benchmark::State& state) { |
+ state.SkipWithError("message"); |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_error); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_error[ ]+ERROR OCCURRED: 'message'$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_error\",$"}, |
+ {"\"error_occurred\": true,$", MR_Next}, |
+ {"\"error_message\": \"message\",$", MR_Next}}); |
+ |
+ADD_CASES(TC_CSVOut, {{"^\"BM_error\",,,,,,,,true,\"message\"$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing No Arg Name Output ----------------------- |
+// // |
+// ========================================================================= // |
+ |
+void BM_no_arg_name(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_no_arg_name)->Arg(3); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_no_arg_name/3 %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_no_arg_name/3\",$"}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_no_arg_name/3\",%csv_report$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Arg Name Output ----------------------- // |
+// ========================================================================= // |
+ |
+void BM_arg_name(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_arg_name)->ArgName("first")->Arg(3); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_arg_name/first:3 %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_arg_name/first:3\",$"}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_arg_name/first:3\",%csv_report$"}}); |
+ |
+// ========================================================================= // |
+// ------------------------ Testing Arg Names Output ----------------------- // |
+// ========================================================================= // |
+ |
+void BM_arg_names(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_arg_names)->Args({2, 5, 4})->ArgNames({"first", "", "third"}); |
+ADD_CASES(TC_ConsoleOut, |
+ {{"^BM_arg_names/first:2/5/third:4 %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_arg_names/first:2/5/third:4\",$"}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_arg_names/first:2/5/third:4\",%csv_report$"}}); |
+ |
+// ========================================================================= // |
+// ----------------------- Testing Complexity Output ----------------------- // |
+// ========================================================================= // |
+ |
+void BM_Complexity_O1(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+ state.SetComplexityN(state.range(0)); |
+} |
+BENCHMARK(BM_Complexity_O1)->Range(1, 1 << 18)->Complexity(benchmark::o1); |
+SET_SUBSTITUTIONS({{"%bigOStr", "[ ]* %float \\([0-9]+\\)"}, |
+ {"%RMS", "[ ]*[0-9]+ %"}}); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_Complexity_O1_BigO %bigOStr %bigOStr[ ]*$"}, |
+ {"^BM_Complexity_O1_RMS %RMS %RMS[ ]*$"}}); |
+ |
+// ========================================================================= // |
+// ----------------------- Testing Aggregate Output ------------------------ // |
+// ========================================================================= // |
+ |
+// Test that non-aggregate data is printed by default |
+void BM_Repeat(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_Repeat)->Repetitions(3); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_Repeat/repeats:3 %console_report$"}, |
+ {"^BM_Repeat/repeats:3 %console_report$"}, |
+ {"^BM_Repeat/repeats:3 %console_report$"}, |
+ {"^BM_Repeat/repeats:3_mean %console_report$"}, |
+ {"^BM_Repeat/repeats:3_stddev %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_Repeat/repeats:3\",$"}, |
+ {"\"name\": \"BM_Repeat/repeats:3\",$"}, |
+ {"\"name\": \"BM_Repeat/repeats:3\",$"}, |
+ {"\"name\": \"BM_Repeat/repeats:3_mean\",$"}, |
+ {"\"name\": \"BM_Repeat/repeats:3_stddev\",$"}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_Repeat/repeats:3\",%csv_report$"}, |
+ {"^\"BM_Repeat/repeats:3\",%csv_report$"}, |
+ {"^\"BM_Repeat/repeats:3\",%csv_report$"}, |
+ {"^\"BM_Repeat/repeats:3_mean\",%csv_report$"}, |
+ {"^\"BM_Repeat/repeats:3_stddev\",%csv_report$"}}); |
+ |
+// Test that a non-repeated test still prints non-aggregate results even when |
+// only-aggregate reports have been requested |
+void BM_RepeatOnce(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_RepeatOnce)->Repetitions(1)->ReportAggregatesOnly(); |
+ADD_CASES(TC_ConsoleOut, {{"^BM_RepeatOnce/repeats:1 %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_RepeatOnce/repeats:1\",$"}}); |
+ADD_CASES(TC_CSVOut, {{"^\"BM_RepeatOnce/repeats:1\",%csv_report$"}}); |
+ |
+// Test that non-aggregate data is not reported |
+void BM_SummaryRepeat(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_SummaryRepeat)->Repetitions(3)->ReportAggregatesOnly(); |
+ADD_CASES(TC_ConsoleOut, |
+ {{".*BM_SummaryRepeat/repeats:3 ", MR_Not}, |
+ {"^BM_SummaryRepeat/repeats:3_mean %console_report$"}, |
+ {"^BM_SummaryRepeat/repeats:3_stddev %console_report$"}}); |
+ADD_CASES(TC_JSONOut, {{".*BM_SummaryRepeat/repeats:3 ", MR_Not}, |
+ {"\"name\": \"BM_SummaryRepeat/repeats:3_mean\",$"}, |
+ {"\"name\": \"BM_SummaryRepeat/repeats:3_stddev\",$"}}); |
+ADD_CASES(TC_CSVOut, {{".*BM_SummaryRepeat/repeats:3 ", MR_Not}, |
+ {"^\"BM_SummaryRepeat/repeats:3_mean\",%csv_report$"}, |
+ {"^\"BM_SummaryRepeat/repeats:3_stddev\",%csv_report$"}}); |
+ |
+void BM_RepeatTimeUnit(benchmark::State& state) { |
+ while (state.KeepRunning()) { |
+ } |
+} |
+BENCHMARK(BM_RepeatTimeUnit) |
+ ->Repetitions(3) |
+ ->ReportAggregatesOnly() |
+ ->Unit(benchmark::kMicrosecond); |
+ADD_CASES(TC_ConsoleOut, |
+ {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not}, |
+ {"^BM_RepeatTimeUnit/repeats:3_mean %console_us_report$"}, |
+ {"^BM_RepeatTimeUnit/repeats:3_stddev %console_us_report$"}}); |
+ADD_CASES(TC_JSONOut, {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not}, |
+ {"\"name\": \"BM_RepeatTimeUnit/repeats:3_mean\",$"}, |
+ {"\"time_unit\": \"us\",?$"}, |
+ {"\"name\": \"BM_RepeatTimeUnit/repeats:3_stddev\",$"}, |
+ {"\"time_unit\": \"us\",?$"}}); |
+ADD_CASES(TC_CSVOut, |
+ {{".*BM_RepeatTimeUnit/repeats:3 ", MR_Not}, |
+ {"^\"BM_RepeatTimeUnit/repeats:3_mean\",%csv_us_report$"}, |
+ {"^\"BM_RepeatTimeUnit/repeats:3_stddev\",%csv_us_report$"}}); |
+ |
+// ========================================================================= // |
+// --------------------------- TEST CASES END ------------------------------ // |
+// ========================================================================= // |
+ |
+int main(int argc, char* argv[]) { RunOutputTests(argc, argv); } |