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 TestRing {
018
019    @Test
020    public void testGetSet() {
021        final Ring ring = new Ring();
022        assertEquals(Vector3.ZERO, ring.getCenter());
023        assertEquals(Vector3.UNIT_Y, ring.getUp());
024        assertTrue(ring.getInnerRadius() == 0.0);
025        assertTrue(ring.getOuterRadius() == 1.0);
026
027        ring.setCenter(Vector3.ONE);
028        ring.setUp(Vector3.UNIT_X);
029        ring.setInnerRadius(1.5);
030        ring.setOuterRadius(3.0);
031        assertEquals(Vector3.ONE, ring.getCenter());
032        assertEquals(Vector3.UNIT_X, ring.getUp());
033        assertTrue(ring.getInnerRadius() == 1.5);
034        assertTrue(ring.getOuterRadius() == 3.0);
035
036        final Ring ring2 = new Ring(ring);
037        assertEquals(Vector3.ONE, ring2.getCenter());
038        assertEquals(Vector3.UNIT_X, ring2.getUp());
039        assertTrue(ring2.getInnerRadius() == 1.5);
040        assertTrue(ring2.getOuterRadius() == 3.0);
041
042        final Ring ring3 = new Ring(Vector3.NEG_ONE, Vector3.UNIT_Z, 12.0, 42.0);
043        assertEquals(Vector3.NEG_ONE, ring3.getCenter());
044        assertEquals(Vector3.UNIT_Z, ring3.getUp());
045        assertTrue(ring3.getInnerRadius() == 12.0);
046        assertTrue(ring3.getOuterRadius() == 42.0);
047    }
048
049    @Test
050    public void testValid() {
051        assertTrue(Ring.isValid(new Ring()));
052        assertFalse(Ring.isValid(null));
053        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, Double.NaN)));
054        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, Double.POSITIVE_INFINITY)));
055        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, Vector3.UNIT_Y, Double.NaN, 1.0)));
056        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, Vector3.UNIT_Y, Double.NEGATIVE_INFINITY, 1.0)));
057        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, new Vector3(Double.NaN, 0, 0), 0.0, 1.0)));
058        assertFalse(Ring.isValid(new Ring(Vector3.ZERO, new Vector3(Double.POSITIVE_INFINITY, 0, 0), 0.0, 1.0)));
059        assertFalse(Ring.isValid(new Ring(new Vector3(Double.NaN, 0, 0), Vector3.UNIT_Y, 0.0, 1.0)));
060        assertFalse(Ring.isValid(new Ring(new Vector3(Double.NEGATIVE_INFINITY, 0, 0), Vector3.UNIT_Y, 0.0, 1.0)));
061
062        // couple of equals validity tests
063        final Ring ring1 = new Ring();
064        assertEquals(ring1, ring1);
065        assertFalse(ring1.equals(null));
066        assertFalse(ring1.equals(new Vector2()));
067
068        // throw in a couple pool accesses for coverage
069        final Ring ring2 = Ring.fetchTempInstance();
070        ring2.set(ring1);
071        assertEquals(ring1, ring2);
072        assertNotSame(ring1, ring2);
073        Ring.releaseTempInstance(ring2);
074
075        // cover more of equals
076        assertFalse(ring1.equals(new Ring(Vector3.UNIT_X, Vector3.UNIT_X, -1.0, 2.0)));
077        assertFalse(ring1.equals(new Ring(Vector3.UNIT_X, Vector3.UNIT_X, -1.0, 1.0)));
078        assertFalse(ring1.equals(new Ring(Vector3.UNIT_X, Vector3.UNIT_X, 0.0, 1.0)));
079        assertFalse(ring1.equals(new Ring(Vector3.UNIT_X, Vector3.UNIT_Y, 0.0, 1.0)));
080        assertTrue(ring1.equals(new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, 1.0)));
081    }
082
083    @Test
084    public void testSimpleHash() {
085        // Just a simple sanity check.
086        final Ring ring1 = new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, 2.0);
087        final Ring ring2 = new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, 2.0);
088        final Ring ring3 = new Ring(Vector3.ZERO, Vector3.UNIT_Y, 0.0, 3.0);
089
090        assertTrue(ring1.hashCode() == ring2.hashCode());
091        assertTrue(ring1.hashCode() != ring3.hashCode());
092    }
093
094    @Test
095    public void testClone() {
096        final Ring ring1 = new Ring();
097        final Ring ring2 = ring1.clone();
098        assertEquals(ring1, ring2);
099        assertNotSame(ring1, ring2);
100    }
101
102    @Test
103    public void testRandom() {
104        MathUtils.setRandomSeed(0);
105        final Ring ring1 = new Ring();
106        final Vector3 store = ring1.random(null);
107        assertEquals(new Vector3(0.7454530390475868, 0.0, -0.4186496466746111), store);
108
109        ring1.setUp(Vector3.UNIT_X);
110        ring1.random(store);
111        assertEquals(new Vector3(0.0, 0.30386186434027496, -0.3849731927481824), store);
112    }
113}