You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by am...@apache.org on 2026/05/21 09:15:56 UTC
(sis) 03/06: feat(Utilities): add support for numbers in approximate equality
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 <al...@geomatys.com>
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);
}
}