blob: 50eac720096d9b30920073c7e298b94cca58cdf9 [file] [log] [blame]
Philipp Schrader29d54f22016-04-02 22:14:48 +00001#include "frc971/zeroing/averager.h"
2
Philipp Schrader790cb542023-07-05 21:06:52 -07003#include "gtest/gtest.h"
4
Philipp Schrader29d54f22016-04-02 22:14:48 +00005namespace frc971 {
6namespace zeroing {
7
8class AveragerTest : public ::testing::Test {
9 protected:
10 void SetUp() override {}
11};
12
13// Makes sure that we can compute the average of a bunch of integers.
14TEST_F(AveragerTest, ComputeIntegerAverage) {
15 Averager<int, 6> averager;
16 for (size_t i = 0; i < averager.size(); ++i) {
17 ASSERT_FALSE(averager.full());
18 averager.AddData(static_cast<int>(i));
19 }
20 ASSERT_TRUE(averager.full());
James Kuszmauld3f9eb22020-01-12 15:02:07 -080021 ASSERT_EQ(2, averager.GetAverage()(0, 0));
Philipp Schrader29d54f22016-04-02 22:14:48 +000022}
23
24// Makes sure that we can compute the average of a bunch of floats.
25TEST_F(AveragerTest, ComputeFloatAverage) {
26 Averager<float, 100> averager;
27 for (size_t i = 0; i < averager.size(); ++i) {
28 ASSERT_FALSE(averager.full());
29 averager.AddData(static_cast<float>(i) / 3.0);
30 }
31 ASSERT_TRUE(averager.full());
James Kuszmauld3f9eb22020-01-12 15:02:07 -080032 ASSERT_NEAR(16.5, averager.GetAverage()(0, 0), 0.001);
33}
34
35TEST_F(AveragerTest, CalculateRange) {
36 Averager<float, 5, 2> averager;
37 ASSERT_EQ(0, averager.GetRange());
38 averager.AddData({100, 10});
39 averager.AddData({105, 15});
40 averager.AddData({90, 9});
41 ASSERT_EQ(15, averager.GetRange());
42 for (size_t ii = 0; ii < averager.size(); ++ii) {
43 averager.AddData({10, 20});
44 }
45 ASSERT_EQ(0, averager.GetRange());
46}
47
48TEST_F(AveragerTest, ResetAverager) {
49 Averager<float, 5> averager;
50 for (size_t ii = 0; ii < averager.size(); ++ii) {
51 averager.AddData(10);
52 }
53 ASSERT_TRUE(averager.full());
54 ASSERT_EQ(10.0, averager.GetAverage()(0, 0));
55 averager.Reset();
56 ASSERT_FALSE(averager.full());
57 ASSERT_EQ(0.0, averager.GetAverage()(0, 0));
Philipp Schrader29d54f22016-04-02 22:14:48 +000058}
59
60} // namespace zeroing
61} // namespace frc971