/*
* File: AtanFunctionTest.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.scalar;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.math.matrix.Vector;
/**
*
* @author jdbasil
*/
public class AtanFunctionTest
extends DifferentiableUnivariateScalarFunctionTestHarness
{
public AtanFunctionTest(String testName)
{
super(testName);
}
@Override
public AtanFunction createInstance()
{
return new AtanFunction(RANDOM.nextDouble());
}
@Override
public void testConstructors()
{
System.out.println( "Constructors" );
AtanFunction f = new AtanFunction();
assertEquals( AtanFunction.DEFAULT_MAX_MAGNITUDE, f.getMaxMagnitude() );
double mag = RANDOM.nextDouble();
f = new AtanFunction( mag );
assertEquals( mag, f.getMaxMagnitude() );
}
/**
* Test of evaluate method, of class gov.sandia.isrc.learning.util.function.AtanFunction.
*/
public void testEvaluate()
{
System.out.println("evaluate (Scalar)");
double maxMag = RANDOM.nextDouble();
AtanFunction f1 = new AtanFunction(maxMag);
assertEquals(0.0, f1.evaluate(0.0));
double x1 = 1e7;
double y1 = maxMag;
assertEquals(y1, f1.evaluate(x1), TOLERANCE);
assertEquals(-y1, f1.evaluate(-x1), TOLERANCE);
double x2 = 1.0;
double y2 = 0.5 * maxMag;
assertEquals(y2, f1.evaluate(x2), TOLERANCE);
assertEquals(-y2, f1.evaluate(-x2), TOLERANCE);
double x3 = 0.1;
double y3 = 0.063451 * maxMag;
assertEquals(y3, f1.evaluate(x3), TOLERANCE);
assertEquals(-y3, f1.evaluate(-x3), TOLERANCE);
}
/**
* Test of getMaxMagnitude method, of class gov.sandia.isrc.learning.util.function.AtanFunction.
*/
public void testGetMaxMagnitude()
{
System.out.println("getMaxMagnitude");
AtanFunction instance = new AtanFunction();
assertEquals(AtanFunction.DEFAULT_MAX_MAGNITUDE, instance.getMaxMagnitude());
}
/**
* Test of setMaxMagnitude method, of class gov.sandia.isrc.learning.util.function.AtanFunction.
*/
public void testSetMaxMagnitude()
{
System.out.println("setMaxMagnitude");
double maxMagnitude = RANDOM.nextDouble();
AtanFunction instance =
new AtanFunction(maxMagnitude);
assertEquals(maxMagnitude, instance.getMaxMagnitude());
double newMaxMagnitude = RANDOM.nextDouble();
instance.setMaxMagnitude(newMaxMagnitude);
assertEquals(newMaxMagnitude, instance.getMaxMagnitude());
}
/**
* Test of differentiate method, of class gov.sandia.cognition.learning.util.function.AtanFunction.
*/
public void testDifferentiate()
{
System.out.println("differentiate");
for (int i = 0; i < 100; i++)
{
AtanFunction instance = this.createInstance();
double x = RANDOM.nextGaussian();
double y = instance.getMaxMagnitude() * 2.0 / Math.PI / (1.0 + x * x);
assertEquals(y, instance.differentiate(x), TOLERANCE);
}
}
/**
* Test of clone method, of class gov.sandia.cognition.learning.util.function.AtanFunction.
*/
public void testClone()
{
System.out.println("clone");
AtanFunction instance = this.createInstance();
AtanFunction clone = instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getMaxMagnitude(), clone.getMaxMagnitude());
}
/**
* Test of convertToVector method, of class gov.sandia.cognition.learning.util.function.AtanFunction.
*/
public void testConvertToVector()
{
System.out.println("convertToVector");
AtanFunction instance = this.createInstance();
Vector p = instance.convertToVector();
assertEquals(1, p.getDimensionality());
assertEquals(instance.getMaxMagnitude(), p.getElement(0));
}
/**
* Test of convertFromVector method, of class gov.sandia.cognition.learning.util.function.AtanFunction.
*/
public void testConvertFromVector()
{
System.out.println("convertFromVector");
Vector parameters = VectorFactory.getDefault().copyValues(RANDOM.nextDouble());
AtanFunction instance = this.createInstance();
assertFalse(parameters.equals(instance.convertToVector()));
instance.convertFromVector(parameters);
assertTrue(parameters.equals(instance.convertToVector(), 1e-5));
assertEquals(parameters.getElement(0), instance.getMaxMagnitude(), 1e-5);
}
}