package com.github.davidmoten.rtree.geometry; import static com.github.davidmoten.rtree.geometry.Geometries.circle; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; public class CircleTest { private static final double PRECISION = 0.000001; @Test public void testCoordinates() { Circle circle = circle(1, 2, 3); assertEquals(1, circle.x(), PRECISION); assertEquals(2, circle.y(), PRECISION); } @Test public void testDistance() { Circle circle = circle(0, 0, 1); Rectangle r = Geometries.rectangle(1, 1, 2, 2); assertEquals(Math.sqrt(2) - 1, circle.distance(r), PRECISION); } @Test public void testMbr() { Circle circle = circle(1, 2, 3); Rectangle r = Geometries.rectangle(-2, -1, 4, 5); assertEquals(r, circle.mbr()); } @Test public void testEquality() { Circle circle1 = circle(1, 2, 3); Circle circle2 = circle(1, 2, 3); assertEquals(circle1, circle2); } @Test public void testInequalityRadius() { Circle circle1 = circle(1, 2, 3); Circle circle2 = circle(1, 2, 4); assertNotEquals(circle1, circle2); } @Test public void testInequalityX() { Circle circle1 = circle(1, 2, 3); Circle circle2 = circle(2, 2, 3); assertNotEquals(circle1, circle2); } @Test public void testInequalityY() { Circle circle1 = circle(1, 2, 3); Circle circle2 = circle(1, 3, 3); assertNotEquals(circle1, circle2); } @Test public void testInequalityWithNull() { Circle circle = circle(1, 2, 3); assertFalse(circle.equals(null)); } @Test public void testHashCode() { Circle circle = circle(1, 2, 3); assertEquals(1606448223, circle.hashCode()); } @Test public void testDistanceIsZeroWhenIntersects() { Circle circle = circle(0, 0, 1); assertTrue(circle.distance(Geometries.rectangle(0, 1, 0, 1)) == 0); } @Test public void testIntersects2() { Circle circle = circle(0, 0, 1); assertTrue(circle.distance(Geometries.rectangle(0, 1.1, 0, 1.1)) != 0); } @Test public void testIntersects3() { Circle circle = circle(0, 0, 1); assertTrue(circle.distance(Geometries.rectangle(1, 1, 1, 1)) != 0); } @Test public void testIntersectsReturnsTrue() { assertTrue(circle(0, 0, 1).intersects(Geometries.rectangle(0, 0, 1, 1))); } @Test public void testIntersectsReturnsFalse() { assertFalse(circle(0, 0, 1).intersects(Geometries.rectangle(10, 10, 11, 11))); } @Test public void testIntersects() { Circle a = circle(0, 0, 1); Circle b = circle(0.1, 0.1, 1); assertTrue(Intersects.circleIntersectsCircle.call(a, b)); } @Test public void testDoNotIntersect() { Circle a = circle(0, 0, 1); Circle b = circle(100, 100, 1); assertFalse(Intersects.circleIntersectsCircle.call(a, b)); } @Test public void testIntersectsPoint() { assertTrue(circle(0, 0, 1).intersects(Geometries.point(0, 0))); } @Test public void testDoesNotIntersectPoint() { assertFalse(circle(0, 0, 1).intersects(Geometries.point(100, 100))); } }