Spring works.

Change-Id: I370012cc80e9019467100bec631c488c10a73141
diff --git a/frc971/zeroing/BUILD b/frc971/zeroing/BUILD
index 5271cc2..96315c7 100644
--- a/frc971/zeroing/BUILD
+++ b/frc971/zeroing/BUILD
@@ -1,73 +1,75 @@
-package(default_visibility = ['//visibility:public'])
+package(default_visibility = ["//visibility:public"])
 
-load('//aos/build:queues.bzl', 'queue_library')
+load("//aos/build:queues.bzl", "queue_library")
+load("//tools:environments.bzl", "mcu_cpus")
 
 cc_library(
-  name = 'averager',
-  hdrs = [
-    'averager.h',
-  ],
+    name = "averager",
+    hdrs = [
+        "averager.h",
+    ],
 )
 
 cc_test(
-  name = 'averager_test',
-  srcs = [
-    'averager_test.cc',
-  ],
-  deps = [
-    ':averager',
-    '//aos/testing:googletest',
-  ],
+    name = "averager_test",
+    srcs = [
+        "averager_test.cc",
+    ],
+    deps = [
+        ":averager",
+        "//aos/testing:googletest",
+    ],
 )
 
 cc_library(
-  name = 'zeroing',
-  srcs = [
-    'zeroing.cc',
-  ],
-  hdrs = [
-    'zeroing.h',
-  ],
-  deps = [
-    ':wrap',
-    '//frc971/control_loops:queues',
-    '//frc971:constants',
-  ],
+    name = "zeroing",
+    srcs = [
+        "zeroing.cc",
+    ],
+    hdrs = [
+        "zeroing.h",
+    ],
+    deps = [
+        ":wrap",
+        "//frc971:constants",
+        "//frc971/control_loops:queues",
+    ],
 )
 
 cc_test(
-  name = 'zeroing_test',
-  srcs = [
-    'zeroing_test.cc',
-  ],
-  deps = [
-    '//aos/testing:googletest',
-    '//aos/testing:test_shm',
-    ':zeroing',
-    '//aos/common/util:thread',
-    '//aos/common:die',
-    '//frc971/control_loops:position_sensor_sim',
-    '//frc971/control_loops:queues',
-  ],
+    name = "zeroing_test",
+    srcs = [
+        "zeroing_test.cc",
+    ],
+    deps = [
+        ":zeroing",
+        "//aos/common:die",
+        "//aos/common/util:thread",
+        "//aos/testing:googletest",
+        "//aos/testing:test_shm",
+        "//frc971/control_loops:position_sensor_sim",
+        "//frc971/control_loops:queues",
+    ],
 )
 
 cc_library(
-  name = 'wrap',
-  srcs = [
-    'wrap.cc',
-  ],
-  hdrs = [
-    'wrap.h',
-  ],
+    name = "wrap",
+    srcs = [
+        "wrap.cc",
+    ],
+    hdrs = [
+        "wrap.h",
+    ],
+    compatible_with = mcu_cpus,
 )
 
 cc_test(
-  name = 'wrap_test',
-  srcs = [
-    'wrap_test.cc',
-  ],
-  deps = [
-    '//aos/testing:googletest',
-    ':wrap',
-  ],
+    name = "wrap_test",
+    srcs = [
+        "wrap_test.cc",
+    ],
+    deps = [
+        ":wrap",
+        "//aos/testing:googletest",
+    ],
 )
diff --git a/frc971/zeroing/wrap.cc b/frc971/zeroing/wrap.cc
index 2698928..593ac97 100644
--- a/frc971/zeroing/wrap.cc
+++ b/frc971/zeroing/wrap.cc
@@ -5,8 +5,12 @@
 namespace frc971 {
 namespace zeroing {
 
+float Wrap(float nearest, float value, float period) {
+  return remainderf(value - nearest, period) + nearest;
+}
+
 double Wrap(double nearest, double value, double period) {
-  return ::std::remainder(value - nearest, period) + nearest;
+  return remainder(value - nearest, period) + nearest;
 }
 
 }  // namespace zeroing
diff --git a/frc971/zeroing/wrap.h b/frc971/zeroing/wrap.h
index 84b049d..c6ec085 100644
--- a/frc971/zeroing/wrap.h
+++ b/frc971/zeroing/wrap.h
@@ -7,6 +7,7 @@
 // Returns a modified value which has been wrapped such that it is +- period/2
 // away from nearest.
 double Wrap(double nearest, double value, double period);
+float Wrap(float nearest, float value, float period);
 
 }  // namespace zeroing
 }  // namespace frc971
diff --git a/frc971/zeroing/wrap_test.cc b/frc971/zeroing/wrap_test.cc
index e195385..b5f9100 100644
--- a/frc971/zeroing/wrap_test.cc
+++ b/frc971/zeroing/wrap_test.cc
@@ -1,6 +1,7 @@
-#include <random>
-
 #include "frc971/zeroing/wrap.h"
+
+#include <cmath>
+
 #include "gtest/gtest.h"
 
 namespace frc971 {
@@ -39,6 +40,18 @@
   }
 }
 
+// Tests some various positive and negative values for wrap (with floats).
+TEST(WrapTest, TestFloatWrap) {
+  EXPECT_NEAR(1.0f, Wrap(0.0f, 1.0f, 10.0f), 1e-6f);
+  EXPECT_NEAR(-1.0f, Wrap(0.0f, -1.0f, 10.0f), 1e-6f);
+
+  EXPECT_NEAR(1.0f, Wrap(5.0f, 1.0f, 10.0f), 1e-6f);
+  EXPECT_NEAR(9.0f, Wrap(5.0f, -1.0f, 10.0f), 1e-6f);
+
+  EXPECT_NEAR(10.0f, Wrap(5.0f, 10.0f, 10.0f), 1e-6f);
+  EXPECT_NEAR(1.0f, Wrap(5.0f, -9.0f, 10.0f), 1e-6f);
+}
+
 }  // namespace testing
 }  // namespace zeroing
 }  // namespace frc971