Add cubic beizer spline class and tests

Change-Id: Ice1d1f3301b3b3a0faef03240bb1afc6de5f4112
diff --git a/frc971/control_loops/drivetrain/BUILD b/frc971/control_loops/drivetrain/BUILD
index abc8aaf..6dbee52 100644
--- a/frc971/control_loops/drivetrain/BUILD
+++ b/frc971/control_loops/drivetrain/BUILD
@@ -10,8 +10,8 @@
     ],
     deps = [
         ":drivetrain_queue",
-        "//aos/controls:replay_control_loop",
         "//aos:init",
+        "//aos/controls:replay_control_loop",
         "//frc971/queues:gyro",
     ],
 )
@@ -66,7 +66,7 @@
         "//aos/controls:polytope",
         "//aos/logging:matrix_logging",
         "//aos/logging:queue_logging",
-        "//aos/robot_state:robot_state",
+        "//aos/robot_state",
         "//aos/util:log_interval",
         "//aos/util:trapezoid_profile",
         "//frc971:shifter_hall_effect",
@@ -91,7 +91,7 @@
         "//aos/controls:polytope",
         "//aos/logging:matrix_logging",
         "//aos/logging:queue_logging",
-        "//aos/robot_state:robot_state",
+        "//aos/robot_state",
         "//aos/util:log_interval",
         "//frc971/control_loops:coerce_goal",
         "//frc971/control_loops:state_feedback_loop",
@@ -257,3 +257,26 @@
         "//frc971/control_loops:state_feedback_loop",
     ],
 )
+
+cc_library(
+    name = "spline",
+    srcs = ["spline.cc"],
+    hdrs = ["spline.h"],
+    deps = [
+        "//third_party/eigen",
+    ],
+)
+
+cc_test(
+    name = "spline_test",
+    srcs = [
+        "spline_test.cc",
+    ],
+    restricted_to = ["//tools:k8"],
+    deps = [
+        ":spline",
+        "//aos/testing:googletest",
+        "//third_party/matplotlib-cpp",
+        "@com_github_gflags_gflags//:gflags",
+    ],
+)