Added zeroing to ADIS16448

Broke out averaging from gyro_sender into a new class.

Change-Id: Iedaa0a7bd39337dbbe61a6d856ce28227f2747a5
diff --git a/frc971/zeroing/averager_test.cc b/frc971/zeroing/averager_test.cc
new file mode 100644
index 0000000..930a3cb
--- /dev/null
+++ b/frc971/zeroing/averager_test.cc
@@ -0,0 +1,35 @@
+#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());
+}
+
+// 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.001);
+}
+
+}  // namespace zeroing
+}  // namespace frc971