/* * File: LinearFunctionTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright October 5, 2006, 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.vector; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.Matrix; import gov.sandia.cognition.math.matrix.MatrixFactory; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.mtj.Vector3; import java.util.Random; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * * @author jdbasil */ public class LinearVectorFunctionTest extends TestCase { /** The random number generator for the tests. */ public Random random = new Random(1); public static final double EPS = 1e-5; /** Default Constructor instance. */ protected LinearVectorFunction defaultInstance; public LinearVectorFunctionTest(String testName) { super(testName); } /** * {@inheritDoc} * @throws java.lang.Exception */ @Override protected void setUp() throws Exception { this.defaultInstance = new LinearVectorFunction(); } public static Test suite() { TestSuite suite = new TestSuite(LinearVectorFunctionTest.class); return suite; } /** * Test of evaluate method, of class gov.sandia.isrc.learning.util.function.LinearFunction. */ public void testEvaluate() { System.out.println("evaluate"); Vector input = new Vector3(1.0, 0.0, -3.0); Vector defaultResult = this.defaultInstance.evaluate(input); assertEquals(new Vector3(1.0, 0.0, -3.0), defaultResult); LinearVectorFunction instance = new LinearVectorFunction(2.0); Vector result = instance.evaluate(input); assertEquals(new Vector3(2.0, 0.0, -6.0), result); Vector x2 = VectorFactory.getDefault().createUniformRandom( 10, -10.0, 10.0, random ); LinearVectorFunction f2 = new LinearVectorFunction( random.nextGaussian() ); Vector y2 = f2.evaluate( x2 ); assertTrue( y2.equals( x2.scale( f2.getScaleFactor() ), EPS ) ); } /** * Test of getScaleFactor method, of class gov.sandia.isrc.learning.util.function.LinearFunction. */ public void testGetScaleFactor() { System.out.println("getScaleFactor"); assertEquals(LinearVectorFunction.DEFAULT_SCALE_FACTOR, this.defaultInstance.getScaleFactor()); double scaleFactor = random.nextGaussian(); LinearVectorFunction instance = new LinearVectorFunction(scaleFactor); assertEquals(scaleFactor, instance.getScaleFactor()); } /** * Test of setScaleFactor method, of class gov.sandia.isrc.learning.util.function.LinearFunction. */ public void testSetScaleFactor() { System.out.println("setScaleFactor"); double scaleFactor = random.nextGaussian(); LinearVectorFunction instance = new LinearVectorFunction(scaleFactor); assertEquals(scaleFactor, instance.getScaleFactor()); double newScaleFactor = random.nextGaussian(); instance.setScaleFactor(newScaleFactor); assertEquals(newScaleFactor, instance.getScaleFactor()); instance.setScaleFactor(0.0); assertEquals(0.0, instance.getScaleFactor()); } /** * Test of differentiate method, of class gov.sandia.isrc.learning.util.function.LinearFunction. */ public void testDifferentiate() { System.out.println("differentiate (Scalar)"); for( int i = 0; i < 10; i++ ) { int N = random.nextInt( 10 ) + 1; Vector x = VectorFactory.getDefault().createUniformRandom( N, -10.0, 10.0, random ); LinearVectorFunction f = new LinearVectorFunction( random.nextGaussian() ); Matrix dfdx = f.differentiate( x ); Matrix expected = MatrixFactory.getDefault().createIdentity( N, N ).scale( f.getScaleFactor() ); assertTrue( expected.equals( dfdx, EPS ) ); } } protected LinearVectorFunction createFunction() { return new LinearVectorFunction( random.nextGaussian() ); } }