/*
* File: MultivariateDiscriminantWithBiasTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Oct 3, 2011, 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.Matrix;
import gov.sandia.cognition.math.matrix.MatrixFactory;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
/**
* Tests for class MultivariateDiscriminantWithBiasTest.
* @author krdixon
*/
public class MultivariateDiscriminantWithBiasTest
extends MultivariateDiscriminantTest
{
/**
* Default Constructor
*/
public MultivariateDiscriminantWithBiasTest(
String testName )
{
super( testName );
}
@Override
public MultivariateDiscriminantWithBias createRandom()
{
double A = 1.0;
int M = random.nextInt( 10 ) + 1;
int N = random.nextInt( 10 ) + 1;
Matrix m = MatrixFactory.getDefault().createUniformRandom(M, N, -A, A, random);
Vector b = VectorFactory.getDefault().createUniformRandom(M, -A, A, random);
return new MultivariateDiscriminantWithBias( m, b );
}
/**
* Tests the constructors of class MultivariateDiscriminantWithBiasTest.
*/
@Override
public void testConstructors()
{
System.out.println( "Constructors" );
MultivariateDiscriminantWithBias instance =
new MultivariateDiscriminantWithBias();
assertEquals( 1, instance.getInputDimensionality() );
assertEquals( 1, instance.getOutputDimensionality() );
assertEquals( 1, instance.getDiscriminant().getNumColumns() );
assertEquals( 1, instance.getDiscriminant().getNumRows() );
assertEquals( 1.0, instance.getDiscriminant().getElement(0,0) );
assertEquals( 1, instance.getBias().getDimensionality() );
assertEquals( 0.0, instance.getBias().getElement(0) );
int M = random.nextInt(10)+1;
int N = random.nextInt(10)+1;
instance = new MultivariateDiscriminantWithBias( N, M );
assertEquals( N, instance.getInputDimensionality() );
assertEquals( M, instance.getOutputDimensionality() );
assertEquals( N, instance.getDiscriminant().getNumColumns() );
assertEquals( M, instance.getDiscriminant().getNumRows() );
assertEquals( MatrixFactory.getDefault().createIdentity(M, N),
instance.getDiscriminant() );
assertEquals( VectorFactory.getDefault().createVector(M),
instance.getBias() );
}
/**
* Tests the clone method of class MultivariateDiscriminantWithBiasTest.
*/
@Override
public void testClone()
{
System.out.println( "Clone" );
MultivariateDiscriminantWithBias instance = this.createRandom();
MultivariateDiscriminantWithBias clone = instance.clone();
assertNotSame( instance.getDiscriminant(), clone.getDiscriminant() );
assertNotSame( instance.getBias(), clone.getBias() );
assertEquals( instance.convertToVector(), clone.convertToVector() );
clone.getDiscriminant().setElement(0,0, random.nextGaussian() );
clone.getBias().setElement(0, random.nextGaussian() );
assertFalse( instance.convertToVector().equals( clone.convertToVector() ) );
}
/**
* Test of evaluate method, of class MultivariateDiscriminantWithBias.
*/
@Override
public void testEvaluate()
{
System.out.println("evaluate");
MultivariateDiscriminantWithBias instance = this.createRandom();
Vector input = VectorFactory.getDefault().createUniformRandom(
instance.getInputDimensionality(), -100, 100, random );
Vector expected = instance.getDiscriminant().times( input ).plus(
instance.getBias() );
assertEquals( expected, instance.evaluate(input) );
}
/**
* Test of getBias method, of class MultivariateDiscriminantWithBias.
*/
public void testGetBias()
{
System.out.println("getBias");
MultivariateDiscriminantWithBias instance = this.createRandom();
assertEquals( instance.getOutputDimensionality(),
instance.getBias().getDimensionality() );
}
/**
* Test of setBias method, of class MultivariateDiscriminantWithBias.
*/
public void testSetBias()
{
System.out.println("setBias");
MultivariateDiscriminantWithBias instance = this.createRandom();
Vector bias = VectorFactory.getDefault().createVector(instance.getOutputDimensionality());
instance.setBias(bias);
assertSame( bias, instance.getBias() );
bias = VectorFactory.getDefault().createVector( instance.getOutputDimensionality()+1 );
try
{
instance.setBias(bias);
fail( "Wrong dim" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
/**
* Test of convertToVector method, of class MultivariateDiscriminantWithBias.
*/
@Override
public void testConvertToVector()
{
System.out.println("convertToVector");
MultivariateDiscriminantWithBias instance = this.createRandom();
int M = instance.getOutputDimensionality();
int N = instance.getInputDimensionality();
Vector p = instance.convertToVector();
assertEquals( M*(N+1), p.getDimensionality() );
Vector pd = p.subVector(0, M*N-1);
Vector pb = p.subVector(M*N, M*(N+1)-1 );
assertEquals( instance.getDiscriminant().convertToVector(), pd );
assertEquals( instance.getBias(), pb );
}
}