/*
* File: LinearDiscriminantTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright October 9, 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.VectorFactory;
import gov.sandia.cognition.math.matrix.Vector;
import java.util.Random;
import junit.framework.TestCase;
/**
*
* @author Kevin R. Dixon
*/
public class LinearDiscriminantTest
extends TestCase
{
/** The random number generator for the tests. */
public Random random = new Random(1);
public LinearDiscriminantTest(String testName)
{
super(testName);
}
public LinearDiscriminant createInstance()
{
int M = random.nextInt(5) + 1;
return new LinearDiscriminant( VectorFactory.getDefault().createUniformRandom( M, -1, 1, random ) );
}
public void testConstructors()
{
System.out.println( "Constructors" );
LinearDiscriminant instance = new LinearDiscriminant();
assertNull( instance.getWeightVector() );
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testClone()
{
System.out.println("clone");
LinearDiscriminant instance = this.createInstance();
LinearDiscriminant clone = instance.clone();
assertNotSame( instance, clone );
assertNotSame( instance.getWeightVector(), clone.getWeightVector() );
assertEquals( instance.getWeightVector(), clone.getWeightVector() );
}
/**
* Test of getInputDimensionality method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testGetInputDimensionality()
{
System.out.println("getInputDimensionality");
LinearDiscriminant instance = this.createInstance();
assertEquals( instance.getWeightVector().getDimensionality(), instance.getInputDimensionality() );
}
/**
* Test of getWeightVector method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testGetWeightVector()
{
System.out.println("getWeightVector");
LinearDiscriminant instance = this.createInstance();
assertNotNull( instance.getWeightVector() );
}
/**
* Test of setWeightVector method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testSetWeightVector()
{
System.out.println("setWeightVector");
LinearDiscriminant instance = this.createInstance();
assertNotNull( instance.getWeightVector() );
Vector w = instance.getWeightVector();
instance.setWeightVector( null );
assertNull( instance.getWeightVector() );
instance.setWeightVector( w );
assertSame( w, instance.getWeightVector() );
}
/**
* Test of evaluate method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testEvaluate()
{
System.out.println("evaluate");
final double EPS = 1e-5;
double r = 10;
for( int i = 0; i < 100; i++ )
{
LinearDiscriminant instance = this.createInstance();
Vector w = instance.getWeightVector();
int M = instance.getInputDimensionality();
Vector x = VectorFactory.getDefault().createUniformRandom( M, -r, r, random );
double yhat = instance.evaluate( x );
assertEquals( w.dotProduct( x ), yhat, EPS );
}
}
/**
* Test of convertToVector method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testConvertToVector()
{
System.out.println("convertToVector");
LinearDiscriminant instance = this.createInstance();
assertSame( instance.getWeightVector(), instance.convertToVector() );
}
/**
* Test of convertFromVector method, of class gov.sandia.cognition.learning.util.function.LinearDiscriminant.
*/
public void testConvertFromVector()
{
System.out.println("convertFromVector");
LinearDiscriminant instance = this.createInstance();
Vector p = instance.getWeightVector().scale( random.nextGaussian() );
instance.convertFromVector( p );
assertSame( p, instance.getWeightVector() );
}
}