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