/*
* File: PIDControllerTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Apr 4, 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.math.signals;
import gov.sandia.cognition.evaluator.Evaluator;
import gov.sandia.cognition.math.AbstractUnivariateScalarFunction;
import gov.sandia.cognition.math.signals.PIDController.State;
import java.util.Random;
import junit.framework.TestCase;
/**
* Unit tests for {@name}.
*
* @author krdixon
*/
public class PIDControllerTest
extends TestCase
{
Random random = new Random( 1 );
public PIDControllerTest(
String testName)
{
super(testName);
}
/**
* Test of getTargetInput method, of class PIDController.
*/
public void testGetTargetInput()
{
System.out.println("getTargetInput");
double targetInput = random.nextGaussian();
PIDController instance = new PIDController(
random.nextDouble(), random.nextDouble(), random.nextDouble(), targetInput );
assertEquals( targetInput, instance.getTargetInput() );
}
/**
* Test of setTargetInput method, of class PIDController.
*/
public void testSetTargetInput()
{
System.out.println("setTargetInput");
double targetInput = random.nextGaussian();
PIDController instance = new PIDController();
assertEquals( 0.0, instance.getTargetInput() );
instance.setTargetInput(targetInput);
assertEquals( targetInput, instance.getTargetInput() );
}
/**
* Test of getProportionalGain method, of class PIDController.
*/
public void testGetProportionalGain()
{
System.out.println("getProportionalGain");
PIDController instance = new PIDController();
assertEquals( PIDController.DEFAULT_PROPORTIONAL_GAIN, instance.getProportionalGain() );
}
/**
* Test of setProportionalGain method, of class PIDController.
*/
public void testSetProportionalGain()
{
System.out.println("setProportionalGain");
double proportionalGain = random.nextGaussian();
PIDController instance = new PIDController();
instance.setProportionalGain(proportionalGain);
assertEquals( proportionalGain, instance.getProportionalGain() );
}
/**
* Test of getIntegralGain method, of class PIDController.
*/
public void testGetIntegralGain()
{
System.out.println("getIntegralGain");
PIDController instance = new PIDController();
assertEquals( PIDController.DEFAULT_INTEGRAL_GAIN, instance.getIntegralGain() );
}
/**
* Test of setIntegralGain method, of class PIDController.
*/
public void testSetIntegralGain()
{
System.out.println("setIntegralGain");
double integralGain = random.nextGaussian();
PIDController instance = new PIDController();
instance.setIntegralGain(integralGain);
assertEquals( integralGain, instance.getIntegralGain() );
}
/**
* Test of getDerivativeGain method, of class PIDController.
*/
public void testGetDerivativeGain()
{
System.out.println("getDerivativeGain");
PIDController instance = new PIDController();
assertEquals( PIDController.DEFAULT_DERIVATIVE_GAIN, instance.getDerivativeGain() );
}
/**
* Test of setDerivativeGain method, of class PIDController.
*/
public void testSetDerivativeGain()
{
System.out.println("setDerivativeGain");
double derivativeGain = random.nextGaussian();
PIDController instance = new PIDController();
instance.setDerivativeGain(derivativeGain);
assertEquals( derivativeGain, instance.getDerivativeGain() );
}
public static class AtanFunction
extends AbstractUnivariateScalarFunction
{
public double evaluate(
double input)
{
return Math.atan(input);
}
}
/**
* Test of evaluate method, of class PIDController.
*/
public void testEvaluate()
{
System.out.println("evaluate");
Evaluator<Double,Double> f = new AtanFunction();
PIDController instance = new PIDController( 1.0, 0.5, 0.1, 1.0 );
double EPS = 1e-5;
double x = -10.0;
double y = 0.0;
for( int i = 0; i < 100; i++ )
{
y = f.evaluate(x);
x = instance.evaluate(y);
// System.out.println( "y: " + y + ", State: " + ObjectUtil.toString(instance.getState()) );
}
assertEquals( y, instance.getTargetInput(), EPS );
}
/**
* Test of createDefaultState method, of class PIDController.
*/
public void testCreateDefaultState()
{
System.out.println("createDefaultState");
PIDController instance = new PIDController();
State result = instance.createDefaultState();
assertEquals( 0.0, result.getErrSum() );
assertEquals( 0.0, result.getLastErr() );
}
}