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 TestTriangle { 018 019 @Test 020 public void testGetSet() { 021 final Triangle tri1 = new Triangle(); 022 assertEquals(Vector3.ZERO, tri1.getA()); 023 assertEquals(Vector3.ZERO, tri1.getB()); 024 assertEquals(Vector3.ZERO, tri1.getC()); 025 assertTrue(tri1.getIndex() == 0); 026 027 tri1.setA(Vector3.NEG_ONE); 028 tri1.setB(Vector3.UNIT_X); 029 tri1.setC(Vector3.UNIT_Z); 030 tri1.setIndex(1); 031 assertEquals(Vector3.NEG_ONE, tri1.getA()); 032 assertEquals(Vector3.UNIT_X, tri1.getB()); 033 assertEquals(Vector3.UNIT_Z, tri1.getC()); 034 assertTrue(tri1.getIndex() == 1); 035 036 final Triangle tri2 = new Triangle(tri1); 037 assertEquals(Vector3.NEG_ONE, tri2.getA()); 038 assertEquals(Vector3.UNIT_X, tri2.getB()); 039 assertEquals(Vector3.UNIT_Z, tri2.getC()); 040 assertTrue(tri2.getIndex() == 1); 041 042 final Triangle tri3 = new Triangle(Vector3.ONE, Vector3.UNIT_Y, Vector3.NEG_ONE); 043 assertEquals(Vector3.ONE, tri3.getA()); 044 assertEquals(Vector3.UNIT_Y, tri3.getB()); 045 assertEquals(Vector3.NEG_ONE, tri3.getC()); 046 assertTrue(tri3.getIndex() == 0); 047 048 final Triangle tri4 = new Triangle(Vector3.ONE, Vector3.UNIT_Y, Vector3.NEG_ONE, 42); 049 assertEquals(Vector3.ONE, tri4.getA()); 050 assertEquals(Vector3.UNIT_Y, tri4.getB()); 051 assertEquals(Vector3.NEG_ONE, tri4.getC()); 052 assertTrue(tri4.getIndex() == 42); 053 054 tri2.set(0, Vector3.UNIT_X); 055 tri2.set(1, Vector3.UNIT_Y); 056 tri2.set(2, Vector3.UNIT_Z); 057 058 // catch a few expected exceptions 059 try { 060 tri2.get(3); 061 fail("get(3) should have thrown IllegalArgumentException."); 062 } catch (final IllegalArgumentException e) { 063 } 064 try { 065 tri2.get(-1); 066 fail("get(-1) should have thrown IllegalArgumentException."); 067 } catch (final IllegalArgumentException e) { 068 } 069 try { 070 tri2.set(-1, Vector3.ZERO); 071 fail("set(-1, 0) should have thrown IllegalArgumentException."); 072 } catch (final IllegalArgumentException e) { 073 } 074 try { 075 tri2.set(3, Vector3.ZERO); 076 fail("set(3, 0) should have thrown IllegalArgumentException."); 077 } catch (final IllegalArgumentException e) { 078 } 079 080 // shouldn't have changed 081 assertEquals(Vector3.UNIT_X, tri2.get(0)); 082 assertEquals(Vector3.UNIT_Y, tri2.get(1)); 083 assertEquals(Vector3.UNIT_Z, tri2.get(2)); 084 } 085 086 @Test 087 public void testEquals() { 088 // couple of equals validity tests 089 final Triangle tri1 = new Triangle(); 090 assertEquals(tri1, tri1); 091 assertFalse(tri1.equals(null)); 092 assertFalse(tri1.equals(new Vector2())); 093 094 // throw in a couple pool accesses for coverage 095 final Triangle tri2 = Triangle.fetchTempInstance(); 096 tri2.set(tri1); 097 assertEquals(tri1, tri2); 098 assertNotSame(tri1, tri2); 099 Triangle.releaseTempInstance(tri2); 100 101 // cover more of equals 102 assertTrue(tri1.equals(new Triangle(Vector3.ZERO, Vector3.ZERO, Vector3.ZERO))); 103 assertFalse(tri1.equals(new Triangle(Vector3.ZERO, Vector3.ZERO, Vector3.UNIT_X))); 104 assertFalse(tri1.equals(new Triangle(Vector3.ZERO, Vector3.UNIT_X, Vector3.UNIT_X))); 105 assertFalse(tri1.equals(new Triangle(Vector3.ZERO, Vector3.UNIT_X, Vector3.ZERO))); 106 assertFalse(tri1.equals(new Triangle(Vector3.UNIT_X, Vector3.ZERO, Vector3.ZERO))); 107 assertFalse(tri1.equals(new Triangle(Vector3.UNIT_X, Vector3.ZERO, Vector3.UNIT_X))); 108 assertFalse(tri1.equals(new Triangle(Vector3.UNIT_X, Vector3.UNIT_X, Vector3.ZERO))); 109 assertFalse(tri1.equals(new Triangle(Vector3.UNIT_X, Vector3.UNIT_X, Vector3.UNIT_X))); 110 } 111 112 @Test 113 public void testValid() { 114 final Triangle vec1 = new Triangle(); 115 final Triangle vec2 = new Triangle(new Vector3(0, 0, Double.NaN), Vector3.ZERO, Vector3.ZERO); 116 final Triangle vec3 = new Triangle(Vector3.ZERO, new Vector3(0, 0, Double.NaN), Vector3.ZERO); 117 final Triangle vec4 = new Triangle(Vector3.ZERO, Vector3.ZERO, new Vector3(0, 0, Double.NaN)); 118 119 assertTrue(Triangle.isValid(vec1)); 120 assertFalse(Triangle.isValid(vec2)); 121 assertFalse(Triangle.isValid(vec3)); 122 assertFalse(Triangle.isValid(vec4)); 123 124 vec4.setC(Vector3.ZERO); 125 assertTrue(Triangle.isValid(vec4)); 126 127 assertFalse(Triangle.isValid(null)); 128 } 129 130 @Test 131 public void testSimpleHash() { 132 // Just a simple sanity check. 133 final Triangle tri1 = new Triangle(Vector3.ZERO, Vector3.UNIT_Y, Vector3.NEG_ONE, 1); 134 final Triangle tri2 = new Triangle(Vector3.ZERO, Vector3.UNIT_Y, Vector3.NEG_ONE, 1); 135 final Triangle tri3 = new Triangle(Vector3.ZERO, Vector3.UNIT_Z, Vector3.NEG_ONE, 2); 136 137 assertTrue(tri1.hashCode() == tri2.hashCode()); 138 assertTrue(tri1.hashCode() != tri3.hashCode()); 139 } 140 141 @Test 142 public void testClone() { 143 final Triangle tri1 = new Triangle(); 144 final Triangle tri2 = tri1.clone(); 145 assertEquals(tri1, tri2); 146 assertNotSame(tri1, tri2); 147 } 148 149 @Test 150 public void testCenter() { 151 final Triangle tri1 = new Triangle(Vector3.ZERO, Vector3.UNIT_Y, Vector3.UNIT_X, 0); 152 assertEquals(new Vector3(1 / 3., 1 / 3., 0), tri1.getCenter()); // dirty 153 assertEquals(new Vector3(1 / 3., 1 / 3., 0), tri1.getCenter()); // clean 154 tri1.setA(Vector3.ONE); 155 assertEquals(new Vector3(2 / 3., 2 / 3., 1 / 3.), tri1.getCenter()); // dirty, but with existing center 156 } 157 158 @Test 159 public void testNormal() { 160 final Triangle tri1 = new Triangle(Vector3.ZERO, Vector3.UNIT_Y, Vector3.UNIT_X, 0); 161 assertEquals(new Vector3(0, 0, -1), tri1.getNormal()); // dirty 162 assertEquals(new Vector3(0, 0, -1), tri1.getNormal()); // clean 163 tri1.setB(Vector3.UNIT_Z); 164 assertEquals(new Vector3(0, 1, 0), tri1.getNormal()); // dirty, but with existing normal 165 } 166}