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 b3122d44e24bfc96b94c07f937dc7b08f5f5d3bd Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Feb 10 12:32:14 2024 +0100 Fix a test case in the handling of wraparound axis in `Envelope2D`. --- .../org/apache/sis/geometry/AbstractEnvelope.java | 2 + .../main/org/apache/sis/geometry/Envelope2D.java | 16 +- .../main/org/apache/sis/geometry/package-info.java | 2 +- .../sis/referencing/util/CoordinateOperations.java | 4 + .../apache/sis/geometry/AbstractEnvelopeTest.java | 366 ++++++++++----------- .../referencing/util/CoordinateOperationsTest.java | 23 +- 6 files changed, 209 insertions(+), 204 deletions(-) diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/AbstractEnvelope.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/AbstractEnvelope.java index c12a887cee..6866ab0e52 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/AbstractEnvelope.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/AbstractEnvelope.java @@ -239,6 +239,8 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve * * @param axis the axis to test, or {@code null}. * @return {@code true} if the range meaning is {@code WRAPAROUND}. + * + * @see org.apache.sis.referencing.util.CoordinateOperations#isWrapAround(CoordinateSystemAxis) */ static boolean isWrapAround(final CoordinateSystemAxis axis) { return (axis != null) && axis.getRangeMeaning() == RangeMeaning.WRAPAROUND; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/Envelope2D.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/Envelope2D.java index 4224ab1e00..976d541ab9 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/Envelope2D.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/Envelope2D.java @@ -38,9 +38,6 @@ import static org.apache.sis.math.MathFunctions.isNegativeZero; import static org.apache.sis.util.ArgumentChecks.ensureDimensionMatches; import static org.apache.sis.referencing.util.Formulas.isPoleToPole; import static org.apache.sis.geometry.AbstractEnvelope.getAxis; -import static org.apache.sis.geometry.AbstractEnvelope.getCommonCRS; -import static org.apache.sis.geometry.AbstractEnvelope.fixSpan; -import static org.apache.sis.geometry.AbstractEnvelope.fixMedian; import static org.apache.sis.geometry.AbstractEnvelope.isWrapAround; import static org.apache.sis.geometry.AbstractEnvelope.isNegativeUnsafe; @@ -95,7 +92,7 @@ import org.opengis.geometry.MismatchedReferenceSystemException; * * @author Martin Desruisseaux (IRD, Geomatys) * @author Johann Sorel (Geomatys) - * @version 1.1 + * @version 1.5 * * @see GeneralEnvelope * @see org.apache.sis.metadata.iso.extent.DefaultGeographicBoundingBox @@ -180,8 +177,7 @@ public class Envelope2D extends Rectangle2D.Double implements Envelope, Emptiabl public Envelope2D(final DirectPosition lowerCorner, final DirectPosition upperCorner) throws MismatchedReferenceSystemException, MismatchedDimensionException { - // The call to getCommonCRS(…) performs a check against null values. - this(getCommonCRS(lowerCorner, upperCorner), lowerCorner, upperCorner); + this(AbstractEnvelope.getCommonCRS(lowerCorner, upperCorner), lowerCorner, upperCorner); } /** @@ -365,7 +361,9 @@ public class Envelope2D extends Rectangle2D.Double implements Envelope, Emptiabl */ @Override public DirectPosition2D getUpperCorner() { - return new DirectPosition2D(crs, x+width, y+height); + return new DirectPosition2D(crs, + (x != 0) ? x+width : width, // Preserve the sign of `width` if -0.0. + (y != 0) ? y+height : height); } /** @@ -457,7 +455,7 @@ public class Envelope2D extends Rectangle2D.Double implements Envelope, Emptiabl } value += 0.5*span; if (isNegative(span)) { // Special handling for -0.0 - value = fixMedian(getAxis(crs, dimension), value); + value = AbstractEnvelope.fixMedian(getAxis(crs, dimension), value); } return value; } @@ -479,7 +477,7 @@ public class Envelope2D extends Rectangle2D.Double implements Envelope, Emptiabl default: throw indexOutOfBounds(dimension); } if (isNegative(span)) { // Special handling for -0.0 - span = fixSpan(getAxis(crs, dimension), span); + span = AbstractEnvelope.fixSpan(getAxis(crs, dimension), span); } return span; } diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/package-info.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/package-info.java index 369fc198fd..5346ed6cfd 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/package-info.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/geometry/package-info.java @@ -87,7 +87,7 @@ * * @author Martin Desruisseaux (IRD, Geomatys) * @author Alexis Manin (Geomatys) - * @version 1.4 + * @version 1.5 * @since 0.3 */ package org.apache.sis.geometry; diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/util/CoordinateOperations.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/util/CoordinateOperations.java index 0488d02543..d9a81f9b9f 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/util/CoordinateOperations.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/util/CoordinateOperations.java @@ -207,9 +207,13 @@ public final class CoordinateOperations extends Static { /** * Returns {@code true} if the given axis is of kind "Wrap Around". * Defined here because used together with {@link #wrapAroundChanges wrapAroundChanges(…)}. + * This method can be used in contexts of coordinate operations, when the caller wants to + * be consistent with whatever policy change may happen in the future in this class. * * @param axis the axis to test. * @return {@code true} if the given axis has "wrap around" range meaning. + * + * @see org.apache.sis.geometry.AbstractEnvelope#isWrapAround(CoordinateSystemAxis) */ public static boolean isWrapAround(final CoordinateSystemAxis axis) { return axis.getRangeMeaning() == RangeMeaning.WRAPAROUND; diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/AbstractEnvelopeTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/AbstractEnvelopeTest.java index f502c75b48..c38afd5e6c 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/AbstractEnvelopeTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/geometry/AbstractEnvelopeTest.java @@ -23,7 +23,7 @@ import org.opengis.geometry.DirectPosition; // Test dependencies import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static org.opengis.test.Validators.validate; import org.apache.sis.test.TestCase; import org.apache.sis.test.DependsOn; @@ -64,7 +64,7 @@ public final class AbstractEnvelopeTest extends TestCase { final Envelope envelope; switch (type) { case GENERAL: { - final GeneralEnvelope ge = new GeneralEnvelope(2); + final var ge = new GeneralEnvelope(2); ge.setCoordinateReferenceSystem(WGS84); ge.setRange(0, xmin, xmax); ge.setRange(1, ymin, ymax); @@ -80,7 +80,7 @@ public final class AbstractEnvelopeTest extends TestCase { break; } case SUBENVELOPE: { - GeneralEnvelope ge = new GeneralEnvelope(5); + var ge = new GeneralEnvelope(5); ge.setRange(1, xmin, xmax); ge.setRange(2, ymin, ymax); ge.setRange(0, 2, 3); // Following values will be verified in verifyInvariants(…) @@ -108,12 +108,12 @@ public final class AbstractEnvelopeTest extends TestCase { case SUBENVELOPE: { // Asserts that other dimensions in the original envelope has not been modified. final double[] coordinates = ((SubEnvelope) envelope).coordinates; - assertEquals(2, coordinates[0], STRICT); - assertEquals(3, coordinates[5], STRICT); - assertEquals(4, coordinates[3], STRICT); - assertEquals(6, coordinates[8], STRICT); - assertEquals(8, coordinates[4], STRICT); - assertEquals(9, coordinates[9], STRICT); + assertEquals(2, coordinates[0]); + assertEquals(3, coordinates[5]); + assertEquals(4, coordinates[3]); + assertEquals(6, coordinates[8]); + assertEquals(8, coordinates[4]); + assertEquals(9, coordinates[9]); break; } } @@ -130,39 +130,39 @@ public final class AbstractEnvelopeTest extends TestCase { */ @Test public void testSimpleEnvelope() { - final DirectPosition2D inside = new DirectPosition2D( 3, 32); - final DirectPosition2D outside = new DirectPosition2D(-5, 32); - final Envelope2D contained = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); - final Envelope2D intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var inside = new DirectPosition2D( 3, 32); + final var outside = new DirectPosition2D(-5, 32); + final var contained = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); + final var intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); final Envelope2D disjoint = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, -4, 12, 30, 50); - assertEquals(label, 30, envelope.getMinimum(1), STRICT); - assertEquals(label, 50, envelope.getMaximum(1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, -4, envelope.getMinimum(0), STRICT); - assertEquals(label, 12, envelope.getMaximum(0), STRICT); - assertEquals(label, 4, envelope.getMedian (0), STRICT); - assertEquals(label, 16, envelope.getSpan (0), STRICT); + assertEquals(30, envelope.getMinimum(1), label); + assertEquals(50, envelope.getMaximum(1), label); + assertEquals(40, envelope.getMedian (1), label); + assertEquals(20, envelope.getSpan (1), label); + assertEquals(-4, envelope.getMinimum(0), label); + assertEquals(12, envelope.getMaximum(0), label); + assertEquals( 4, envelope.getMedian (0), label); + assertEquals(16, envelope.getSpan (0), label); switch (type) { default: { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect, false)); - assertTrue (label, ext.intersects(intersect, false)); + final var ext = (AbstractEnvelope) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect, false), label); + assertTrue (ext.intersects(intersect, false), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); break; } case RECTANGLE: { - final Rectangle2D ext = (Rectangle2D) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect)); - assertTrue (label, ext.intersects(intersect)); + final var ext = (Rectangle2D) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect), label); + assertTrue (ext.intersects(intersect), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); break; @@ -183,45 +183,45 @@ public final class AbstractEnvelopeTest extends TestCase { */ @Test public void testCrossingAntiMeridian() { - final DirectPosition2D inside = new DirectPosition2D(18, 32); - final DirectPosition2D outside = new DirectPosition2D( 3, 32); - final Envelope2D contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); - final Envelope2D intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); - final Envelope2D disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); - final Envelope2D spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); + final var inside = new DirectPosition2D(18, 32); + final var outside = new DirectPosition2D( 3, 32); + final var contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); + final var intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); + final var spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, 12, -4, 30, 50); final DirectPosition lower = envelope.getLowerCorner(); final DirectPosition upper = envelope.getUpperCorner(); - assertEquals(label, 30, envelope.getMinimum (1), STRICT); - assertEquals(label, 50, envelope.getMaximum (1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, 12, lower .getOrdinate(0), STRICT); - assertEquals(label, -180, envelope.getMinimum (0), STRICT); - assertEquals(label, -4, upper .getOrdinate(0), STRICT); - assertEquals(label, +180, envelope.getMaximum (0), STRICT); - assertEquals(label, -176, envelope.getMedian (0), STRICT); - assertEquals(label, 344, envelope.getSpan (0), STRICT); // 360° - testSimpleEnvelope() + assertEquals( 30, envelope.getMinimum (1), label); + assertEquals( 50, envelope.getMaximum (1), label); + assertEquals( 40, envelope.getMedian (1), label); + assertEquals( 20, envelope.getSpan (1), label); + assertEquals( 12, lower .getOrdinate(0), label); + assertEquals(-180, envelope.getMinimum (0), label); + assertEquals( -4, upper .getOrdinate(0), label); + assertEquals(+180, envelope.getMaximum (0), label); + assertEquals(-176, envelope.getMedian (0), label); + assertEquals( 344, envelope.getSpan (0), label); // 360° - testSimpleEnvelope() switch (type) { default: { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect, false)); - assertTrue (label, ext.intersects(intersect, false)); + final var ext = (AbstractEnvelope) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect, false), label); + assertTrue (ext.intersects(intersect, false), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); assertContains(ext, spanning); break; } case RECTANGLE: { - final Rectangle2D ext = (Rectangle2D) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect)); - assertTrue (label, ext.intersects(intersect)); + final var ext = (Rectangle2D) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect), label); + assertTrue (ext.intersects(intersect), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); assertContains(ext, spanning); @@ -244,47 +244,47 @@ public final class AbstractEnvelopeTest extends TestCase { */ @Test public void testCrossingAntiMeridianTwice() { - final DirectPosition2D inside = new DirectPosition2D(18, 32); - final DirectPosition2D outside = new DirectPosition2D( 3, 32); - final Envelope2D contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); - final Envelope2D intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); - final Envelope2D disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); - final Envelope2D spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); + final var inside = new DirectPosition2D(18, 32); + final var outside = new DirectPosition2D( 3, 32); + final var contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); + final var intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); + final var spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, 12, -364, 30, 50); final DirectPosition lower = envelope.getLowerCorner(); final DirectPosition upper = envelope.getUpperCorner(); - assertEquals(label, 30, envelope.getMinimum (1), STRICT); - assertEquals(label, 50, envelope.getMaximum (1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, 12, lower .getOrdinate(0), STRICT); - assertEquals(label, -180, envelope.getMinimum (0), STRICT); - assertEquals(label, -364, upper .getOrdinate(0), STRICT); - assertEquals(label, +180, envelope.getMaximum (0), STRICT); - assertEquals(label, 4, envelope.getMedian (0), STRICT); // Note the alternance with the previous test methods. - assertEquals(label, NaN, envelope.getSpan (0), STRICT); // testCrossingAntiMeridian() + 360°. + assertEquals( 30, envelope.getMinimum (1), label); + assertEquals( 50, envelope.getMaximum (1), label); + assertEquals( 40, envelope.getMedian (1), label); + assertEquals( 20, envelope.getSpan (1), label); + assertEquals( 12, lower .getOrdinate(0), label); + assertEquals(-180, envelope.getMinimum (0), label); + assertEquals(-364, upper .getOrdinate(0), label); + assertEquals(+180, envelope.getMaximum (0), label); + assertEquals( 4, envelope.getMedian (0), label); // Note the alternance with the previous test methods. + assertEquals( NaN, envelope.getSpan (0), label); // testCrossingAntiMeridian() + 360°. if (envelope instanceof AbstractEnvelope) { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect, false)); - assertTrue (label, ext.intersects(intersect, false)); - assertFalse(label, ext.contains (spanning, false)); - assertTrue (label, ext.intersects(spanning, false)); + final var ext = (AbstractEnvelope) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect, false), label); + assertTrue (ext.intersects(intersect, false), label); + assertFalse(ext.contains (spanning, false), label); + assertTrue (ext.intersects(spanning, false), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); break; } if (envelope instanceof Rectangle2D) { - final Rectangle2D ext = (Rectangle2D) envelope; - assertTrue (label, ext.contains (inside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect)); - assertTrue (label, ext.intersects(intersect)); - assertFalse(label, ext.contains (spanning)); - assertTrue (label, ext.intersects(spanning)); + final var ext = (Rectangle2D) envelope; + assertTrue (ext.contains (inside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect), label); + assertTrue (ext.intersects(intersect), label); + assertFalse(ext.contains (spanning), label); + assertTrue (ext.intersects(spanning), label); assertDisjoint(ext, disjoint); assertContains(ext, contained); break; @@ -299,45 +299,45 @@ public final class AbstractEnvelopeTest extends TestCase { */ @Test public void testCrossingAntiMeridianThreeTimes() { - final DirectPosition2D wasInside = new DirectPosition2D(18, 32); - final DirectPosition2D outside = new DirectPosition2D( 3, 32); - final Envelope2D wasContained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); - final Envelope2D wasIntersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); - final Envelope2D disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); - final Envelope2D spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); + final var wasInside = new DirectPosition2D(18, 32); + final var outside = new DirectPosition2D( 3, 32); + final var wasContained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); + final var wasIntersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var disjoint = (Envelope2D) create(RECTANGLE, -2, 10, 35, 40); + final var spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, 372, -364, 30, 50); final DirectPosition lower = envelope.getLowerCorner(); final DirectPosition upper = envelope.getUpperCorner(); - assertEquals(label, 30, envelope.getMinimum (1), STRICT); - assertEquals(label, 50, envelope.getMaximum (1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, 372, lower .getOrdinate(0), STRICT); - assertEquals(label, -180, envelope.getMinimum (0), STRICT); - assertEquals(label, -364, upper .getOrdinate(0), STRICT); - assertEquals(label, +180, envelope.getMaximum (0), STRICT); - assertEquals(label, -176, envelope.getMedian (0), STRICT); // Note the alternance with the previous test methods. - assertEquals(label, NaN, envelope.getSpan (0), STRICT); // testCrossingAntiMeridianTwice() + 360°. + assertEquals( 30, envelope.getMinimum (1), label); + assertEquals( 50, envelope.getMaximum (1), label); + assertEquals( 40, envelope.getMedian (1), label); + assertEquals( 20, envelope.getSpan (1), label); + assertEquals( 372, lower .getOrdinate(0), label); + assertEquals(-180, envelope.getMinimum (0), label); + assertEquals(-364, upper .getOrdinate(0), label); + assertEquals(+180, envelope.getMaximum (0), label); + assertEquals(-176, envelope.getMedian (0), label); // Note the alternance with the previous test methods. + assertEquals( NaN, envelope.getSpan (0), label); // testCrossingAntiMeridianTwice() + 360°. switch (type) { default: { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertFalse(label, ext.contains (wasInside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (spanning, false)); - assertTrue (label, ext.intersects(spanning, false)); + final var ext = (AbstractEnvelope) envelope; + assertFalse(ext.contains (wasInside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (spanning, false), label); + assertTrue (ext.intersects(spanning, false), label); assertDisjoint(ext, wasIntersect); assertDisjoint(ext, disjoint); assertDisjoint(ext, wasContained); break; } case RECTANGLE: { - final Rectangle2D ext = (Rectangle2D) envelope; - assertFalse(label, ext.contains (wasInside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (spanning)); - assertTrue (label, ext.intersects(spanning)); + final var ext = (Rectangle2D) envelope; + assertFalse(ext.contains (wasInside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (spanning), label); + assertTrue (ext.intersects(spanning), label); assertDisjoint(ext, wasIntersect); assertDisjoint(ext, disjoint); assertDisjoint(ext, wasContained); @@ -353,44 +353,44 @@ public final class AbstractEnvelopeTest extends TestCase { */ @Test public void testRange0() { - final DirectPosition2D wasInside = new DirectPosition2D(18, 32); - final DirectPosition2D outside = new DirectPosition2D( 3, 32); - final Envelope2D wasContained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); - final Envelope2D intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); - final Envelope2D spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); + final var wasInside = new DirectPosition2D(18, 32); + final var outside = new DirectPosition2D( 3, 32); + final var wasContained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); + final var intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, -0.0, 0.0, 30, 50); - assertEquals(label, 30, envelope.getMinimum(1), STRICT); - assertEquals(label, 50, envelope.getMaximum(1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, -0.0, envelope.getMinimum(0), STRICT); - assertEquals(label, 0.0, envelope.getMaximum(0), STRICT); - assertEquals(label, 0, envelope.getMedian (0), STRICT); - assertEquals(label, 0, envelope.getSpan (0), STRICT); + assertEquals( 30, envelope.getMinimum(1), label); + assertEquals( 50, envelope.getMaximum(1), label); + assertEquals( 40, envelope.getMedian (1), label); + assertEquals( 20, envelope.getSpan (1), label); + assertEquals(-0.0, envelope.getMinimum(0), label); + assertEquals( 0.0, envelope.getMaximum(0), label); + assertEquals( 0, envelope.getMedian (0), label); + assertEquals( 0, envelope.getSpan (0), label); switch (type) { default: { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertFalse(label, ext.contains (wasInside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect, false)); - assertTrue (label, ext.intersects(intersect, false)); - assertFalse(label, ext.contains (spanning, false)); - assertFalse(label, ext.intersects(spanning, false)); - assertFalse(label, ext.intersects(spanning, false)); + final var ext = (AbstractEnvelope) envelope; + assertFalse(ext.contains (wasInside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect, false), label); + assertTrue (ext.intersects(intersect, false), label); + assertFalse(ext.contains (spanning, false), label); + assertFalse(ext.intersects(spanning, false), label); + assertFalse(ext.intersects(spanning, false), label); assertDisjoint(ext, wasContained); break; } case RECTANGLE: { - final Rectangle2D ext = (Rectangle2D) envelope; - assertFalse(label, ext.contains (wasInside)); - assertFalse(label, ext.contains (outside)); - assertFalse(label, ext.contains (intersect)); - assertTrue (label, ext.intersects(intersect)); - assertFalse(label, ext.contains (spanning)); - assertFalse(label, ext.intersects(spanning)); - assertFalse(label, ext.intersects(spanning)); + final var ext = (Rectangle2D) envelope; + assertFalse(ext.contains (wasInside), label); + assertFalse(ext.contains (outside), label); + assertFalse(ext.contains (intersect), label); + assertTrue (ext.intersects(intersect), label); + assertFalse(ext.contains (spanning), label); + assertFalse(ext.intersects(spanning), label); + assertFalse(ext.intersects(spanning), label); assertDisjoint(ext, wasContained); break; } @@ -400,45 +400,45 @@ public final class AbstractEnvelopeTest extends TestCase { } /** - * Tests a case crossing the anti-meridian crossing, from 0° to -0°. + * Tests a case crossing the anti-meridian, from 0° to -0°. */ @Test public void testRange360() { - final DirectPosition2D inside = new DirectPosition2D(18, 32); - final DirectPosition2D wasOutside = new DirectPosition2D( 3, 32); - final Envelope2D contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); - final Envelope2D intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); - final Envelope2D spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); + final var inside = new DirectPosition2D(18, 32); + final var wasOutside = new DirectPosition2D( 3, 32); + final var contained = (Envelope2D) create(RECTANGLE, 14, 16, 35, 40); + final var intersect = (Envelope2D) create(RECTANGLE, -2, 16, 35, 40); + final var spanning = (Envelope2D) create(RECTANGLE, 16, -8, 35, 40); for (int type=0; type<LAST; type++) { final String label = "Type " + type; final Envelope envelope = create(type, 0.0, -0.0, 30, 50); final DirectPosition lower = envelope.getLowerCorner(); final DirectPosition upper = envelope.getUpperCorner(); - assertEquals(label, 30, envelope.getMinimum (1), STRICT); - assertEquals(label, 50, envelope.getMaximum (1), STRICT); - assertEquals(label, 40, envelope.getMedian (1), STRICT); - assertEquals(label, 20, envelope.getSpan (1), STRICT); - assertEquals(label, 0.0, lower .getOrdinate(0), STRICT); - assertEquals(label, -180, envelope.getMinimum (0), STRICT); - assertEquals(label, -0.0, upper .getOrdinate(0), STRICT); - assertEquals(label, +180, envelope.getMaximum (0), STRICT); - assertEquals(label, 180, envelope.getMedian (0), STRICT); - assertEquals(label, 360, envelope.getSpan (0), STRICT); + assertEquals( 30, envelope.getMinimum (1), label); + assertEquals( 50, envelope.getMaximum (1), label); + assertEquals( 40, envelope.getMedian (1), label); + assertEquals( 20, envelope.getSpan (1), label); + assertEquals( 0.0, lower .getOrdinate(0), label); + assertEquals(-180, envelope.getMinimum (0), label); + assertEquals(-0.0, upper .getOrdinate(0), label); + assertEquals(+180, envelope.getMaximum (0), label); + assertEquals( 180, envelope.getMedian (0), label); + assertEquals( 360, envelope.getSpan (0), label); switch (type) { default: { - final AbstractEnvelope ext = (AbstractEnvelope) envelope; - assertTrue(label, ext.contains(inside)); - assertTrue(label, ext.contains(wasOutside)); - assertTrue(label, ext.intersects(intersect, false)); + final var ext = (AbstractEnvelope) envelope; + assertTrue(ext.contains(inside), label); + assertTrue(ext.contains(wasOutside), label); + assertTrue(ext.intersects(intersect, false), label); assertContains(ext, contained); assertContains(ext, spanning); break; } case RECTANGLE: { - final Rectangle2D ext = (Rectangle2D) envelope; - assertTrue(label, ext.contains(inside)); - assertTrue(label, ext.contains(wasOutside)); - assertTrue(label, ext.intersects(intersect)); + final var ext = (Rectangle2D) envelope; + assertTrue(ext.contains(inside), label); + assertTrue(ext.contains(wasOutside), label); + assertTrue(ext.intersects(intersect), label); assertContains(ext, contained); assertContains(ext, spanning); break; @@ -455,7 +455,7 @@ public final class AbstractEnvelopeTest extends TestCase { public void testToSimpleEnvelopesOnEmptyEnvelope() { for (int type=0; type<LAST; type++) { if (type != RECTANGLE) { - final AbstractEnvelope envelope = (AbstractEnvelope) create(type, 0, 0, 0, 0); + final var envelope = (AbstractEnvelope) create(type, 0, 0, 0, 0); assertEquals(0, envelope.toSimpleEnvelopes().length); } } @@ -469,7 +469,7 @@ public final class AbstractEnvelopeTest extends TestCase { public void testToSimpleEnvelopesOnSimpleEnvelope() { for (int type=0; type<LAST; type++) { if (type != RECTANGLE) { - final AbstractEnvelope envelope = (AbstractEnvelope) create(type, -20, 30, -10, 15); + final var envelope = (AbstractEnvelope) create(type, -20, 30, -10, 15); final Envelope[] simples = envelope.toSimpleEnvelopes(); assertEquals(1, simples.length); assertSame(envelope, simples[0]); @@ -485,25 +485,25 @@ public final class AbstractEnvelopeTest extends TestCase { public void testToSimpleEnvelopesOverAntiMeridian() { for (int type=0; type<LAST; type++) { if (type != RECTANGLE) { - final AbstractEnvelope envelope = (AbstractEnvelope) create(type, 155, -150, 0, 50); + final var envelope = (AbstractEnvelope) create(type, 155, -150, 0, 50); final Envelope[] simples = envelope.toSimpleEnvelopes(); assertEquals(2, simples.length); - final AbstractEnvelope e0 = (AbstractEnvelope) simples[0]; - final AbstractEnvelope e1 = (AbstractEnvelope) simples[1]; + final var e0 = (AbstractEnvelope) simples[0]; + final var e1 = (AbstractEnvelope) simples[1]; - assertEquals( 155.0, e0.getLower(0), STRICT); - assertEquals( 0.0, e0.getLower(1), STRICT); - assertEquals( 180.0, e0.getUpper(0), STRICT); - assertEquals( 50.0, e0.getUpper(1), STRICT); - assertEquals( 25.0, e0.getSpan (0), STRICT); - assertEquals( 50.0, e0.getSpan (1), STRICT); + assertEquals( 155.0, e0.getLower(0)); + assertEquals( 0.0, e0.getLower(1)); + assertEquals( 180.0, e0.getUpper(0)); + assertEquals( 50.0, e0.getUpper(1)); + assertEquals( 25.0, e0.getSpan (0)); + assertEquals( 50.0, e0.getSpan (1)); - assertEquals(-180.0, e1.getLower(0), STRICT); - assertEquals( 0.0, e1.getLower(1), STRICT); - assertEquals(-150.0, e1.getUpper(0), STRICT); - assertEquals( 50.0, e1.getUpper(1), STRICT); - assertEquals( 30.0, e1.getSpan (0), STRICT); - assertEquals( 50.0, e1.getSpan (1), STRICT); + assertEquals(-180.0, e1.getLower(0)); + assertEquals( 0.0, e1.getLower(1)); + assertEquals(-150.0, e1.getUpper(0)); + assertEquals( 50.0, e1.getUpper(1)); + assertEquals( 30.0, e1.getSpan (0)); + assertEquals( 50.0, e1.getSpan (1)); } } } diff --git a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/util/CoordinateOperationsTest.java b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/util/CoordinateOperationsTest.java index 2ea86d6915..45799bd97d 100644 --- a/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/util/CoordinateOperationsTest.java +++ b/endorsed/src/org.apache.sis.referencing/test/org/apache/sis/referencing/util/CoordinateOperationsTest.java @@ -24,7 +24,7 @@ import org.apache.sis.referencing.cs.AxesConvention; // Test dependencies import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import org.apache.sis.test.TestCase; import org.apache.sis.test.DependsOnMethod; import org.apache.sis.referencing.cs.HardCodedAxes; @@ -50,9 +50,9 @@ public final class CoordinateOperationsTest extends TestCase { */ @Test public void testIsWrapAround() { - assertFalse("GEODETIC_LATITUDE", CoordinateOperations.isWrapAround(HardCodedAxes.GEODETIC_LATITUDE)); - assertTrue ("GEODETIC_LONGITUDE", CoordinateOperations.isWrapAround(HardCodedAxes.GEODETIC_LONGITUDE)); - assertFalse("ELLIPSOIDAL_HEIGHT", CoordinateOperations.isWrapAround(HardCodedAxes.ELLIPSOIDAL_HEIGHT)); + assertFalse(CoordinateOperations.isWrapAround(HardCodedAxes.GEODETIC_LATITUDE)); + assertTrue (CoordinateOperations.isWrapAround(HardCodedAxes.GEODETIC_LONGITUDE)); + assertFalse(CoordinateOperations.isWrapAround(HardCodedAxes.ELLIPSOIDAL_HEIGHT)); } /** @@ -63,19 +63,20 @@ public final class CoordinateOperationsTest extends TestCase { public void testWrapAroundChanges() { CoordinateReferenceSystem sourceCRS = HardCodedCRS.WGS84_3D; CoordinateSystem targetCS = HardCodedCS.GEODETIC_2D; - assertTrue("(λ,φ,h) → (λ,φ)", CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).isEmpty()); + assertTrue(CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).isEmpty(), + "(λ,φ,h) → (λ,φ)"); sourceCRS = HardCodedCRS.WGS84_3D.forConvention(AxesConvention.POSITIVE_RANGE); - assertArrayEquals("(λ′,φ,h) → (λ,φ)", new Integer[] {0}, - CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray()); + assertArrayEquals(new Integer[] {0}, CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray(), + "(λ′,φ,h) → (λ,φ)"); targetCS = HardCodedCS.GEODETIC_φλ; - assertArrayEquals("(λ′,φ,h) → (φ,λ)", new Integer[] {1}, - CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray()); + assertArrayEquals(new Integer[] {1}, CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray(), + "(λ′,φ,h) → (φ,λ)"); sourceCRS = HardCodedConversions.mercator((GeographicCRS) sourceCRS); - assertArrayEquals("(λ′,φ,h) → (φ,λ)", new Integer[] {1}, - CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray()); + assertArrayEquals(new Integer[] {1}, CoordinateOperations.wrapAroundChanges(sourceCRS, targetCS).toArray(), + "(λ′,φ,h) → (φ,λ)"); } }