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}