mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
[wpimath] Add isNear method to MathUtil (#5353)
This method is used to check if the given value matches an expected value within a certain tolerance. Co-authored-by: Tyler Veness <calcmogul@gmail.com> Co-authored-by: Ryan Blue <ryanzblue@gmail.com>
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
package edu.wpi.first.math;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import edu.wpi.first.wpilibj.UtilityClassTest;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -93,4 +95,50 @@ class MathUtilTest extends UtilityClassTest<MathUtil> {
|
||||
assertEquals(MathUtil.angleModulus(Math.PI / 2), Math.PI / 2);
|
||||
assertEquals(MathUtil.angleModulus(-Math.PI / 2), -Math.PI / 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIsNear() {
|
||||
// The answer is always 42
|
||||
// Positive integer checks
|
||||
assertTrue(MathUtil.isNear(42, 42, 1));
|
||||
assertTrue(MathUtil.isNear(42, 41, 2));
|
||||
assertTrue(MathUtil.isNear(42, 43, 2));
|
||||
assertFalse(MathUtil.isNear(42, 44, 1));
|
||||
|
||||
// Negative integer checks
|
||||
assertTrue(MathUtil.isNear(-42, -42, 1));
|
||||
assertTrue(MathUtil.isNear(-42, -41, 2));
|
||||
assertTrue(MathUtil.isNear(-42, -43, 2));
|
||||
assertFalse(MathUtil.isNear(-42, -44, 1));
|
||||
|
||||
// Mixed sign integer checks
|
||||
assertFalse(MathUtil.isNear(-42, 42, 1));
|
||||
assertFalse(MathUtil.isNear(-42, 41, 2));
|
||||
assertFalse(MathUtil.isNear(-42, 43, 2));
|
||||
assertFalse(MathUtil.isNear(42, -42, 1));
|
||||
assertFalse(MathUtil.isNear(42, -41, 2));
|
||||
assertFalse(MathUtil.isNear(42, -43, 2));
|
||||
|
||||
// Floating point checks
|
||||
assertTrue(MathUtil.isNear(42, 41.5, 1));
|
||||
assertTrue(MathUtil.isNear(42, 42.5, 1));
|
||||
assertTrue(MathUtil.isNear(42, 41.5, 0.75));
|
||||
assertTrue(MathUtil.isNear(42, 42.5, 0.75));
|
||||
|
||||
// Wraparound checks
|
||||
assertTrue(MathUtil.isNear(0, 356, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(0, -356, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(0, 4, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(0, -4, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(400, 41, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(400, -319, 5, 0, 360));
|
||||
assertTrue(MathUtil.isNear(400, 401, 5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(0, 356, 2.5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(0, -356, 2.5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(0, 4, 2.5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(0, -4, 2.5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(400, 35, 5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(400, -315, 5, 0, 360));
|
||||
assertFalse(MathUtil.isNear(400, 395, 5, 0, 360));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user