[wpimath] ApplyDeadband: add a scale param (#3865)

Also templates it in C++ so it can work with both doubles and units.
This commit is contained in:
Oblarg
2022-04-30 23:29:48 -04:00
committed by GitHub
parent 03230fc842
commit 09cf6eeecb
5 changed files with 176 additions and 39 deletions

View File

@@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test;
class MathUtilTest {
@Test
void testApplyDeadband() {
void testApplyDeadbandUnityScale() {
// < 0
assertEquals(-1.0, MathUtil.applyDeadband(-1.0, 0.02));
assertEquals((-0.03 + 0.02) / (1.0 - 0.02), MathUtil.applyDeadband(-0.03, 0.02));
@@ -27,6 +27,27 @@ class MathUtilTest {
assertEquals(1.0, MathUtil.applyDeadband(1.0, 0.02));
}
@Test
void testApplyDeadbandArbitraryScale() {
// < 0
assertEquals(-2.5, MathUtil.applyDeadband(-2.5, 0.02, 2.5));
assertEquals(0.0, MathUtil.applyDeadband(-0.02, 0.02, 2.5));
assertEquals(0.0, MathUtil.applyDeadband(-0.01, 0.02, 2.5));
// == 0
assertEquals(0.0, MathUtil.applyDeadband(0.0, 0.02, 2.5));
// > 0
assertEquals(0.0, MathUtil.applyDeadband(0.01, 0.02, 2.5));
assertEquals(0.0, MathUtil.applyDeadband(0.02, 0.02, 2.5));
assertEquals(2.5, MathUtil.applyDeadband(2.5, 0.02, 2.5));
}
@Test
void testApplyDeadbandLargeMaxMagnitude() {
assertEquals(80.0, MathUtil.applyDeadband(100.0, 20, Double.POSITIVE_INFINITY));
}
@Test
void testInputModulus() {
// These tests check error wrapping. That is, the result of wrapping the