/*
* File: KernelDistanceMetricTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright August 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.kernel;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.mtj.Vector3;
import java.util.Random;
import junit.framework.TestCase;
/**
* This class implements JUnit tests for the following classes:
*
* @author Justin Basilico
* @since 2.0
*/
public class KernelDistanceMetricTest
extends TestCase
{
public static final Random RANDOM = new Random(1);
public KernelDistanceMetricTest(
String testName)
{
super(testName);
}
public void testConstructors()
{
KernelDistanceMetric<Vector> instance =
new KernelDistanceMetric<Vector>();
assertNull(instance.getKernel());
LinearKernel kernel = LinearKernel.getInstance();
instance = new KernelDistanceMetric<Vector>(kernel);
assertSame(kernel, instance.getKernel());
KernelDistanceMetric<Vector> copy =
new KernelDistanceMetric<Vector>(instance);
assertNotNull( copy.getKernel() );
assertNotSame(instance.getKernel(), copy.getKernel());
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.kernel.KernelDistanceMetric.
*/
public void testClone()
{
LinearKernel kernel = LinearKernel.getInstance();
KernelDistanceMetric<Vector> instance =
new KernelDistanceMetric<Vector>(kernel);
KernelDistanceMetric<Vector> clone = instance.clone();
assertNotSame(instance, clone);
assertNotNull( clone.getKernel() );
assertNotSame(instance.getKernel(), clone.getKernel());
instance.setKernel(null);
clone = instance.clone();
assertNotSame(instance, clone);
assertNull(instance.getKernel());
assertNull(clone.getKernel());
}
/**
* Test of evaluate method, of class gov.sandia.cognition.learning.kernel.KernelDistanceMetric.
*/
public void testEvaluate()
{
final double epsilon = 1e-5;
LinearKernel kernel = LinearKernel.getInstance();
KernelDistanceMetric<Vector> instance =
new KernelDistanceMetric<Vector>(kernel);
Vector zero = new Vector3();
Vector x = Vector3.createRandom(RANDOM);
Vector y = Vector3.createRandom(RANDOM);
assertEquals(x.euclideanDistanceSquared(y), instance.evaluate(x, y), epsilon);
assertEquals(x.euclideanDistanceSquared(y), instance.evaluate(y, x), epsilon);
assertEquals(x.euclideanDistanceSquared(zero), instance.evaluate(x, zero), epsilon);
assertEquals(x.euclideanDistanceSquared(zero), instance.evaluate(zero, x), epsilon);
assertEquals(y.euclideanDistanceSquared(zero), instance.evaluate(y, zero), epsilon);
assertEquals(y.euclideanDistanceSquared(zero), instance.evaluate(zero, y), epsilon);
assertEquals(0.0, instance.evaluate(zero, zero));
}
}