package com.revolsys.geometry.test.old.geom;
import org.junit.Assert;
import org.junit.Test;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.geometry.model.LineString;
import com.revolsys.geometry.model.Point;
import com.revolsys.geometry.model.Polygon;
/**
* Test spatial predicate optimizations for rectangles.
*
* @version 1.7
*/
public class RectanglePredicateTest {
GeometryFactory geometryFactory = GeometryFactory.DEFAULT_3D;
private void runRectanglePred(final Geometry rect, final Geometry testGeom) {
final boolean intersectsValue = rect.intersects(testGeom);
final boolean relateIntersectsValue = rect.relate(testGeom).isIntersects();
final boolean intersectsOK = intersectsValue == relateIntersectsValue;
final boolean containsValue = rect.contains(testGeom);
final boolean relateContainsValue = rect.relate(testGeom).isContains();
final boolean containsOK = containsValue == relateContainsValue;
Assert.assertTrue("intersects", intersectsOK);
Assert.assertTrue("contains", containsOK);
}
@Test
public void testAngleOnBoundary() throws Exception {
final Polygon polygon = this.geometryFactory.polygon(2, 10.0, 10, 30, 10, 30, 30, 10, 30, 10,
10);
final LineString line = this.geometryFactory.lineString(2, 10.0, 30, 10, 10, 30, 10);
runRectanglePred(polygon, line);
}
@Test
public void testPointInPolygonBoundaryXAxis() {
final Polygon polygon = this.geometryFactory.polygon(2, 0.0, 0, 100, 0, 100, 100, 0, 100, 0, 0);
final Point point = this.geometryFactory.point(50, 100);
Assert.assertTrue("intersects", polygon.intersects(point));
Assert.assertFalse("contains", polygon.contains(point));
Assert.assertTrue("covers", polygon.covers(point));
Assert.assertTrue("coveredBy", point.coveredBy(polygon));
}
@Test
public void testPointInPolygonBoundaryYAxis() {
final Polygon polygon = this.geometryFactory.polygon(2, 0.0, 0, 100, 0, 100, 100, 0, 100, 0, 0);
final Point point = this.geometryFactory.point(100, 50);
Assert.assertTrue("intersects", polygon.intersects(point));
Assert.assertFalse("contains", polygon.contains(point));
Assert.assertTrue("covers", polygon.covers(point));
Assert.assertTrue("coveredBy", point.coveredBy(polygon));
}
@Test
public void testShortAngleOnBoundary() throws Exception {
final Polygon polygon = this.geometryFactory.polygon(2, 10.0, 10, 30, 10, 30, 30, 10, 30, 10,
10);
final LineString line = this.geometryFactory.lineString(2, 10.0, 25, 10, 10, 25, 10);
runRectanglePred(polygon, line);
}
}