blob: 9f8f72736985d335f60752a08d3dbfe27da7b623 [file] [log] [blame]
Philipp Schrader29d54f22016-04-02 22:14:48 +00001#include "gtest/gtest.h"
2#include "frc971/zeroing/averager.h"
3
4namespace frc971 {
5namespace zeroing {
6
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
59} // namespace zeroing
60} // namespace frc971