/*
* File: LinearVectorScalarFunctionTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright December 3, 2007, 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.scalar;
import gov.sandia.cognition.math.matrix.DimensionalityMismatchException;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
import gov.sandia.cognition.math.matrix.mtj.Vector3;
import java.util.Random;
import junit.framework.TestCase;
/**
* This class implements JUnit tests for the following classes:
*
* LinearVectorScalarFunction
*
* @author Justin Basilico
*/
public class LinearVectorScalarFunctionTest
extends TestCase
{
public final Random RANDOM = new Random(1);
public LinearVectorScalarFunctionTest(
String testName)
{
super(testName);
}
public void testConstants()
{
assertEquals(0.0, LinearVectorScalarFunction.DEFAULT_BIAS);
}
public void testConstructors()
{
LinearVectorScalarFunction instance = new LinearVectorScalarFunction();
assertNull(instance.getWeights());
assertEquals(0.0, instance.getBias());
Vector weights = Vector3.createRandom(RANDOM);
double bias = RANDOM.nextGaussian();
instance = new LinearVectorScalarFunction(weights, bias);
assertEquals(weights, instance.getWeights());
assertEquals(bias, instance.getBias());
LinearVectorScalarFunction copy = new LinearVectorScalarFunction(instance);
assertEquals(instance.getWeights(), copy.getWeights());
assertNotSame(instance.getWeights(), copy.getWeights());
assertEquals(instance.getBias(), copy.getBias());
instance = new LinearVectorScalarFunction();
copy = new LinearVectorScalarFunction(instance);
assertEquals(instance.getWeights(), copy.getWeights());
assertNull(copy.getWeights());
assertEquals(instance.getBias(), copy.getBias());
}
/**
* Test of clone method, of class LinearVectorScalarFunction.
*/
public void testClone()
{
LinearVectorScalarFunction instance = new LinearVectorScalarFunction(
new Vector3(1.0, 0.0, -2.0), 4.0);
LinearVectorScalarFunction clone = instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getWeights(), clone.getWeights());
assertEquals(instance.getBias(), clone.getBias());
instance = new LinearVectorScalarFunction();
clone = instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getWeights(), clone.getWeights());
assertEquals(instance.getBias(), clone.getBias());
}
/**
* Test of evaluate method, of class LinearVectorScalarFunction.
*/
public void testEvaluate()
{
LinearVectorScalarFunction instance = new LinearVectorScalarFunction(
new Vector3(1.0, 0.0, -2.0), 4.0);
Vector input = new Vector3(1.0, 1.0, 1.0);
double output = 3.0;
assertEquals(output, instance.evaluate(input));
input = new Vector3(0.0, 7.0, 3.0);
output = -2.0;
assertEquals(output, instance.evaluate(input));
input = new Vector3(0.0, 0.0, 0.0);
output = 4.0;
assertEquals(output, instance.evaluate(input));
boolean exceptionThrown = false;
try
{
instance.evaluate(null);
}
catch ( NullPointerException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
exceptionThrown = false;
try
{
instance.evaluate(new Vector2(1.0, 2.0));
}
catch ( DimensionalityMismatchException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
}
/**
* Test of evaluateAsDouble method, of class LinearVectorScalarFunction.
*/
public void testEvaluateAsDouble()
{
LinearVectorScalarFunction instance = new LinearVectorScalarFunction(
new Vector3(1.0, 0.0, -2.0), 4.0);
Vector input = new Vector3(1.0, 1.0, 1.0);
double output = 3.0;
assertEquals(output, instance.evaluateAsDouble(input));
input = new Vector3(0.0, 7.0, 3.0);
output = -2.0;
assertEquals(output, instance.evaluateAsDouble(input));
input = new Vector3(0.0, 0.0, 0.0);
output = 4.0;
assertEquals(output, instance.evaluateAsDouble(input));
boolean exceptionThrown = false;
try
{
instance.evaluateAsDouble(null);
}
catch ( NullPointerException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
exceptionThrown = false;
try
{
instance.evaluateAsDouble(new Vector2(1.0, 2.0));
}
catch ( DimensionalityMismatchException e )
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
instance = new LinearVectorScalarFunction();
assertEquals(0.0, instance.evaluateAsDouble(input), 0.0);
instance.setBias(3.4);
assertEquals(3.4, instance.evaluateAsDouble(input), 0.0);
}
/**
* Test of getWeights method, of class LinearVectorScalarFunction.
*/
public void testGetWeights()
{
this.testSetWeights();
}
/**
* Test of setWeights method, of class LinearVectorScalarFunction.
*/
public void testSetWeights()
{
Vector weights = null;
LinearVectorScalarFunction instance = new LinearVectorScalarFunction();
assertNull(instance.getWeights());
weights = new Vector3();
instance.setWeights(weights);
assertSame(weights, instance.getWeights());
weights = Vector3.createRandom(RANDOM);
instance.setWeights(weights);
assertSame(weights, instance.getWeights());
weights = null;
instance.setWeights(weights);
assertNull(weights);
}
/**
* Test of getBias method, of class LinearVectorScalarFunction.
*/
public void testGetBias()
{
this.testSetBias();
}
/**
* Test of setBias method, of class LinearVectorScalarFunction.
*/
public void testSetBias()
{
double bias = 0.0;
LinearVectorScalarFunction instance = new LinearVectorScalarFunction();
assertEquals(bias, instance.getBias());
bias = 4.0;
instance.setBias(bias);
assertEquals(bias, instance.getBias());
bias = -7.0;
instance.setBias(bias);
assertEquals(bias, instance.getBias());
bias = 0.0;
instance.setBias(bias);
assertEquals(bias, instance.getBias());
}
/**
* Test of toString method, of class LinearVectorScalarFunction.
*/
public void testToString()
{
LinearVectorScalarFunction instance = new LinearVectorScalarFunction();
assertNotNull(instance.toString());
}
}