blob: 9f8f72736985d335f60752a08d3dbfe27da7b623 [file] [log] [blame]
#include "gtest/gtest.h"
#include "frc971/zeroing/averager.h"
namespace frc971 {
namespace zeroing {
class AveragerTest : public ::testing::Test {
protected:
void SetUp() override {}
};
// Makes sure that we can compute the average of a bunch of integers.
TEST_F(AveragerTest, ComputeIntegerAverage) {
Averager<int, 6> averager;
for (size_t i = 0; i < averager.size(); ++i) {
ASSERT_FALSE(averager.full());
averager.AddData(static_cast<int>(i));
}
ASSERT_TRUE(averager.full());
ASSERT_EQ(2, averager.GetAverage()(0, 0));
}
// Makes sure that we can compute the average of a bunch of floats.
TEST_F(AveragerTest, ComputeFloatAverage) {
Averager<float, 100> averager;
for (size_t i = 0; i < averager.size(); ++i) {
ASSERT_FALSE(averager.full());
averager.AddData(static_cast<float>(i) / 3.0);
}
ASSERT_TRUE(averager.full());
ASSERT_NEAR(16.5, averager.GetAverage()(0, 0), 0.001);
}
TEST_F(AveragerTest, CalculateRange) {
Averager<float, 5, 2> averager;
ASSERT_EQ(0, averager.GetRange());
averager.AddData({100, 10});
averager.AddData({105, 15});
averager.AddData({90, 9});
ASSERT_EQ(15, averager.GetRange());
for (size_t ii = 0; ii < averager.size(); ++ii) {
averager.AddData({10, 20});
}
ASSERT_EQ(0, averager.GetRange());
}
TEST_F(AveragerTest, ResetAverager) {
Averager<float, 5> averager;
for (size_t ii = 0; ii < averager.size(); ++ii) {
averager.AddData(10);
}
ASSERT_TRUE(averager.full());
ASSERT_EQ(10.0, averager.GetAverage()(0, 0));
averager.Reset();
ASSERT_FALSE(averager.full());
ASSERT_EQ(0.0, averager.GetAverage()(0, 0));
}
} // namespace zeroing
} // namespace frc971