/* * File: CosineFunctionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Jun 15, 2009, 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.scalar; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.VectorFactory; /** * Unit tests for CosineFunctionTest. * * @author krdixon */ public class CosineFunctionTest extends DifferentiableUnivariateScalarFunctionTestHarness { /** * Tests for class CosineFunctionTest. * @param testName Name of the test. */ public CosineFunctionTest( String testName) { super(testName); TOLERANCE = 1e-4; } @Override public CosineFunction createInstance() { return new CosineFunction( RANDOM.nextGaussian(), RANDOM.nextGaussian(), RANDOM.nextGaussian() ); } /** * Tests the constructors of class CosineFunctionTest. */ public void testConstructors() { System.out.println( "Constructors" ); CosineFunction f = new CosineFunction(); assertEquals( 1.0, f.getAmplitude() ); assertEquals( 1.0, f.getFrequency() ); assertEquals( 0.0, f.getPhase() ); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); f = new CosineFunction( amplitude, frequency ); assertEquals( amplitude, f.getAmplitude() ); assertEquals( frequency, f.getFrequency() ); assertEquals( 0.0, f.getPhase() ); double phase = RANDOM.nextGaussian(); f = new CosineFunction( amplitude, frequency, phase ); assertEquals( amplitude, f.getAmplitude() ); assertEquals( frequency, f.getFrequency() ); assertEquals( phase, f.getPhase() ); } /** * Test of clone method, of class CosineFunction. */ public void testClone() { System.out.println("clone"); CosineFunction instance = new CosineFunction( RANDOM.nextGaussian(), RANDOM.nextGaussian(), RANDOM.nextGaussian() ); CosineFunction clone = instance.clone(); assertNotNull( clone ); assertNotSame( instance, clone ); assertEquals( instance.convertToVector(), clone.convertToVector() ); assertEquals( instance.getAmplitude(), clone.getAmplitude() ); assertEquals( instance.getFrequency(), clone.getFrequency() ); assertEquals( instance.getPhase(), clone.getPhase() ); } /** * Test of evaluate method, of class CosineFunction. */ public void testEvaluate() { System.out.println("evaluate"); CosineFunction instance = new CosineFunction( 3.0, 2.0, 1.0 ); assertEquals( 1.620907, instance.evaluate( 4.0 ), TOLERANCE ); } /** * Test of differentiate method, of class CosineFunction. */ public void testDifferentiate() { System.out.println("differentiate"); CosineFunction instance = new CosineFunction( 3.0, 2.0, 1.0 ); assertEquals( -31.722709, instance.differentiate( 4.0 ), TOLERANCE ); } /** * Test of getAmplitude method, of class CosineFunction. */ public void testGetAmplitude() { System.out.println("getAmplitude"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( amplitude, f.getAmplitude() ); } /** * Test of setAmplitude method, of class CosineFunction. */ public void testSetAmplitude() { System.out.println("setAmplitude"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( amplitude, f.getAmplitude() ); double v = amplitude + RANDOM.nextDouble(); f.setAmplitude(v); assertEquals( v, f.getAmplitude() ); } /** * Test of getFrequency method, of class CosineFunction. */ public void testGetFrequency() { System.out.println("getFrequency"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( frequency, f.getFrequency() ); } /** * Test of setFrequency method, of class CosineFunction. */ public void testSetFrequency() { System.out.println("setFrequency"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( frequency, f.getFrequency() ); double v = frequency + RANDOM.nextDouble(); f.setFrequency(v); assertEquals( v, f.getFrequency() ); } /** * Test of getPhase method, of class CosineFunction. */ public void testGetPhase() { System.out.println("getPhase"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( phase, f.getPhase() ); } /** * Test of setPhase method, of class CosineFunction. */ public void testSetPhase() { System.out.println("setPhase"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); assertEquals( phase, f.getPhase() ); double v = phase + RANDOM.nextDouble(); f.setFrequency(v); assertEquals( v, f.getFrequency() ); } /** * Test of convertToVector method, of class CosineFunction. */ public void testConvertToVector() { System.out.println("convertToVector"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); Vector v = f.convertToVector(); assertEquals( 3, v.getDimensionality() ); assertEquals( amplitude, v.getElement(0) ); assertEquals( frequency, v.getElement(1) ); assertEquals( phase, v.getElement(2) ); } /** * Test of convertFromVector method, of class CosineFunction. */ public void testConvertFromVector() { System.out.println("convertFromVector"); double amplitude = RANDOM.nextGaussian(); double frequency = RANDOM.nextGaussian(); double phase = RANDOM.nextGaussian(); CosineFunction f = new CosineFunction( amplitude, frequency, phase ); Vector v = VectorFactory.getDefault().createUniformRandom(3, -10.0, 10.0, RANDOM); f.convertFromVector(v); assertEquals( v.getElement(0), f.getAmplitude() ); assertEquals( v.getElement(1), f.getFrequency() ); assertEquals( v.getElement(2), f.getPhase() ); Vector v2 = f.convertToVector(); assertEquals( v, v2 ); } /** * toString test */ public void testToString() { System.out.println( "toString" ); CosineFunction instance = new CosineFunction( 3.0, 2.0, 1.0 ); String result = instance.toString(); System.out.println( "Instance: " + result ); assertNotNull( result ); } }