xref: /aosp_15_r20/external/webrtc/rtc_base/numerics/moving_average_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "rtc_base/numerics/moving_average.h"
12 
13 #include "test/gtest.h"
14 
15 namespace test {
16 
TEST(MovingAverageTest,EmptyAverage)17 TEST(MovingAverageTest, EmptyAverage) {
18   rtc::MovingAverage moving_average(1);
19   EXPECT_EQ(0u, moving_average.Size());
20   EXPECT_EQ(absl::nullopt, moving_average.GetAverageRoundedDown());
21 }
22 
23 // Test single value.
TEST(MovingAverageTest,OneElement)24 TEST(MovingAverageTest, OneElement) {
25   rtc::MovingAverage moving_average(1);
26   moving_average.AddSample(3);
27   EXPECT_EQ(1u, moving_average.Size());
28   EXPECT_EQ(3, *moving_average.GetAverageRoundedDown());
29 }
30 
TEST(MovingAverageTest,GetAverage)31 TEST(MovingAverageTest, GetAverage) {
32   rtc::MovingAverage moving_average(1024);
33   moving_average.AddSample(1);
34   moving_average.AddSample(1);
35   moving_average.AddSample(3);
36   moving_average.AddSample(3);
37   EXPECT_EQ(*moving_average.GetAverageRoundedDown(), 2);
38   EXPECT_EQ(*moving_average.GetAverageRoundedToClosest(), 2);
39 }
40 
TEST(MovingAverageTest,GetAverageRoundedDownRounds)41 TEST(MovingAverageTest, GetAverageRoundedDownRounds) {
42   rtc::MovingAverage moving_average(1024);
43   moving_average.AddSample(1);
44   moving_average.AddSample(2);
45   moving_average.AddSample(2);
46   moving_average.AddSample(2);
47   EXPECT_EQ(*moving_average.GetAverageRoundedDown(), 1);
48 }
49 
TEST(MovingAverageTest,GetAverageRoundedToClosestRounds)50 TEST(MovingAverageTest, GetAverageRoundedToClosestRounds) {
51   rtc::MovingAverage moving_average(1024);
52   moving_average.AddSample(1);
53   moving_average.AddSample(2);
54   moving_average.AddSample(2);
55   moving_average.AddSample(2);
56   EXPECT_EQ(*moving_average.GetAverageRoundedToClosest(), 2);
57 }
58 
TEST(MovingAverageTest,Reset)59 TEST(MovingAverageTest, Reset) {
60   rtc::MovingAverage moving_average(5);
61   moving_average.AddSample(1);
62   EXPECT_EQ(1, *moving_average.GetAverageRoundedDown());
63   EXPECT_EQ(1, *moving_average.GetAverageRoundedToClosest());
64 
65   moving_average.Reset();
66 
67   EXPECT_FALSE(moving_average.GetAverageRoundedDown());
68   moving_average.AddSample(10);
69   EXPECT_EQ(10, *moving_average.GetAverageRoundedDown());
70   EXPECT_EQ(10, *moving_average.GetAverageRoundedToClosest());
71 }
72 
TEST(MovingAverageTest,ManySamples)73 TEST(MovingAverageTest, ManySamples) {
74   rtc::MovingAverage moving_average(10);
75   for (int i = 1; i < 11; i++) {
76     moving_average.AddSample(i);
77   }
78   EXPECT_EQ(*moving_average.GetAverageRoundedDown(), 5);
79   EXPECT_EQ(*moving_average.GetAverageRoundedToClosest(), 6);
80   for (int i = 1; i < 2001; i++) {
81     moving_average.AddSample(i);
82   }
83   EXPECT_EQ(*moving_average.GetAverageRoundedDown(), 1995);
84   EXPECT_EQ(*moving_average.GetAverageRoundedToClosest(), 1996);
85 }
86 
87 }  // namespace test
88