| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "garnet/lib/measure/results.h" |
| |
| #include "gtest/gtest.h" |
| |
| namespace tracing { |
| namespace measure { |
| |
| bool operator==(const Result& lhs, const Result& rhs) { |
| return lhs.values == rhs.values && lhs.unit == rhs.unit && lhs.label == rhs.label && |
| lhs.test_suite == rhs.test_suite && lhs.split_first == rhs.split_first; |
| } |
| |
| namespace { |
| |
| TEST(Results, Empty) { |
| auto results = ComputeResults({}, {}, 1.0); |
| std::vector<Result> expected = {}; |
| EXPECT_EQ(expected, results); |
| } |
| |
| TEST(Results, Duration) { |
| Measurements measurements; |
| measurements.duration = {{42u, {"foo", "bar"}}}; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{1.0, 2.0, 3.0}, "ms", "foo (bar)", "", false}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| TEST(Results, ArgumentValue) { |
| Measurements measurements; |
| measurements.argument_value = {{42u, {"foo", "bar"}, "disk space", "MB"}}; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{1.0, 2.0, 3.0}, "MB", "foo (bar), disk space", "", false}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| TEST(Results, TimeBetween) { |
| Measurements measurements; |
| measurements.time_between = {{ |
| 42u, |
| {"foo1", "bar1"}, |
| Anchor::Begin, |
| {"foo2", "bar2"}, |
| Anchor::Begin, |
| }}; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{1.0, 2.0, 3.0}, "ms", "foo1 (bar1) to foo2 (bar2)", "", false}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| TEST(Results, SplitFirst) { |
| Measurements measurements; |
| measurements.duration = {{42u, {"foo", "bar"}}}; |
| measurements.duration[0].common.split_first = true; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{1.0, 2.0, 3.0}, "ms", "foo (bar)", "", true}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| TEST(Results, ExpectedSampleCount) { |
| Measurements measurements; |
| measurements.duration = {{42u, {"foo", "bar"}}}; |
| measurements.duration[0].common.expected_sample_count = 3; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{1.0, 2.0, 3.0}, "ms", "foo (bar)", "", false}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| TEST(Results, ExpectedSampleCountMismatch) { |
| Measurements measurements; |
| measurements.duration = {{42u, {"foo", "bar"}}}; |
| measurements.duration[0].common.expected_sample_count = 5; |
| |
| std::unordered_map<uint64_t, std::vector<trace_ticks_t>> ticks; |
| ticks[42u] = {1u, 2u, 3u}; |
| |
| auto results = ComputeResults(measurements, ticks, 1000.0); |
| Result expected = {{}, "ms", "foo (bar)", "", false}; |
| EXPECT_EQ(1u, results.size()); |
| EXPECT_EQ(expected, results[0]); |
| } |
| |
| } // namespace |
| |
| } // namespace measure |
| } // namespace tracing |