|  | /* | 
|  | *  Copyright 2018 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/sample_counter.h" | 
|  |  | 
|  | #include <initializer_list> | 
|  |  | 
|  | #include "test/gmock.h" | 
|  | #include "test/gtest.h" | 
|  |  | 
|  | using ::testing::Eq; | 
|  |  | 
|  | namespace rtc { | 
|  |  | 
|  | TEST(SampleCounterTest, ProcessesNoSamples) { | 
|  | constexpr int kMinSamples = 1; | 
|  | SampleCounter counter; | 
|  | EXPECT_THAT(counter.Avg(kMinSamples), Eq(absl::nullopt)); | 
|  | EXPECT_THAT(counter.Max(), Eq(absl::nullopt)); | 
|  | } | 
|  |  | 
|  | TEST(SampleCounterTest, NotEnoughSamples) { | 
|  | constexpr int kMinSamples = 6; | 
|  | SampleCounter counter; | 
|  | for (int value : {1, 2, 3, 4, 5}) { | 
|  | counter.Add(value); | 
|  | } | 
|  | EXPECT_THAT(counter.Avg(kMinSamples), Eq(absl::nullopt)); | 
|  | EXPECT_THAT(counter.Sum(kMinSamples), Eq(absl::nullopt)); | 
|  | EXPECT_THAT(counter.Max(), Eq(5)); | 
|  | } | 
|  |  | 
|  | TEST(SampleCounterTest, EnoughSamples) { | 
|  | constexpr int kMinSamples = 5; | 
|  | SampleCounter counter; | 
|  | for (int value : {1, 2, 3, 4, 5}) { | 
|  | counter.Add(value); | 
|  | } | 
|  | EXPECT_THAT(counter.Avg(kMinSamples), Eq(3)); | 
|  | EXPECT_THAT(counter.Sum(kMinSamples), Eq(15)); | 
|  | EXPECT_THAT(counter.Max(), Eq(5)); | 
|  | } | 
|  |  | 
|  | TEST(SampleCounterTest, ComputesVariance) { | 
|  | constexpr int kMinSamples = 5; | 
|  | SampleCounterWithVariance counter; | 
|  | for (int value : {1, 2, 3, 4, 5}) { | 
|  | counter.Add(value); | 
|  | } | 
|  | EXPECT_THAT(counter.Variance(kMinSamples), Eq(2)); | 
|  | } | 
|  |  | 
|  | TEST(SampleCounterTest, AggregatesTwoCounters) { | 
|  | constexpr int kMinSamples = 5; | 
|  | SampleCounterWithVariance counter1; | 
|  | for (int value : {1, 2, 3}) { | 
|  | counter1.Add(value); | 
|  | } | 
|  | SampleCounterWithVariance counter2; | 
|  | for (int value : {4, 5}) { | 
|  | counter2.Add(value); | 
|  | } | 
|  | // Before aggregation there is not enough samples. | 
|  | EXPECT_THAT(counter1.Avg(kMinSamples), Eq(absl::nullopt)); | 
|  | EXPECT_THAT(counter1.Variance(kMinSamples), Eq(absl::nullopt)); | 
|  | // Aggregate counter2 in counter1. | 
|  | counter1.Add(counter2); | 
|  | EXPECT_THAT(counter1.Avg(kMinSamples), Eq(3)); | 
|  | EXPECT_THAT(counter1.Max(), Eq(5)); | 
|  | EXPECT_THAT(counter1.Variance(kMinSamples), Eq(2)); | 
|  | } | 
|  |  | 
|  | }  // namespace rtc |