Add binomial calculation and tests.
Change-Id: I7a758d098c7af53e7b719461aa5d0e8de240052d
diff --git a/frc971/control_loops/binomial_test.cc b/frc971/control_loops/binomial_test.cc
new file mode 100644
index 0000000..482790e
--- /dev/null
+++ b/frc971/control_loops/binomial_test.cc
@@ -0,0 +1,44 @@
+#include "frc971/control_loops/binomial.h"
+
+#include "gtest/gtest.h"
+
+namespace frc971 {
+namespace control_loops {
+namespace testing {
+
+// Tests some factorials.
+TEST(BinomialTest, Factorial) {
+ EXPECT_EQ(1.0, Factorial(0));
+ EXPECT_EQ(1.0, Factorial(1));
+ EXPECT_EQ(2.0, Factorial(2));
+ EXPECT_EQ(6.0, Factorial(3));
+ EXPECT_EQ(24.0, Factorial(4));
+}
+
+// Test a 2nd order polynomial.
+TEST(BinomialTest, Quadratic) {
+ EXPECT_EQ(1.0, Binomial(2, 0));
+ EXPECT_EQ(2.0, Binomial(2, 1));
+ EXPECT_EQ(1.0, Binomial(2, 2));
+}
+
+// Test a 3th order polynomial.
+TEST(BinomialTest, Cubic) {
+ EXPECT_EQ(1.0, Binomial(3, 0));
+ EXPECT_EQ(3.0, Binomial(3, 1));
+ EXPECT_EQ(3.0, Binomial(3, 2));
+ EXPECT_EQ(1.0, Binomial(3, 3));
+}
+
+// Test a 4th order polynomial.
+TEST(BinomialTest, Quartic) {
+ EXPECT_EQ(1.0, Binomial(4, 0));
+ EXPECT_EQ(4.0, Binomial(4, 1));
+ EXPECT_EQ(6.0, Binomial(4, 2));
+ EXPECT_EQ(4.0, Binomial(4, 3));
+ EXPECT_EQ(1.0, Binomial(4, 4));
+}
+
+} // namespace testing
+} // namespace control_loops
+} // namespace frc971