This is an automated email from the ASF dual-hosted git repository.

alexismanin pushed a commit to branch fix/geotiff-flaky-test
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 76febadda64437f612a05073f68fdfbf5688eb60
Author: Alexis Manin <[email protected]>
AuthorDate: Wed May 20 17:15:11 2026 +0200

    feat(Utilities): add support for numbers in approximate equality
---
 .../main/org/apache/sis/util/Utilities.java                   | 11 +++++++++++
 .../main/org/apache/sis/util/internal/shared/Numerics.java    |  6 +++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Utilities.java 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Utilities.java
index 4587b71572..4cdf227ea3 100644
--- a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Utilities.java
+++ b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/Utilities.java
@@ -25,6 +25,7 @@ import java.util.Set;
 import java.util.Objects;
 import java.util.Optional;
 import org.apache.sis.util.collection.CheckedContainer;
+import org.apache.sis.util.internal.shared.Numerics;
 
 
 /**
@@ -204,6 +205,16 @@ public final class Utilities {
             }
             return true;
         }
+
+        if (object1 instanceof Number && object2 instanceof Number) {
+            final Number n1 = (Number) object1;
+            final Number n2 = (Number) object2;
+            return (n1 == n2 || (
+                    (n1 instanceof Double || n1 instanceof Float || n2 
instanceof Double || n2 instanceof Float)
+                            && Numerics.epsilonEqual(n1.doubleValue(), 
n2.doubleValue(), mode)
+            ));
+        }
+
         return Objects.deepEquals(object1, object2);
     }
 
diff --git 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/Numerics.java
 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/Numerics.java
index 3a03b0fe2f..bd7b23c21b 100644
--- 
a/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/Numerics.java
+++ 
b/endorsed/src/org.apache.sis.util/main/org/apache/sis/util/internal/shared/Numerics.java
@@ -400,7 +400,11 @@ public final class Numerics {
     public static boolean epsilonEqual(final double v1, final double v2, final 
ComparisonMode mode) {
         if (mode.isApproximate()) {
             final double mg = max(abs(v1), abs(v2));
-            if (mg != Double.POSITIVE_INFINITY) {
+            /*
+             * If one of the numbers to compare is not finite, it is not 
possible to compare them using an epsilon.
+             * In such cases, we must fall back to the standard equal to check 
if their bit representation is the same.
+             */
+            if (Double.isFinite(mg)) {
                 return epsilonEqual(v1, v2, COMPARISON_THRESHOLD * mg);
             }
         }

Reply via email to