001/**
002 * Copyright (c) 2008-2014 Ardor Labs, Inc.
003 *
004 * This file is part of Ardor3D.
005 *
006 * Ardor3D is free software: you can redistribute it and/or modify it 
007 * under the terms of its license which may be found in the accompanying
008 * LICENSE file or at <http://www.ardor3d.com/LICENSE>.
009 */
010
011package com.ardor3d.math;
012
013import static org.junit.Assert.*;
014
015import org.junit.Test;
016
017public class TestLine3 {
018
019    @Test
020    public void testGetSet() {
021        final Line3 line1 = new Line3();
022        assertEquals(Vector3.ZERO, line1.getOrigin());
023        assertEquals(Vector3.UNIT_Z, line1.getDirection());
024
025        line1.setOrigin(Vector3.NEG_ONE);
026        line1.setDirection(Vector3.UNIT_X);
027        assertEquals(Vector3.NEG_ONE, line1.getOrigin());
028        assertEquals(Vector3.UNIT_X, line1.getDirection());
029
030        final Line3 line2 = new Line3(line1);
031        assertEquals(Vector3.NEG_ONE, line2.getOrigin());
032        assertEquals(Vector3.UNIT_X, line2.getDirection());
033
034        final Line3 line3 = new Line3(Vector3.ONE, Vector3.UNIT_Y);
035        assertEquals(Vector3.ONE, line3.getOrigin());
036        assertEquals(Vector3.UNIT_Y, line3.getDirection());
037    }
038
039    @Test
040    public void testEquals() {
041        // couple of equals validity tests
042        final Line3 line1 = new Line3();
043        assertEquals(line1, line1);
044        assertFalse(line1.equals(null));
045        assertFalse(line1.equals(new Vector2()));
046
047        // throw in a couple pool accesses for coverage
048        final Line3 line2 = Line3.fetchTempInstance();
049        line2.set(line1);
050        assertEquals(line1, line2);
051        assertNotSame(line1, line2);
052        Line3.releaseTempInstance(line2);
053
054        // cover more of equals
055        assertFalse(line1.equals(new Line3(Vector3.ZERO, Vector3.UNIT_X)));
056    }
057
058    @Test
059    public void testSimpleHash() {
060        // Just a simple sanity check.
061        final Line3 line1 = new Line3(Vector3.ZERO, Vector3.UNIT_Y);
062        final Line3 line2 = new Line3(Vector3.ZERO, Vector3.UNIT_Y);
063        final Line3 line3 = new Line3(Vector3.ZERO, Vector3.UNIT_Z);
064
065        assertTrue(line1.hashCode() == line2.hashCode());
066        assertTrue(line1.hashCode() != line3.hashCode());
067    }
068
069    @Test
070    public void testClone() {
071        final Line3 line1 = new Line3();
072        final Line3 line2 = line1.clone();
073        assertEquals(line1, line2);
074        assertNotSame(line1, line2);
075    }
076
077    @Test
078    public void testValid() {
079        final Line3 line1 = new Line3();
080        final Line3 line2 = new Line3(new Vector3(Double.NaN, 0, 0), Vector3.UNIT_Z);
081        final Line3 line3 = new Line3(Vector3.ZERO, new Vector3(Double.NaN, 0, 0));
082
083        assertTrue(Line3.isValid(line1));
084        assertFalse(Line3.isValid(line2));
085        assertFalse(Line3.isValid(line3));
086
087        line2.setOrigin(Vector3.ZERO);
088        assertTrue(Line3.isValid(line2));
089
090        assertFalse(Line3.isValid(null));
091    }
092
093    @Test
094    public void testDistance() {
095        final Line3 line1 = new Line3(Vector3.ZERO, Vector3.UNIT_Z);
096        final Vector3 store = new Vector3();
097        assertTrue(0.0 == line1.distanceSquared(new Vector3(0, 0, 5), store));
098        assertTrue(16.0 == line1.distanceSquared(new Vector3(0, 4, 1), store));
099        assertEquals(Vector3.UNIT_Z, store);
100        assertTrue(9.0 == line1.distanceSquared(new Vector3(0, -3, -1), store));
101        assertEquals(Vector3.NEG_UNIT_Z, store);
102        assertTrue(1.0 == line1.distanceSquared(Vector3.NEG_UNIT_X, null));
103    }
104
105}