/* * File: VectorUtilTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright March 16, 2009, Sandia Corporation. * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive * license for use of this work by or on behalf of the U.S. Government. Export * of this program may require a license from the United States Government. * See CopyrightHistory.txt for complete details. * */ package gov.sandia.cognition.math.matrix; import gov.sandia.cognition.math.matrix.mtj.Vector2; import gov.sandia.cognition.math.matrix.mtj.Vector3; import junit.framework.TestCase; /** * Unit tests for class VectorUtil. * * @author Justin Basilico * @since 3.0 */ public class VectorUtilTest extends TestCase { /** * Creates a new test. * * @param testName The test name. */ public VectorUtilTest( String testName) { super(testName); } public void testConstructor() { System.out.println( "Constructor" ); VectorUtil vu = new VectorUtil(); assertNotNull( vu ); } /** * Test of safeGetDimensionality method, of class VectorUtil. */ public void testSafeGetDimensionality_Vectorizable() { Vectorizable vector = null; int dimensionality = -1; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); vector = new Vector2(); dimensionality = 2; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); vector = new Vector3(); dimensionality = 3; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); } /** * Test of safeGetDimensionality method, of class VectorUtil. */ public void testSafeGetDimensionality_Vector() { Vector vector = null; int dimensionality = -1; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); vector = new Vector2(); dimensionality = 2; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); vector = new Vector3(); dimensionality = 3; assertEquals(dimensionality, VectorUtil.safeGetDimensionality(vector)); } /** * Test of divideByNorm1 method, of class VectorUtil. */ public void testDivideByNorm1() { Vector input = new Vector2(); Vector inputCopy = input.clone(); Vector result = VectorUtil.divideByNorm1(input); assertEquals(input, result); assertNotSame(input, result); assertEquals(inputCopy, input); input = new Vector2(1.0, 0.0); inputCopy = input.clone(); result = VectorUtil.divideByNorm1(input); assertEquals(input, result); assertNotSame(input, result); assertEquals(inputCopy, input); input = new Vector3(1.0, 3.0, 0.0); inputCopy = input.clone(); result = VectorUtil.divideByNorm1(input); assertEquals(new Vector3(0.25, 0.75, 0.0), result); assertNotSame(input, result); assertEquals(inputCopy, input); } /** * Test of divideByNorm1Equals method, of class VectorUtil. */ public void testDivideByNorm1Equals() { Vector input = new Vector2(); Vector expected = input.clone(); VectorUtil.divideByNorm1Equals(input); assertEquals(expected, input); input = new Vector2(1.0, 0.0); expected = input.clone(); VectorUtil.divideByNorm1Equals(input); assertEquals(expected, input); input = new Vector3(1.0, 3.0, 0.0); expected = new Vector3(0.25, 0.75, 0.0); VectorUtil.divideByNorm1Equals(input); assertEquals(expected, input); } /** * Test of divideByNorm1 method, of class VectorUtil. */ public void testDivideByNorm2() { Vector input = new Vector2(); Vector inputCopy = input.clone(); Vector result = VectorUtil.divideByNorm2(input); assertEquals(input, result); assertNotSame(input, result); assertEquals(inputCopy, input); input = new Vector2(1.0, 0.0); inputCopy = input.clone(); result = VectorUtil.divideByNorm2(input); assertEquals(input, result); assertNotSame(input, result); assertEquals(inputCopy, input); input = new Vector3(-1.0, 3.0, 0.0); inputCopy = input.clone(); result = VectorUtil.divideByNorm2(input); assertEquals(new Vector3(-1 / Math.sqrt(10), 3 / Math.sqrt(10), 0.0), result); assertNotSame(input, result); assertEquals(inputCopy, input); } /** * Test of divideByNorm2Equals method, of class VectorUtil. */ public void testDivideByNorm2Equals() { Vector input = new Vector2(); Vector expected = input.clone(); VectorUtil.divideByNorm2Equals(input); assertEquals(expected, input); input = new Vector2(1.0, 0.0); expected = input.clone(); VectorUtil.divideByNorm2Equals(input); assertEquals(expected, input); input = new Vector3(-1.0, 3.0, 0.0); expected = new Vector3(-1 / Math.sqrt(10), 3 / Math.sqrt(10), 0.0); VectorUtil.divideByNorm2Equals(input); assertEquals(expected, input); } /** * Test of interpolateLinear method, of class VectorUtil. */ public void testInterpolateLinear() { double epsilon = 1e-10; Vector first = new Vector3(3.0, 1.0, 0.0); Vector second = new Vector3(3.0, 2.0, -4.0); double alpha; Vector expected; Vector result; alpha = 0.0; expected = first.clone(); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 0.1; expected = new Vector3(3.0, 1.1, -0.4); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 0.2; expected = new Vector3(3.0, 1.2, -0.8); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 0.5; expected = new Vector3(3.0, 1.5, -2.0); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 0.8; expected = new Vector3(3.0, 1.8, -3.2); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 0.9; expected = new Vector3(3.0, 1.9, -3.6); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 1.0; expected = new Vector3(3.0, 2.0, -4.0); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); // Boundry cases. alpha = -0.1; expected = new Vector3(3.0, 1.0, 0.0); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); alpha = 1.1; expected = new Vector3(3.0, 2.0, -4.0); result = VectorUtil.interpolateLinear(first, second, alpha); assertTrue(expected.equals(result, epsilon)); } }