/*
* File: LinearDiscriminantWithBiasTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Sep 30, 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.scalar;
import junit.framework.TestCase;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import java.util.Random;
/**
* Tests for class LinearDiscriminantWithBiasTest.
* @author krdixon
*/
public class LinearDiscriminantWithBiasTest
extends TestCase
{
/**
* Random number generator to use for a fixed random seed.
*/
public final Random RANDOM = new Random( 1 );
/**
* Default tolerance of the regression tests, {@value}.
*/
public final double TOLERANCE = 1e-5;
/**
* Default number of samples to test against, {@value}.
*/
public final int NUM_SAMPLES = 1000;
/**
* Default Constructor
*/
public LinearDiscriminantWithBiasTest(
String testName )
{
super( testName );
}
/**
* Tests the constructors of class LinearDiscriminantWithBiasTest.
*/
public void testConstructors()
{
System.out.println( "Constructors" );
LinearDiscriminantWithBias instance = new LinearDiscriminantWithBias();
assertNull( instance.getWeightVector() );
assertEquals( 0.0, instance.getBias() );
int M = RANDOM.nextInt(5) + 1;
Vector weight = VectorFactory.getDefault().createUniformRandom( M, -1, 1, RANDOM );
instance = new LinearDiscriminantWithBias( weight );
assertSame( weight, instance.getWeightVector() );
assertEquals( 0.0, instance.getBias() );
double bias = RANDOM.nextGaussian();
instance = new LinearDiscriminantWithBias( weight, bias );
assertSame( weight, instance.getWeightVector() );
assertEquals( bias, instance.getBias() );
}
public LinearDiscriminantWithBias createInstance()
{
int M = RANDOM.nextInt(5) + 1;
Vector weight = VectorFactory.getDefault().createUniformRandom( M, -1, 1, RANDOM );
return new LinearDiscriminantWithBias( weight, RANDOM.nextGaussian() );
}
/**
* Tests the clone method of class LinearDiscriminantWithBiasTest.
*/
public void testClone()
{
System.out.println( "Clone" );
LinearDiscriminantWithBias instance = this.createInstance();
LinearDiscriminantWithBias clone = instance.clone();
assertNotSame( instance, clone );
assertNotSame( instance.getWeightVector(), clone.getWeightVector() );
assertEquals( instance.convertToVector(), clone.convertToVector() );
}
/**
* Test of getBias method, of class LinearDiscriminantWithBias.
*/
public void testGetBias()
{
System.out.println("getBias");
LinearDiscriminantWithBias instance = this.createInstance();
double bias = RANDOM.nextGaussian();
instance.setBias(bias);
assertEquals( bias, instance.getBias() );
}
/**
* Test of setBias method, of class LinearDiscriminantWithBias.
*/
public void testSetBias()
{
System.out.println("setBias");
LinearDiscriminantWithBias instance = this.createInstance();
double bias = RANDOM.nextGaussian();
instance.setBias(bias);
assertEquals( bias, instance.getBias() );
}
/**
* Test of evaluate method, of class LinearDiscriminantWithBias.
*/
public void testEvaluate()
{
System.out.println("evaluate");
LinearDiscriminantWithBias instance = this.createInstance();
final int N = instance.getInputDimensionality();
Vector x = VectorFactory.getDefault().createVector(N, 0.0);
double result = instance.evaluate(x);
assertEquals( instance.getBias(), result );
x = VectorFactory.getDefault().createUniformRandom(N, -1.0, 1.0,RANDOM);
result = instance.evaluate(x);
double expected = x.dotProduct( instance.getWeightVector() ) + instance.getBias();
assertEquals( expected, result );
}
/**
* Test of convertToVector method, of class LinearDiscriminantWithBias.
*/
public void testConvertToVector()
{
System.out.println("convertToVector");
LinearDiscriminantWithBias instance = this.createInstance();
Vector p = instance.convertToVector();
assertEquals( instance.getInputDimensionality()+1, p.getDimensionality() );
assertEquals( instance.getWeightVector(), p.subVector(0,instance.getInputDimensionality()-1) );
assertEquals( instance.getBias(), p.getElement(instance.getInputDimensionality()) );
}
/**
* Test of convertFromVector method, of class LinearDiscriminantWithBias.
*/
public void testConvertFromVector()
{
System.out.println("convertFromVector");
LinearDiscriminantWithBias instance = this.createInstance();
Vector p = instance.convertToVector();
double scale = RANDOM.nextGaussian();
p.scaleEquals(scale);
instance.convertFromVector(p);
assertEquals( p, instance.convertToVector() );
p = VectorFactory.getDefault().createVector(p.getDimensionality()+1);
try
{
instance.convertFromVector(p);
fail( "Wrong dim" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
}