| #include "frc971/zeroing/wrap.h" |
| #include "gtest/gtest.h" |
| |
| namespace frc971 { |
| namespace zeroing { |
| namespace testing { |
| |
| TEST(SensorTest, UnwrapOnce) { |
| // Test the sensor moving over the maximum range value and wrapping once |
| // then move sensor in oppsite direction to unwrap and test result. |
| |
| // Initialize with the offset and range |
| UnwrapSensor sensor(-1.5, 6); // min = -1.5 & max = 4.5 & move > 3 |
| EXPECT_EQ(sensor.Unwrap(1.5), 1.5); // move n/a |
| EXPECT_EQ(sensor.sensor_wrapped(), 0); |
| EXPECT_EQ(sensor.Unwrap(4.0), 4.0); // move 2.5 |
| EXPECT_EQ(sensor.Unwrap(-1.0), 5.0); // move -5.0 -> wrap+ |
| EXPECT_EQ(sensor.sensor_wrapped(), 1); |
| EXPECT_EQ(sensor.Unwrap(-1.5), 4.5); // move -0.5 |
| EXPECT_EQ(sensor.Unwrap(4.0), 4.0); // move 5.5 -> wrap- |
| EXPECT_EQ(sensor.sensor_wrapped(), 0); |
| sensor.Reset(); |
| } |
| |
| TEST(SensorTest, UnwrapTwice) { |
| // Test the sensor wrapping twice over the lower value of the range. |
| |
| // Initialize with the offset and range |
| UnwrapSensor sensor(-1.5, 6); |
| EXPECT_EQ(sensor.Unwrap(1.0), 1.0); |
| EXPECT_EQ(sensor.Unwrap(-1.0), -1.0); |
| EXPECT_EQ(sensor.Unwrap(4.0), -2.0); |
| EXPECT_EQ(sensor.sensor_wrapped(), -1); |
| EXPECT_EQ(sensor.Unwrap(2.0), -4.0); |
| EXPECT_EQ(sensor.Unwrap(-1.0), -7.0); |
| EXPECT_EQ(sensor.Unwrap(4.0), -8.0); |
| EXPECT_EQ(sensor.sensor_wrapped(), -2); |
| } |
| |
| TEST(SensorTest, UnwrapOutRange) { |
| // Test if values out side range are handled proporly. |
| // Not wrapped scenario only. |
| |
| UnwrapSensor sensor(-1.5, 6); |
| EXPECT_EQ(sensor.Unwrap(-3.0), -3.0); // Passed by the init stage |
| EXPECT_EQ(sensor.Unwrap(-3.0), -3.0); // Caught by the exeption handler |
| EXPECT_EQ(sensor.Unwrap(6.5), 6.5); |
| } |
| |
| TEST(SensorTest, UnwrapInit) { |
| // Test the case where the start value and offset will be far enough apart to |
| // trigger a wrap. By ignoring the fisrt value for evaluation and set that for |
| // the next evaluation, this should not trigger the wrap. |
| |
| UnwrapSensor sensor(-0.6, 1.0); // min = -0.6 & max = 0.4 & move > 0.5 |
| EXPECT_EQ(sensor.Unwrap(0.0), 0.0); // move = n/a |
| EXPECT_EQ(sensor.sensor_wrapped(), 0); |
| EXPECT_EQ(sensor.Unwrap(0.0), 0.0); |
| sensor.Reset(); |
| EXPECT_EQ(sensor.Unwrap(0.4), 0.4); // move = n/a |
| EXPECT_EQ(sensor.Unwrap(-0.4), 0.6); // move = -0.8, wrap 1 |
| EXPECT_EQ(sensor.Unwrap(0.2), 0.2); // move = 1.0, wrap -1 |
| } |
| |
| } // namespace testing |
| } // namespace zeroing |
| } // namespace frc971 |