| /* |
| * Copyright 2017 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "rtc_base/numerics/histogram_percentile_counter.h" |
| |
| #include <cstdint> |
| #include <utility> |
| #include <vector> |
| |
| #include "test/gtest.h" |
| |
| TEST(HistogramPercentileCounterTest, ReturnsCorrectPercentiles) { |
| rtc::HistogramPercentileCounter counter(10); |
| const std::vector<int> kTestValues = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, |
| 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; |
| |
| EXPECT_FALSE(counter.GetPercentile(0.5f)); |
| // Pairs of {fraction, percentile value} computed by hand |
| // for `kTestValues`. |
| const std::vector<std::pair<float, uint32_t>> kTestPercentiles = { |
| {0.0f, 1}, {0.01f, 1}, {0.5f, 10}, {0.9f, 18}, |
| {0.95f, 19}, {0.99f, 20}, {1.0f, 20}}; |
| for (int value : kTestValues) { |
| counter.Add(value); |
| } |
| for (const auto& test_percentile : kTestPercentiles) { |
| EXPECT_EQ(test_percentile.second, |
| counter.GetPercentile(test_percentile.first).value_or(0)); |
| } |
| } |
| |
| TEST(HistogramPercentileCounterTest, HandlesEmptySequence) { |
| rtc::HistogramPercentileCounter counter(10); |
| EXPECT_FALSE(counter.GetPercentile(0.5f)); |
| counter.Add(1u); |
| EXPECT_TRUE(counter.GetPercentile(0.5f)); |
| } |