diff --git a/api/test/metrics/print_result_proxy_metrics_exporter.cc b/api/test/metrics/print_result_proxy_metrics_exporter.cc index 70cc9d57e2..4ae32fffec 100644 --- a/api/test/metrics/print_result_proxy_metrics_exporter.cc +++ b/api/test/metrics/print_result_proxy_metrics_exporter.cc @@ -93,6 +93,16 @@ bool PrintResultProxyMetricsExporter::Export( continue; } + if (metric.time_series.samples.size() == 1lu) { + // Increase backwards compatibility for 1 value use case. + PrintResult( + metric.name, /*modifier=*/"", metric.test_case, + ToPrintResultValue(metric.time_series.samples[0].value, metric.unit), + ToPrintResultUnit(metric.unit), /*important=*/false, + ToPrintResultImproveDirection(metric.improvement_direction)); + continue; + } + SamplesStatsCounter counter; for (size_t i = 0; i < metric.time_series.samples.size(); ++i) { counter.AddSample(SamplesStatsCounter::StatsSample{ diff --git a/api/test/metrics/print_result_proxy_metrics_exporter_test.cc b/api/test/metrics/print_result_proxy_metrics_exporter_test.cc index c783fbacfd..355eec0d4f 100644 --- a/api/test/metrics/print_result_proxy_metrics_exporter_test.cc +++ b/api/test/metrics/print_result_proxy_metrics_exporter_test.cc @@ -70,6 +70,40 @@ TEST(PrintResultProxyMetricsExporterTest, EXPECT_EQ(expected, testing::internal::GetCapturedStdout()); } +TEST(PrintResultProxyMetricsExporterTest, + ExportMetricsWithTimeSeriesOfSingleValueFormatCorrect) { + Metric metric1{ + .name = "test_metric1", + .unit = Unit::kMilliseconds, + .improvement_direction = ImprovementDirection::kBiggerIsBetter, + .test_case = "test_case_name1", + .metric_metadata = DefaultMetadata(), + .time_series = Metric::TimeSeries{.samples = std::vector{Sample(10)}}, + .stats = + Metric::Stats{.mean = 10.0, .stddev = 0.0, .min = 10.0, .max = 10.0}}; + Metric metric2{ + .name = "test_metric2", + .unit = Unit::kKilobitsPerSecond, + .improvement_direction = ImprovementDirection::kSmallerIsBetter, + .test_case = "test_case_name2", + .metric_metadata = DefaultMetadata(), + .time_series = Metric::TimeSeries{.samples = std::vector{Sample(20)}}, + .stats = + Metric::Stats{.mean = 20.0, .stddev = 0.0, .min = 20.0, .max = 20.0}}; + + testing::internal::CaptureStdout(); + PrintResultProxyMetricsExporter exporter; + + std::string expected = + "RESULT test_metric1: test_case_name1= 10 " + "msBestFitFormat_biggerIsBetter\n" + "RESULT test_metric2: test_case_name2= 2500 " + "bytesPerSecond_smallerIsBetter\n"; + + EXPECT_TRUE(exporter.Export(std::vector{metric1, metric2})); + EXPECT_EQ(expected, testing::internal::GetCapturedStdout()); +} + TEST(PrintResultProxyMetricsExporterTest, ExportMetricsWithStatsOnlyFormatCorrect) { Metric metric1{.name = "test_metric1",