/* * File: CosineDistanceMetricTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright May 13, 2008, 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.Vector3; /** * * @author Justin Basilico */ public class CosineDistanceMetricTest extends SemimetricTestHarness<Vectorizable> { public CosineDistanceMetricTest(String testName) { super(testName); } /** * Test of evaluate method, of class CosineDistanceMetric. */ public void testKnownValues() { CosineDistanceMetric instance = this.createInstance(); int n = 10; for (int i = 0; i < n; i++) { Vector x = this.generateRandomFirstType(); Vector y = this.generateRandomFirstType(); double expected = 1.0 - x.cosine(y); double result = instance.evaluate(x, y); assertEquals(expected, result); assertTrue(result >= 0.0); assertEquals(0.0, instance.evaluate(x, x), TOLERANCE); assertEquals(0.0, instance.evaluate(y, y), TOLERANCE); } Vector v0 = VectorFactory.getDefault().copyValues(0); Vector v1 = VectorFactory.getDefault().copyValues(1.0); assertEquals( 0.0, instance.evaluate(v0, v0)); assertEquals( 1.0, instance.evaluate(v0, v1)); assertEquals( 1.0, instance.evaluate(v1, v0)); } @Override public CosineDistanceMetric createInstance() { return CosineDistanceMetric.INSTANCE; } @Override public Vector generateRandomFirstType() { return Vector3.createRandom(RANDOM); } }