Project: Archimedes
/**
 * Copyright (c) 2008, 2009 Hugo Corbucci and others.<br> 
 * All rights reserved. This program and the accompanying materials are made available under the 
 * terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html<br> 
 * <br> 
 * Contributors:<br> 
 * Hugo Corbucci - initial API and implementation<br> 
 * <br> 
 * This file was created on 2008/09/18, 01:36:41, by Hugo Corbucci.<br> 
 * It is part of package br.org.archimedes.intersectors on the br.org.archimedes.intersections.tests project.<br> 
 */
package br.org.archimedes.intersectors; 
 
import br.org.archimedes.Tester; 
import br.org.archimedes.arc.Arc; 
import br.org.archimedes.exceptions.InvalidArgumentException; 
import br.org.archimedes.exceptions.NullArgumentException; 
import br.org.archimedes.intersections.interfaces.Intersector; 
import br.org.archimedes.model.Point; 
 
import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Collections; 
 
import static org.junit.Assert.fail; 
 
public class ArcArcIntersectorTest extends Tester { 
 
    Arc baseArc; 
 
    Intersector intersector; 
 
 
    @Before 
    public void setUp () throws NullArgumentException, InvalidArgumentException { 
 
        intersector = new ArcArcIntersector(); 
        baseArc = new Arc(new Point(0.00.0), new Point(1.01.0), new Point( 
                2.00.0)); 
    } 
 
    @Test 
    public void nullArgumentsShouldThrowNullArgumentException () { 
 
        try { 
            intersector.getIntersections(baseArc, null); 
            fail("The otherElement is null and getIntersections should have thrown a NullArgumentException"); 
        } 
        catch (NullArgumentException e) { 
            // Passed 
        } 
        try { 
            intersector.getIntersections(null, baseArc); 
            fail("The element is null and getIntersections should have thrown a NullArgumentException"); 
        } 
        catch (NullArgumentException e) { 
            // Passed 
        } 
        try { 
            intersector.getIntersections(nullnull); 
            fail("Both elements are null and getIntersections should have thrown a NullArgumentException"); 
        } 
        catch (NullArgumentException e) { 
            // Passed 
        } 
        Assert.assertTrue("Threw all exceptions it should throw."true); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(1.00.5), new Point(2.0, -0.5), new Point( 
                3.00.5)); 
 
        assertCollectionTheSame(Collections.emptyList(), intersector 
                .getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(4.00.0), new Point(3.01.0), new Point( 
                1.01.1)); 
 
        assertCollectionTheSame(Collections.emptyList(), intersector 
                .getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(1.00.9), new Point(1.90.1), new Point( 
                2.00.0)); 
 
        assertCollectionTheSame(Collections.emptyList(), intersector 
                .getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(0.02.0), new Point(1.01.0), new Point( 
                2.02.0)); 
 
        assertCollectionTheSame(Collections.singleton(new Point(1.01.0)), 
                intersector.getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(0.00.0), new Point(1.0, -1.0), new Point( 
                2.00.0)); 
 
        Collection<Point> expected = new ArrayList<Point>(); 
        expected.add(new Point(0.00.0)); 
        expected.add(new Point(2.00.0)); 
 
        assertCollectionTheSame(expected, intersector.getIntersections(arc, 
                baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(0.00.0), new Point(1.0, -1.0), new Point( 
                1.0 + Math.sqrt(3) / 2, -0.5)); 
 
        Collection<Point> expected = new ArrayList<Point>(); 
        expected.add(new Point(0.00.0)); 
 
        assertCollectionTheSame(expected, intersector.getIntersections(arc, 
                baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(0.00.0), new Point(1.0, -1.0), new Point( 
                1.01.0)); 
 
        assertCollectionTheSame(Collections.emptyList(), intersector 
                .getIntersections(arc, baseArc)); 
    } 
 
    @Test 
    public void arcCrossesArcReturnsTwoIntersectionPoints () 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(0.01.0), new Point(1.00.0), new Point( 
                2.01.0)); 
 
        Collection<Point> expected = new ArrayList<Point>(); 
        expected.add(new Point(1.0 - Math.sqrt(3.0) / 2.00.5)); 
        expected.add(new Point(1.0 + Math.sqrt(3.0) / 2.00.5)); 
 
        assertCollectionTheSame(expected, intersector.getIntersections(arc, 
                baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(2.02.0), new Point(1.01.0), new Point( 
                1.50.5)); 
 
        assertCollectionTheSame(Collections.singleton(new Point(1.01.0)), 
                intersector.getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(2.00.0), new Point(3.0, -1.0), new Point( 
                4.00.0)); 
 
        assertCollectionTheSame(Collections.singleton(new Point(2.00.0)), 
                intersector.getIntersections(arc, baseArc)); 
    } 
 
    @Test 
            throws NullArgumentException, InvalidArgumentException { 
 
        Arc arc = new Arc(new Point(1 - Math.sqrt(2.0), 1), new Point(1.0
                1 - Math.sqrt(2.0)), new Point(1 + Math.sqrt(2.0), 1)); 
 
        assertCollectionTheSame(Collections.emptyList(), intersector 
                .getIntersections(arc, baseArc)); 
    } 
}