package org.iplantc.phyloviewer.shared.math; import java.util.ArrayList; import java.util.Iterator; import junit.framework.TestCase; import org.iplantc.phyloviewer.shared.math.AnnularSector; import org.iplantc.phyloviewer.shared.math.PolarVector2; import org.junit.Test; public class TestAnnularSector extends TestCase { @Test public void testExpandByPoint() { double r0 = 1.0; double a0 = Math.PI / 4; AnnularSector sector = new AnnularSector(new PolarVector2(r0,a0)); assertEquals(r0, sector.getMin().getRadius()); assertEquals(r0, sector.getMax().getRadius()); assertEquals(a0, sector.getMin().getAngle()); assertEquals(a0, sector.getMax().getAngle()); assertTrue(sector.isValid()); double r1 = 2.0; double a1 = Math.PI / 8; sector.expandBy(new PolarVector2(r1,a1)); assertEquals(r0, sector.getMin().getRadius()); assertEquals(r1, sector.getMax().getRadius()); assertEquals(a1, sector.getMin().getAngle()); assertEquals(a0, sector.getMax().getAngle()); assertTrue(sector.isValid()); double r2 = 0.5; double a2 = Math.PI / 2; sector.expandBy(new PolarVector2(r2,a2)); assertEquals(r2, sector.getMin().getRadius()); assertEquals(r1, sector.getMax().getRadius()); assertEquals(a1, sector.getMin().getAngle()); assertEquals(a2, sector.getMax().getAngle()); assertTrue(sector.isValid()); double r3 = 11.0; double a3 = 3 * Math.PI / 2; sector.expandBy(new PolarVector2(r3,a3)); assertEquals(r2, sector.getMin().getRadius()); assertEquals(r3, sector.getMax().getRadius()); assertEquals(a1, sector.getMin().getAngle()); assertEquals(a3, sector.getMax().getAngle()); assertTrue(sector.isValid()); double r4 = 0.0; double a4 = 0.0; sector.expandBy(new PolarVector2(r4,a4)); assertEquals(r4, sector.getMin().getRadius()); assertEquals(r3, sector.getMax().getRadius()); assertEquals(a4, sector.getMin().getAngle()); assertEquals(a3, sector.getMax().getAngle()); assertTrue(sector.isValid()); } @Test public void testContains() { AnnularSector sector = new AnnularSector(new PolarVector2(1.0,Math.PI / 4)); ArrayList<PolarVector2> pointsOutside = new ArrayList<PolarVector2>(); pointsOutside.add(new PolarVector2(2.0,Math.PI / 8)); pointsOutside.add(new PolarVector2(0.5,Math.PI / 2)); pointsOutside.add(new PolarVector2(11.0,3 * Math.PI / 2)); pointsOutside.add(new PolarVector2(0.0,0.0)); ArrayList<PolarVector2> pointsInside = new ArrayList<PolarVector2>(); Iterator<PolarVector2> iterator = pointsOutside.iterator(); while (iterator.hasNext()) { PolarVector2 point = iterator.next(); sector.expandBy(point); pointsInside.add(point); iterator.remove(); for (PolarVector2 outside : pointsOutside) { assertFalse(sector.contains(outside)); } for (PolarVector2 inside : pointsInside) { assertTrue(sector.contains(inside)); } } } @Test public void testCartesionBounds() { AnnularSector sector = new AnnularSector(new PolarVector2(0.25,0),new PolarVector2(0.5,Math.PI / 2.0)); Box2D box = sector.cartesianBounds(); final double EPSILON = 0.000001; assertEquals(0.0,box.getMin().getX(),EPSILON); assertEquals(0.0,box.getMin().getY(),EPSILON); assertEquals(0.5,box.getMax().getX(),EPSILON); assertEquals(0.5,box.getMax().getY(),EPSILON); } }