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 TestRectangle3 {
018
019    @Test
020    public void testGetSet() {
021        final Rectangle3 rect = new Rectangle3();
022        assertEquals(Vector3.ZERO, rect.getA());
023        assertEquals(Vector3.ZERO, rect.getB());
024        assertEquals(Vector3.ZERO, rect.getC());
025
026        rect.setA(Vector3.ONE);
027        rect.setB(Vector3.UNIT_X);
028        rect.setC(Vector3.UNIT_Z);
029        assertEquals(Vector3.ONE, rect.getA());
030        assertEquals(Vector3.UNIT_X, rect.getB());
031        assertEquals(Vector3.UNIT_Z, rect.getC());
032
033        final Rectangle3 rect2 = new Rectangle3(rect);
034        assertEquals(Vector3.ONE, rect2.getA());
035        assertEquals(Vector3.UNIT_X, rect2.getB());
036        assertEquals(Vector3.UNIT_Z, rect2.getC());
037
038        final Rectangle3 rect3 = new Rectangle3(Vector3.NEG_ONE, Vector3.UNIT_Z, Vector3.NEG_UNIT_Y);
039        assertEquals(Vector3.NEG_ONE, rect3.getA());
040        assertEquals(Vector3.UNIT_Z, rect3.getB());
041        assertEquals(Vector3.NEG_UNIT_Y, rect3.getC());
042    }
043
044    @Test
045    public void testEquals() {
046        // couple of equals validity tests
047        final Rectangle3 rect1 = new Rectangle3();
048        assertEquals(rect1, rect1);
049        assertFalse(rect1.equals(null));
050        assertFalse(rect1.equals(new Vector2()));
051
052        // throw in a couple pool accesses for coverage
053        final Rectangle3 rect2 = Rectangle3.fetchTempInstance();
054        rect2.set(rect1);
055        assertEquals(rect1, rect2);
056        assertNotSame(rect1, rect2);
057        Rectangle3.releaseTempInstance(rect2);
058
059        // cover more of equals
060        assertTrue(rect1.equals(new Rectangle3(Vector3.ZERO, Vector3.ZERO, Vector3.ZERO)));
061        assertFalse(rect1.equals(new Rectangle3(Vector3.ZERO, Vector3.ZERO, Vector3.UNIT_X)));
062        assertFalse(rect1.equals(new Rectangle3(Vector3.ZERO, Vector3.UNIT_X, Vector3.UNIT_X)));
063        assertFalse(rect1.equals(new Rectangle3(Vector3.ZERO, Vector3.UNIT_X, Vector3.ZERO)));
064        assertFalse(rect1.equals(new Rectangle3(Vector3.UNIT_X, Vector3.ZERO, Vector3.ZERO)));
065        assertFalse(rect1.equals(new Rectangle3(Vector3.UNIT_X, Vector3.ZERO, Vector3.UNIT_X)));
066        assertFalse(rect1.equals(new Rectangle3(Vector3.UNIT_X, Vector3.UNIT_X, Vector3.ZERO)));
067        assertFalse(rect1.equals(new Rectangle3(Vector3.UNIT_X, Vector3.UNIT_X, Vector3.UNIT_X)));
068    }
069
070    @Test
071    public void testSimpleHash() {
072        // Just a simple sanity check.
073        final Rectangle3 rect1 = new Rectangle3(Vector3.ZERO, Vector3.UNIT_Y, Vector3.UNIT_X);
074        final Rectangle3 rect2 = new Rectangle3(Vector3.ZERO, Vector3.UNIT_Y, Vector3.UNIT_X);
075        final Rectangle3 rect3 = new Rectangle3(Vector3.ZERO, Vector3.UNIT_Y, Vector3.UNIT_Z);
076
077        assertTrue(rect1.hashCode() == rect2.hashCode());
078        assertTrue(rect1.hashCode() != rect3.hashCode());
079    }
080
081    @Test
082    public void testClone() {
083        final Rectangle3 rect1 = new Rectangle3();
084        final Rectangle3 rect2 = rect1.clone();
085        assertEquals(rect1, rect2);
086        assertNotSame(rect1, rect2);
087    }
088
089    @Test
090    public void testRandom() {
091        MathUtils.setRandomSeed(0);
092        final Rectangle3 rect1 = new Rectangle3();
093        final Vector3 store = rect1.random(null);
094        assertEquals(new Vector3(0.0, 0.0, 0.0), store);
095
096        rect1.setA(new Vector3(1, 0, 0));
097        rect1.setB(new Vector3(1, 1, 0));
098        rect1.setC(new Vector3(0, 1, 0));
099        rect1.random(store);
100        assertEquals(new Vector3(0.39365482330322266, 0.8468815684318542, 0.0), store);
101    }
102}