/* * Copyright (c) 2016 Vivid Solutions. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v. 1.0 which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * * http://www.eclipse.org/org/documents/edl-v10.php. */ package org.locationtech.jts.geom; import org.locationtech.jts.io.ParseException; import org.locationtech.jts.io.WKTReader; import junit.framework.TestCase; import junit.textui.TestRunner; /** * @version 1.7 */ public class EnvelopeTest extends TestCase { private PrecisionModel precisionModel = new PrecisionModel(1); private GeometryFactory geometryFactory = new GeometryFactory(precisionModel, 0); WKTReader reader = new WKTReader(geometryFactory); public EnvelopeTest(String name) { super(name); } public static void main(String[] args) { TestRunner.run(EnvelopeTest.class); } public void testEverything() throws Exception { Envelope e1 = new Envelope(); assertTrue(e1.isNull()); assertEquals(0, e1.getWidth(), 1E-3); assertEquals(0, e1.getHeight(), 1E-3); e1.expandToInclude(100, 101); e1.expandToInclude(200, 202); e1.expandToInclude(150, 151); assertEquals(200, e1.getMaxX(), 1E-3); assertEquals(202, e1.getMaxY(), 1E-3); assertEquals(100, e1.getMinX(), 1E-3); assertEquals(101, e1.getMinY(), 1E-3); assertTrue(e1.contains(120, 120)); assertTrue(e1.contains(120, 101)); assertTrue(!e1.contains(120, 100)); assertEquals(101, e1.getHeight(), 1E-3); assertEquals(100, e1.getWidth(), 1E-3); assertTrue(!e1.isNull()); Envelope e2 = new Envelope(499, 500, 500, 501); assertTrue(!e1.contains(e2)); assertTrue(!e1.intersects(e2)); e1.expandToInclude(e2); assertTrue(e1.contains(e2)); assertTrue(e1.intersects(e2)); assertEquals(500, e1.getMaxX(), 1E-3); assertEquals(501, e1.getMaxY(), 1E-3); assertEquals(100, e1.getMinX(), 1E-3); assertEquals(101, e1.getMinY(), 1E-3); Envelope e3 = new Envelope(300, 700, 300, 700); assertTrue(!e1.contains(e3)); assertTrue(e1.intersects(e3)); Envelope e4 = new Envelope(300, 301, 300, 301); assertTrue(e1.contains(e4)); assertTrue(e1.intersects(e4)); } public void testIntersectsEmpty() { assertTrue(!new Envelope(-5, 5, -5, 5).intersects(new Envelope())); assertTrue(!new Envelope().intersects(new Envelope(-5, 5, -5, 5))); assertTrue(!new Envelope().intersects(new Envelope(100, 101, 100, 101))); assertTrue(!new Envelope(100, 101, 100, 101).intersects(new Envelope())); } public void testContainsEmpty() { assertTrue(!new Envelope(-5, 5, -5, 5).contains(new Envelope())); assertTrue(!new Envelope().contains(new Envelope(-5, 5, -5, 5))); assertTrue(!new Envelope().contains(new Envelope(100, 101, 100, 101))); assertTrue(!new Envelope(100, 101, 100, 101).contains(new Envelope())); } public void testExpandToIncludeEmpty() { assertEquals(new Envelope(-5, 5, -5, 5), expandToInclude(new Envelope(-5, 5, -5, 5), new Envelope())); assertEquals(new Envelope(-5, 5, -5, 5), expandToInclude(new Envelope(), new Envelope(-5, 5, -5, 5))); assertEquals(new Envelope(100, 101, 100, 101), expandToInclude( new Envelope(), new Envelope(100, 101, 100, 101))); assertEquals(new Envelope(100, 101, 100, 101), expandToInclude( new Envelope(100, 101, 100, 101), new Envelope())); } private Envelope expandToInclude(Envelope a, Envelope b) { a.expandToInclude(b); return a; } public void testEmpty() { assertEquals(0, new Envelope().getHeight(), 0); assertEquals(0, new Envelope().getWidth(), 0); assertEquals(new Envelope(), new Envelope()); Envelope e = new Envelope(100, 101, 100, 101); e.init(new Envelope()); assertEquals(new Envelope(), e); } public void testAsGeometry() throws Exception { assertTrue(geometryFactory.createPoint((Coordinate) null).getEnvelope() .isEmpty()); Geometry g = geometryFactory.createPoint(new Coordinate(5, 6)) .getEnvelope(); assertTrue(!g.isEmpty()); assertTrue(g instanceof Point); Point p = (Point) g; assertEquals(5, p.getX(), 1E-1); assertEquals(6, p.getY(), 1E-1); LineString l = (LineString) reader.read("LINESTRING(10 10, 20 20, 30 40)"); Geometry g2 = l.getEnvelope(); assertTrue(!g2.isEmpty()); assertTrue(g2 instanceof Polygon); Polygon poly = (Polygon) g2; poly.normalize(); assertEquals(5, poly.getExteriorRing().getNumPoints()); assertEquals(new Coordinate(10, 10), poly.getExteriorRing().getCoordinateN( 0)); assertEquals(new Coordinate(10, 40), poly.getExteriorRing().getCoordinateN( 1)); assertEquals(new Coordinate(30, 40), poly.getExteriorRing().getCoordinateN( 2)); assertEquals(new Coordinate(30, 10), poly.getExteriorRing().getCoordinateN( 3)); assertEquals(new Coordinate(10, 10), poly.getExteriorRing().getCoordinateN( 4)); } public void testSetToNull() throws Exception { Envelope e1 = new Envelope(); assertTrue(e1.isNull()); e1.expandToInclude(5, 5); assertTrue(!e1.isNull()); e1.setToNull(); assertTrue(e1.isNull()); } public void testEquals() throws Exception { Envelope e1 = new Envelope(1, 2, 3, 4); Envelope e2 = new Envelope(1, 2, 3, 4); assertEquals(e1, e2); assertEquals(e1.hashCode(), e2.hashCode()); Envelope e3 = new Envelope(1, 2, 3, 5); assertTrue(!e1.equals(e3)); assertTrue(e1.hashCode() != e3.hashCode()); e1.setToNull(); assertTrue(!e1.equals(e2)); assertTrue(e1.hashCode() != e2.hashCode()); e2.setToNull(); assertEquals(e1, e2); assertEquals(e1.hashCode(), e2.hashCode()); } public void testEquals2() { assertTrue(new Envelope().equals(new Envelope())); assertTrue(new Envelope(1, 2, 1, 2).equals(new Envelope(1, 2, 1, 2))); assertTrue(!new Envelope(1, 2, 1.5, 2).equals(new Envelope(1, 2, 1, 2))); } public void testCopyConstructor() throws Exception { Envelope e1 = new Envelope(1, 2, 3, 4); Envelope e2 = new Envelope(e1); assertEquals(1, e2.getMinX(), 1E-5); assertEquals(2, e2.getMaxX(), 1E-5); assertEquals(3, e2.getMinY(), 1E-5); assertEquals(4, e2.getMaxY(), 1E-5); } public void testGeometryFactoryCreateEnvelope() throws Exception { checkExpectedEnvelopeGeometry("POINT (0 0)"); checkExpectedEnvelopeGeometry("POINT (100 13)"); checkExpectedEnvelopeGeometry("LINESTRING (0 0, 0 10)"); checkExpectedEnvelopeGeometry("LINESTRING (0 0, 10 0)"); String poly10 = "POLYGON ((0 10, 10 10, 10 0, 0 0, 0 10))"; checkExpectedEnvelopeGeometry(poly10); checkExpectedEnvelopeGeometry("LINESTRING (0 0, 10 10)", poly10); checkExpectedEnvelopeGeometry("POLYGON ((5 10, 10 6, 5 0, 0 6, 5 10))", poly10); } void checkExpectedEnvelopeGeometry(String wktInput) throws ParseException { checkExpectedEnvelopeGeometry(wktInput, wktInput); } void checkExpectedEnvelopeGeometry(String wktInput, String wktEnvGeomExpected) throws ParseException { Geometry input = reader.read(wktInput); Geometry envGeomExpected = reader.read(wktEnvGeomExpected); Envelope env = input.getEnvelopeInternal(); Geometry envGeomActual = geometryFactory.toGeometry(env); boolean isEqual = envGeomActual.equalsNorm(envGeomExpected); assertTrue(isEqual); } public void testCompareTo() { checkCompareTo(0, new Envelope(), new Envelope()); checkCompareTo(0, new Envelope(1,2, 1,2), new Envelope(1,2, 1,2)); checkCompareTo(1, new Envelope(2,3, 1,2), new Envelope(1,2, 1,2)); checkCompareTo(-1, new Envelope(1,2, 1,2), new Envelope(2,3, 1,2)); checkCompareTo(1, new Envelope(1,2, 1,3), new Envelope(1,2, 1,2)); checkCompareTo(1, new Envelope(2,3, 1,3), new Envelope(1,3, 1,2)); } public void checkCompareTo(int expected, Envelope env1, Envelope env2) { assertTrue(expected == env1.compareTo(env2)); assertTrue(-expected == env2.compareTo(env1)); } }