This is an automated email from the ASF dual-hosted git repository. mattjuntunen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-numbers.git
The following commit(s) were added to refs/heads/master by this push: new dfba842 NUMBERS-77: additional unit tests for Precision.DoubleEquivalence dfba842 is described below commit dfba842bf7107f1715fe84dd10277abf8bf8d3a5 Author: Matt Juntunen <mattjuntu...@apache.org> AuthorDate: Wed Apr 28 09:48:23 2021 -0400 NUMBERS-77: additional unit tests for Precision.DoubleEquivalence --- .../numbers/core/EpsilonDoubleEquivalenceTest.java | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/commons-numbers-core/src/test/java/org/apache/commons/numbers/core/EpsilonDoubleEquivalenceTest.java b/commons-numbers-core/src/test/java/org/apache/commons/numbers/core/EpsilonDoubleEquivalenceTest.java index 5eac0e8..fb479f9 100644 --- a/commons-numbers-core/src/test/java/org/apache/commons/numbers/core/EpsilonDoubleEquivalenceTest.java +++ b/commons-numbers-core/src/test/java/org/apache/commons/numbers/core/EpsilonDoubleEquivalenceTest.java @@ -67,6 +67,21 @@ class EpsilonDoubleEquivalenceTest { } @Test + void testCompare_simple() { + // arrange + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(1e-10); + + // act/assert + Assertions.assertEquals(0, cmp.compare(1, 1)); + Assertions.assertEquals(-1, cmp.compare(1, 2)); + Assertions.assertEquals(1, cmp.compare(2, 1)); + + Assertions.assertEquals(0, cmp.compare(-1, -1)); + Assertions.assertEquals(1, cmp.compare(-1, -2)); + Assertions.assertEquals(-1, cmp.compare(-2, -1)); + } + + @Test void testCompare_compareToZero() { // arrange final double eps = 1e-2; @@ -147,6 +162,102 @@ class EpsilonDoubleEquivalenceTest { Assertions.assertEquals(0, cmp.compare(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY)); } + @Test + void testEq() { + // arrange + final double eps = Math.ulp(1.0); + final double twoEps = 2 * eps; + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(eps); + + // act/assert + Assertions.assertTrue(cmp.eq(0.0, 0.0)); + + Assertions.assertTrue(cmp.eq(1.0, 1.0)); + Assertions.assertTrue(cmp.eq(1.0, 1.0 + eps)); + Assertions.assertTrue(cmp.eq(1.0, 1.0 - eps)); + Assertions.assertFalse(cmp.eq(1.0, 1.0 + twoEps)); + Assertions.assertFalse(cmp.eq(1.0, 1.0 - twoEps)); + + Assertions.assertTrue(cmp.eq(-1.0, -1.0)); + Assertions.assertTrue(cmp.eq(-1.0, -1.0 + eps)); + Assertions.assertTrue(cmp.eq(-1.0, -1.0 - eps)); + Assertions.assertFalse(cmp.eq(-1.0, -1.0 + twoEps)); + Assertions.assertFalse(cmp.eq(-1.0, -1.0 - twoEps)); + } + + @Test + void testEqZero() { + // arrange + final double eps = 1e-6; + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(eps); + + // act/assert + Assertions.assertTrue(cmp.eqZero(0.0)); + + Assertions.assertFalse(cmp.eqZero(Math.nextUp(eps))); + Assertions.assertFalse(cmp.eqZero(Math.nextDown(-eps))); + } + + @Test + void testLt() { + // arrange + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(1e-6); + + // act/assert + Assertions.assertTrue(cmp.lt(1, 2)); + Assertions.assertTrue(cmp.lt(-2, -1)); + + Assertions.assertFalse(cmp.lt(1, 1)); + Assertions.assertFalse(cmp.lt(-1, -1)); + Assertions.assertFalse(cmp.lt(2, 1)); + Assertions.assertFalse(cmp.lt(-1, -2)); + } + + @Test + void testLte() { + // arrange + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(1e-6); + + // act/assert + Assertions.assertTrue(cmp.lte(1, 2)); + Assertions.assertTrue(cmp.lte(-2, -1)); + Assertions.assertTrue(cmp.lte(1, 1)); + Assertions.assertTrue(cmp.lte(-1, -1)); + + Assertions.assertFalse(cmp.lte(2, 1)); + Assertions.assertFalse(cmp.lte(-1, -2)); + } + + @Test + void testGt() { + // arrange + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(1e-6); + + // act/assert + Assertions.assertTrue(cmp.gt(2, 1)); + Assertions.assertTrue(cmp.gt(-1, -2)); + + Assertions.assertFalse(cmp.gt(1, 1)); + Assertions.assertFalse(cmp.gt(-1, -1)); + Assertions.assertFalse(cmp.gt(1, 2)); + Assertions.assertFalse(cmp.gt(-2, -1)); + } + + @Test + void testGte() { + // arrange + final Precision.DoubleEquivalence cmp = Precision.doubleEquivalenceOfEpsilon(1e-6); + + // act/assert + Assertions.assertTrue(cmp.gte(2, 1)); + Assertions.assertTrue(cmp.gte(-1, -2)); + Assertions.assertTrue(cmp.gte(1, 1)); + Assertions.assertTrue(cmp.gte(-1, -1)); + + Assertions.assertFalse(cmp.gte(1, 2)); + Assertions.assertFalse(cmp.gte(-2, -1)); + } + /** * Increments the given double value {@code count} number of times * using {@link Math#nextUp(double)}.