/*
* File: SubVectorEvaluatorTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright December 23, 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.learning.function.vector;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import java.util.Random;
import junit.framework.TestCase;
/**
* Unit tests for class SubVectorEvaluator.
*
* @author Justin Basilico
* @since 3.0
*/
public class SubVectorEvaluatorTest
extends TestCase
{
protected Random random;
/**
* Creates a new test.
*
* @param testName The test name.
*/
public SubVectorEvaluatorTest(
String testName)
{
super(testName);
this.random = new Random();
}
/**
* Test of constructors of class SubVectorEvaluator.
*/
public void testConstructors()
{
int inputDimensionality = -1;
int[] subIndices = null;
VectorFactory<?> vectorFactory = VectorFactory.getDefault();
SubVectorEvaluator instance = new SubVectorEvaluator();
assertEquals(inputDimensionality, instance.getInputDimensionality());
assertSame(subIndices, instance.getSubIndices());
assertSame(vectorFactory, instance.getVectorFactory());
inputDimensionality = 23;
subIndices = new int[] { 3, 4, 9 };
instance = new SubVectorEvaluator(inputDimensionality, subIndices);
assertEquals(inputDimensionality, instance.getInputDimensionality());
assertSame(subIndices, instance.getSubIndices());
assertSame(vectorFactory, instance.getVectorFactory());
inputDimensionality = 23;
subIndices = new int[] { 3, 4, 9 };
vectorFactory = VectorFactory.getSparseDefault();
instance = new SubVectorEvaluator(inputDimensionality, subIndices, vectorFactory);
assertEquals(inputDimensionality, instance.getInputDimensionality());
assertSame(subIndices, instance.getSubIndices());
assertSame(vectorFactory, instance.getVectorFactory());
}
/**
* Test of evaluate method, of class SubVectorEvaluator.
*/
public void testEvaluate()
{
SubVectorEvaluator instance = new SubVectorEvaluator();
assertNull(instance.evaluate(null));
// This is a basic functionality test.
instance.setSubIndices(new int[] { 4, 7 });
instance.setInputDimensionality(10);
Vector input = VectorFactory.getDefault().createUniformRandom(
10, -1.0, 1.0, random);
Vector result = instance.evaluate(input);
assertEquals(input.getElement(4), result.getElement(0));
assertEquals(input.getElement(7), result.getElement(1));
// This tests some funny cases, such as having duplicate indices and
// non-monotonic indices.
instance.setSubIndices(new int[] { 4, 7, 3, 3, 6 });
result = instance.evaluate(input);
assertEquals(input.getElement(4), result.getElement(0));
assertEquals(input.getElement(7), result.getElement(1));
assertEquals(input.getElement(3), result.getElement(2));
assertEquals(input.getElement(3), result.getElement(3));
assertEquals(input.getElement(6), result.getElement(4));
}
/**
* Test of getInputDimensionality method, of class SubVectorEvaluator.
*/
public void testGetInputDimensionality()
{
this.testSetInputDimensionality();
}
/**
* Test of setInputDimensionality method, of class SubVectorEvaluator.
*/
public void testSetInputDimensionality()
{
int inputDimensionality = -1;
SubVectorEvaluator instance = new SubVectorEvaluator();
assertEquals(inputDimensionality, instance.getInputDimensionality());
inputDimensionality = 0;
instance.setInputDimensionality(inputDimensionality);
assertEquals(inputDimensionality, instance.getInputDimensionality());
inputDimensionality = 1;
instance.setInputDimensionality(inputDimensionality);
assertEquals(inputDimensionality, instance.getInputDimensionality());
inputDimensionality = 1010109;
instance.setInputDimensionality(inputDimensionality);
assertEquals(inputDimensionality, instance.getInputDimensionality());
inputDimensionality = -1;
instance.setInputDimensionality(inputDimensionality);
assertEquals(inputDimensionality, instance.getInputDimensionality());
}
/**
* Test of getOutputDimensionality method, of class SubVectorEvaluator.
*/
public void testGetOutputDimensionality()
{
SubVectorEvaluator instance = new SubVectorEvaluator();
instance.setSubIndices(new int[] { 2, 4, 9 });
assertEquals(3, instance.getOutputDimensionality());
}
/**
* Test of getSubIndices method, of class SubVectorEvaluator.
*/
public void testGetSubIndices()
{
this.testSetSubIndices();
}
/**
* Test of setSubIndices method, of class SubVectorEvaluator.
*/
public void testSetSubIndices()
{
int[] subIndices = null;
SubVectorEvaluator instance = new SubVectorEvaluator();
assertSame(subIndices, instance.getSubIndices());
subIndices = new int[] { };
instance.setSubIndices(subIndices);
assertSame(subIndices, instance.getSubIndices());
subIndices = new int[] { 4, 5, 9 };
instance.setSubIndices(subIndices);
assertSame(subIndices, instance.getSubIndices());
subIndices = null;
instance.setSubIndices(subIndices);
assertSame(subIndices, instance.getSubIndices());
}
}