/*
* File: DefaultKernelBinaryCategorizerTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry Learning Core
*
* Copyright April 06, 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.
*/
package gov.sandia.cognition.learning.function.categorization;
import gov.sandia.cognition.collection.CollectionUtil;
import java.util.Random;
import gov.sandia.cognition.learning.function.kernel.LinearKernel;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.mtj.Vector3;
import gov.sandia.cognition.util.DefaultWeightedValue;
import java.util.ArrayList;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class DefaultKernelBinaryCategorizer.
*
* @author Justin Basilico
* @since 3.2.0
*/
public class DefaultKernelBinaryCategorizerTest
{
/** Random number generator for tests. */
protected Random random = new Random(211);
/**
* Creates a new test.
*/
public DefaultKernelBinaryCategorizerTest()
{
}
/**
* Test constructors of class DefaultKernelBinaryCategorizer.
*/
public void testConstructors()
{
double bias = KernelBinaryCategorizer.DEFAULT_BIAS;
DefaultKernelBinaryCategorizer<Vector> instance =
new DefaultKernelBinaryCategorizer<Vector>();
assertNull(instance.getKernel());
assertTrue(instance.getExamples().isEmpty());
assertEquals(bias, instance.getBias(), 0.0);
LinearKernel kernel = LinearKernel.getInstance();
instance = new DefaultKernelBinaryCategorizer<Vector>(kernel);
assertSame(kernel, instance.getKernel());
assertTrue(instance.getExamples().isEmpty());
assertEquals(bias, instance.getBias(), 0.0);
ArrayList<DefaultWeightedValue<Vector>> examples =
new ArrayList<DefaultWeightedValue<Vector>>();
examples.add(
new DefaultWeightedValue<Vector>(new Vector3(
random.nextGaussian(), random.nextGaussian(), random.nextGaussian())) );
bias = random.nextGaussian();
instance = new DefaultKernelBinaryCategorizer<Vector>(kernel, examples, bias);
assertSame(kernel, instance.getKernel());
assertSame(examples, instance.getExamples());
assertEquals(bias, instance.getBias(), 0.0);
}
/**
* Test of add method, of class DefaultKernelBinaryCategorizer.
*/
@Test
public void testAdd()
{
DefaultKernelBinaryCategorizer<Vector> instance =
new DefaultKernelBinaryCategorizer<Vector>();
assertTrue(instance.getExamples().isEmpty());
Vector v1 = new Vector3();
double w1 = random.nextGaussian();
instance.add(v1, w1);
assertEquals(1, instance.getExamples().size());
assertSame(v1, CollectionUtil.getFirst(instance.getExamples()).getValue());
assertEquals(w1, CollectionUtil.getFirst(instance.getExamples()).getWeight(), 0.0);
Vector v2 = new Vector3(
random.nextGaussian(), random.nextGaussian(), random.nextGaussian());
double w2 = random.nextGaussian();
instance.add(v2, w2);
assertEquals(2, instance.getExamples().size());
assertSame(v2, CollectionUtil.getElement(instance.getExamples(), 1).getValue());
assertEquals(w2, CollectionUtil.getElement(instance.getExamples(), 1).getWeight(), 0.0);
instance.add(v2, w2);
assertEquals(3, instance.getExamples().size());
assertSame(v2, CollectionUtil.getElement(instance.getExamples(), 2).getValue());
assertEquals(w2, CollectionUtil.getElement(instance.getExamples(), 2).getWeight(), 0.0);
// Test adding a zero-weight.
instance.add(v2, 0.0);
assertEquals(4, instance.getExamples().size());
assertSame(v2, CollectionUtil.getElement(instance.getExamples(), 3).getValue());
assertEquals(0.0, CollectionUtil.getElement(instance.getExamples(), 3).getWeight(), 0.0);
// Test adding null.
Vector v5 = null;
double w5 = random.nextGaussian();
instance.add(v5, w5);
assertEquals(5, instance.getExamples().size());
assertSame(v5, CollectionUtil.getElement(instance.getExamples(), 4).getValue());
assertEquals(w5, CollectionUtil.getElement(instance.getExamples(), 4).getWeight(), 0.0);
}
}