[wpiunits] Add isNear function implementation (#6396)

This implementation uses a tolerance in the same units as the measure it checks.
This commit is contained in:
vichik
2024-04-22 06:40:33 +03:00
committed by GitHub
parent abfe2488ff
commit e89c8c1008
2 changed files with 58 additions and 1 deletions

View File

@@ -303,7 +303,7 @@ class MeasureTest {
}
@Test
void testIsNear() {
void testIsNearVarianceThreshold() {
var unit = new ExampleUnit(92);
var measureA = unit.of(1.21);
var measureB = unit.ofBaseUnits(64);
@@ -344,4 +344,42 @@ class MeasureTest {
assertTrue(Units.Feet.zero().isNear(Units.Millimeters.zero(), 0.001));
assertFalse(Units.Feet.of(2).isNear(Units.Millimeters.of(0), 0.001));
}
@Test
void testIsNearMeasureTolerance() {
var measureCompared = Units.Meters.of(1);
var measureComparing = Units.Meters.of(1.2);
// Positive value with positive tolerance
assertTrue(measureCompared.isNear(measureComparing, Units.Millimeters.of(300)));
assertFalse(measureCompared.isNear(measureComparing, Units.Centimeters.of(10)));
measureCompared = measureCompared.negate();
measureComparing = measureComparing.negate();
// Negative value with positive tolerance
assertTrue(measureCompared.isNear(measureComparing, Units.Millimeters.of(300)));
assertFalse(measureCompared.isNear(measureComparing, Units.Centimeters.of(10)));
measureCompared = measureCompared.negate();
measureComparing = measureComparing.negate();
// Positive value with negative tolerance
assertTrue(measureCompared.isNear(measureComparing, Units.Millimeters.of(-300)));
assertFalse(measureCompared.isNear(measureComparing, Units.Centimeters.of(-10)));
measureCompared = measureCompared.negate();
measureComparing = measureComparing.negate();
// Negative value with negative tolerance.
assertTrue(measureCompared.isNear(measureComparing, Units.Millimeters.of(-300)));
assertFalse(measureCompared.isNear(measureComparing, Units.Centimeters.of(-10)));
measureCompared = measureCompared.negate();
measureComparing = measureComparing.negate();
// Tolerance exact difference between measures.
assertTrue(measureCompared.isNear(measureComparing, Units.Millimeters.of(200)));
assertTrue(measureCompared.isNear(measureComparing, Units.Centimeters.of(-20)));
}
}