blob: 9bc9a1aef89a14ba9366be888fd22b2d13960959 [file] [log] [blame]
Ilya Nikolaevskiy26341992018-11-05 12:55:18 +01001/*
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
15namespace test {
16
17TEST(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.
24TEST(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
31TEST(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
41TEST(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
50TEST(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
59TEST(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
73TEST(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