blob: d4f154acaec25a401fd4aa4e52062c53a0dab892 [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
Stephan Pleinesf63bde82024-01-13 15:59:33 -08005namespace frc971::zeroing {
Philipp Schrader29d54f22016-04-02 22:14:48 +00006
7class AveragerTest : public ::testing::Test {
8 protected:
9 void SetUp() override {}
10};
11
12// Makes sure that we can compute the average of a bunch of integers.
13TEST_F(AveragerTest, ComputeIntegerAverage) {
14 Averager<int, 6> averager;
15 for (size_t i = 0; i < averager.size(); ++i) {
16 ASSERT_FALSE(averager.full());
17 averager.AddData(static_cast<int>(i));
18 }
19 ASSERT_TRUE(averager.full());
James Kuszmauld3f9eb22020-01-12 15:02:07 -080020 ASSERT_EQ(2, averager.GetAverage()(0, 0));
Philipp Schrader29d54f22016-04-02 22:14:48 +000021}
22
23// Makes sure that we can compute the average of a bunch of floats.
24TEST_F(AveragerTest, ComputeFloatAverage) {
25 Averager<float, 100> averager;
26 for (size_t i = 0; i < averager.size(); ++i) {
27 ASSERT_FALSE(averager.full());
28 averager.AddData(static_cast<float>(i) / 3.0);
29 }
30 ASSERT_TRUE(averager.full());
James Kuszmauld3f9eb22020-01-12 15:02:07 -080031 ASSERT_NEAR(16.5, averager.GetAverage()(0, 0), 0.001);
32}
33
34TEST_F(AveragerTest, CalculateRange) {
35 Averager<float, 5, 2> averager;
36 ASSERT_EQ(0, averager.GetRange());
37 averager.AddData({100, 10});
38 averager.AddData({105, 15});
39 averager.AddData({90, 9});
40 ASSERT_EQ(15, averager.GetRange());
41 for (size_t ii = 0; ii < averager.size(); ++ii) {
42 averager.AddData({10, 20});
43 }
44 ASSERT_EQ(0, averager.GetRange());
45}
46
47TEST_F(AveragerTest, ResetAverager) {
48 Averager<float, 5> averager;
49 for (size_t ii = 0; ii < averager.size(); ++ii) {
50 averager.AddData(10);
51 }
52 ASSERT_TRUE(averager.full());
53 ASSERT_EQ(10.0, averager.GetAverage()(0, 0));
54 averager.Reset();
55 ASSERT_FALSE(averager.full());
56 ASSERT_EQ(0.0, averager.GetAverage()(0, 0));
Philipp Schrader29d54f22016-04-02 22:14:48 +000057}
58
Stephan Pleinesf63bde82024-01-13 15:59:33 -080059} // namespace frc971::zeroing