/*
* File: LinearBinaryCategorizerTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright August 6, 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.categorization;
import gov.sandia.cognition.math.matrix.DimensionalityMismatchException;
import gov.sandia.cognition.math.matrix.mtj.Vector3;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.Vectorizable;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
/**
* This class implements JUnit tests for the following classes:
*
* LinearBinaryCategorizer
*
* @author Justin Basilico
* @since 2.0
*/
public class LinearBinaryCategorizerTest
extends CategorizerTestHarness<Vectorizable,Boolean>
{
public LinearBinaryCategorizerTest(
String testName)
{
super(testName);
}
public void testStatics()
{
assertEquals(0.0, LinearBinaryCategorizer.DEFAULT_BIAS);
}
public void testConstructors()
{
LinearBinaryCategorizer instance = new LinearBinaryCategorizer();
assertNull(instance.getWeights());
assertEquals(0.0, instance.getBias());
Vector weights = this.createRandomInput();
double bias = RANDOM.nextGaussian();
instance = new LinearBinaryCategorizer(weights, bias);
assertEquals(weights, instance.getWeights());
assertEquals(bias, instance.getBias());
LinearBinaryCategorizer copy = new LinearBinaryCategorizer(instance);
assertEquals(instance.getWeights(), copy.getWeights());
assertNotSame(instance.getWeights(), copy.getWeights());
assertEquals(instance.getBias(), copy.getBias());
instance = new LinearBinaryCategorizer();
copy = new LinearBinaryCategorizer(instance);
assertEquals(instance.getWeights(), copy.getWeights());
assertNull(copy.getWeights());
assertEquals(instance.getBias(), copy.getBias());
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testCloneLocal()
{
LinearBinaryCategorizer instance = new LinearBinaryCategorizer(
new Vector3(1.0, 0.0, -2.0), 4.0);
LinearBinaryCategorizer clone = instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getWeights(), clone.getWeights());
assertEquals(instance.getBias(), clone.getBias());
instance = new LinearBinaryCategorizer();
clone = instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getWeights(), clone.getWeights());
assertEquals(instance.getBias(), clone.getBias());
}
/**
* Test of evaluate method, of class gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testKnownValues()
{
LinearBinaryCategorizer instance = new LinearBinaryCategorizer(
new Vector3(1.0, 0.0, -2.0), 4.0);
Vector input = new Vector3(1.0, 1.0, 1.0);
Boolean output = true;
assertEquals(output, instance.evaluate(input));
input = new Vector3(0.0, 7.0, 3.0);
output = false;
assertEquals(output, instance.evaluate(input));
input = new Vector3(0.0, 0.0, 0.0);
output = true;
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 gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testEvaluateAsDouble()
{
LinearBinaryCategorizer instance = new LinearBinaryCategorizer(
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 LinearBinaryCategorizer();
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 gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testGetWeights()
{
this.testSetWeights();
}
/**
* Test of setWeights method, of class gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testSetWeights()
{
Vector weights = null;
LinearBinaryCategorizer instance = new LinearBinaryCategorizer();
assertNull(instance.getWeights());
weights = new Vector3();
instance.setWeights(weights);
assertSame(weights, instance.getWeights());
weights = this.createRandomInput();
instance.setWeights(weights);
assertSame(weights, instance.getWeights());
weights = null;
instance.setWeights(weights);
assertNull(weights);
}
/**
* Test of getBias method, of class gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testGetBias()
{
this.testSetBias();
}
/**
* Test of setBias method, of class gov.sandia.cognition.learning.categorization.LinearBinaryCategorizer.
*/
public void testSetBias()
{
double bias = 0.0;
LinearBinaryCategorizer instance = new LinearBinaryCategorizer();
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());
}
public void testToString()
{
LinearBinaryCategorizer instance = new LinearBinaryCategorizer();
assertNotNull(instance.toString());
}
@Override
public LinearBinaryCategorizer createInstance()
{
return new LinearBinaryCategorizer( this.createRandomInput(), RANDOM.nextGaussian() );
}
@Override
public Vector createRandomInput()
{
return Vector3.createRandom(RANDOM);
}
}