This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 3110d38dbaf5d25be54ecdef367323c13ec292d4 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Thu May 25 17:21:06 2023 +0200 Add an `AbstractEnvelope.isFinite()` convenience method. --- .../org/apache/sis/geometry/AbstractEnvelope.java | 21 ++++++++++++++++++++- .../org/apache/sis/geometry/ArrayEnvelopeTest.java | 15 +++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java index cb9726a691..ae6f1d59fc 100644 --- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java +++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java @@ -118,7 +118,7 @@ import static org.apache.sis.math.MathFunctions.isNegativeZero; * </ul> * * @author Martin Desruisseaux (IRD, Geomatys) - * @version 1.1 + * @version 1.4 * @since 0.3 */ @XmlTransient @@ -675,6 +675,25 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve return envelopes; } + /** + * Determines whether or not this envelope contains only finite values. + * More specifically this method returns {@code false} if at least one + * coordinate value is NaN or infinity, and {@code true} otherwise. + * Note that a finite envelope may be {@linkplain #isEmpty() empty}. + * + * @return {@code true} if this envelope contains only finite coordinate values. + * + * @since 1.4 + */ + public boolean isFinite() { + for (int i = getDimension(); --i >= 0;) { + if (!Double.isFinite(getLower(i)) || !Double.isFinite(getUpper(i))) { + return false; + } + } + return true; + } + /** * Determines whether or not this envelope is empty. An envelope is empty if it has zero * {@linkplain #getDimension() dimension}, or if the {@linkplain #getSpan(int) span} of diff --git a/core/sis-referencing/src/test/java/org/apache/sis/geometry/ArrayEnvelopeTest.java b/core/sis-referencing/src/test/java/org/apache/sis/geometry/ArrayEnvelopeTest.java index f374565cc9..5e916b7c8d 100644 --- a/core/sis-referencing/src/test/java/org/apache/sis/geometry/ArrayEnvelopeTest.java +++ b/core/sis-referencing/src/test/java/org/apache/sis/geometry/ArrayEnvelopeTest.java @@ -28,14 +28,25 @@ import static org.apache.sis.referencing.crs.HardCodedCRS.WGS84; /** * Unit tests for class {@link ArrayEnvelope}. - * This is the base class of {@link GeneralEnvelope} and {@link ImmutableEnvelope}. + * The latter is the base class of {@link GeneralEnvelope} and {@link ImmutableEnvelope}. * * @author Michael Hausegger - * @version 1.0 + * @version 1.4 * @since 0.8 */ @DependsOn(AbstractEnvelopeTest.class) public final class ArrayEnvelopeTest extends TestCase { + /** + * Tests {@link ArrayEnvelope#isFinite()}. + */ + @Test + public void testIsFinite() { + ArrayEnvelope envelope = new ArrayEnvelope(new double[] {10, 356.683168}); + assertTrue(envelope.isFinite()); + envelope.coordinates[0] = Double.NaN; + assertFalse(envelope.isFinite()); + } + /** * Tests {@link ArrayEnvelope#isEmpty()}. */