/*
* File: EuclideanDistanceSquaredMetricTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright August 8, 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.distance;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.math.matrix.Vectorizable;
import gov.sandia.cognition.math.matrix.mtj.Vector2;
/**
* This class implements JUnit tests for the following classes: EuclideanDistanceSquaredMetric
*
* @author Justin Basilico
* @since 2.0
*/
public class EuclideanDistanceSquaredMetricTest
extends SemimetricTestHarness<Vectorizable>
{
public EuclideanDistanceSquaredMetricTest(
String testName )
{
super(testName);
}
@Override
public EuclideanDistanceSquaredMetric createInstance()
{
return EuclideanDistanceSquaredMetric.INSTANCE;
}
@Override
public Vector generateRandomFirstType()
{
return VectorFactory.getDefault().createUniformRandom(2,-5.0,10.0,RANDOM);
}
@Override
public void testKnownValues()
{
System.out.println( "Known Values" );
EuclideanDistanceSquaredMetric metric = this.createInstance();
// Create four points to compute the distances between.
Vector2 v00 = new Vector2(0.0, 0.0);
Vector2 v01 = new Vector2(0.0, 1.0);
Vector2 v10 = new Vector2(1.0, 0.0);
Vector2 v11 = new Vector2(1.0, 1.0);
// Make sure the distance to self is zero.
assertEquals(0.0, metric.evaluate(v00, v00));
assertEquals(0.0, metric.evaluate(v01, v01));
assertEquals(0.0, metric.evaluate(v10, v10));
assertEquals(0.0, metric.evaluate(v11, v11));
// Make sure the distances between points are correct.
assertEquals(1.0, metric.evaluate(v00, v01));
assertEquals(1.0, metric.evaluate(v00, v10));
assertEquals(1.0, metric.evaluate(v01, v00));
assertEquals(1.0, metric.evaluate(v01, v11));
assertEquals(2.0, metric.evaluate(v00, v11), TOLERANCE);
// Make sure that it works with negative points.
assertEquals(1.0, metric.evaluate(v00, v01.scale(-1.0)));
assertEquals(1.0, metric.evaluate(v00, v10.scale(-1.0)));
assertEquals(2.0, metric.evaluate(v00, v11.scale(-1.0)), TOLERANCE);
}
}