/*
* File: MovingAverageFilterTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Feb 24, 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.collection.FiniteCapacityBuffer;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import java.util.Random;
import junit.framework.TestCase;
/**
* Unit tests for {@name}.
*
* @author krdixon
*/
public class MovingAverageFilterTest
extends TestCase
{
Random random = new Random( 1 );
public MovingAverageFilterTest(
String testName)
{
super(testName);
}
public void testConstructors()
{
System.out.println( "Constructors" );
final int num = 4;
MovingAverageFilter f = new MovingAverageFilter( num );
assertEquals( num, f.getNumMovingAverageCoefficients() );
for( int i = 0; i < num; i++ )
{
assertEquals( 1.0/num, f.getMovingAverageCoefficients().getElement( i ) );
}
final double[] c2 = { random.nextGaussian(), random.nextGaussian(), random.nextGaussian() };
MovingAverageFilter f2 = new MovingAverageFilter( c2 );
assertEquals( c2.length, f2.getNumMovingAverageCoefficients() );
for( int i = 0; i < c2.length; i++ )
{
assertEquals( c2[i], f2.getMovingAverageCoefficients().getElement( i ) );
}
final Vector v3 = null;
MovingAverageFilter f3 = new MovingAverageFilter( v3 );
assertNull( f3.getMovingAverageCoefficients() );
assertEquals( 0, f3.getNumMovingAverageCoefficients() );
}
/**
* Test of createDefaultState method, of class MovingAverageFilter.
*/
public void testCreateDefaultState()
{
System.out.println( "createDefaultState" );
final int num = 2;
MovingAverageFilter instance = new MovingAverageFilter( num );
FiniteCapacityBuffer<Double> result = instance.createDefaultState();
assertEquals( num, result.getCapacity() );
assertEquals( 0, result.size() );
}
/**
* Test of evaluate method, of class MovingAverageFilter.
*/
public void testEvaluate()
{
System.out.println( "evaluate" );
final double[] c = { -1.0, 2.0, 3.0, -4.0 };
MovingAverageFilter f = new MovingAverageFilter( c );
assertEquals( -2.0, f.evaluate( 2.0 ) );
assertEquals( -1.0+ 4.0, f.evaluate( 1.0 ) );
assertEquals( -5.0+ 2.0+ 6.0, f.evaluate( 5.0 ) );
assertEquals( 1.0+10.0+ 3.0- 8.0, f.evaluate( -1.0 ) );
assertEquals( 2.0- 2.0+15.0- 4.0, f.evaluate( -2.0 ) );
assertEquals( -3.0- 4.0- 3.0-20.0, f.evaluate( 3.0 ) );
}
/**
* Test of clone method, of class MovingAverageFilter.
*/
public void testClone()
{
System.out.println( "clone" );
MovingAverageFilter instance =
new MovingAverageFilter( random.nextInt( 10 ) + 1 );
MovingAverageFilter clone = instance.clone();
assertNotSame( instance, clone );
assertNotSame( instance.getState(), clone.getState() );
assertNotSame( instance.getMovingAverageCoefficients(), clone.getMovingAverageCoefficients() );
assertEquals( instance.getMovingAverageCoefficients(), clone.getMovingAverageCoefficients() );
}
/**
* Test of convertToVector method, of class MovingAverageFilter.
*/
public void testConvertToVector()
{
System.out.println( "convertToVector" );
final double[] c = { random.nextGaussian(), random.nextGaussian(), random.nextGaussian() };
MovingAverageFilter instance = new MovingAverageFilter( c );
assertEquals( c.length, instance.convertToVector().getDimensionality() );
assertEquals( VectorFactory.getDefault().copyArray( c ), instance.convertToVector() );
assertSame( instance.getMovingAverageCoefficients(), instance.convertToVector() );
}
/**
* Test of convertFromVector method, of class MovingAverageFilter.
*/
public void testConvertFromVector()
{
System.out.println( "convertFromVector" );
final double[] c = { random.nextGaussian(), random.nextGaussian(), random.nextGaussian() };
Vector v = VectorFactory.getDefault().copyArray( c );
MovingAverageFilter instance = new MovingAverageFilter( c.length );
assertFalse( v.equals( instance.convertToVector() ) );
instance.convertFromVector( v );
assertSame( v, instance.convertToVector() );
try
{
instance.convertFromVector( VectorFactory.getDefault().createVector( 10 ) );
fail( "Cannot convert from different sized Vector" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
/**
* Test of getNumMovingAverageCoefficients method, of class MovingAverageFilter.
*/
public void testGetNumMovingAverageCoefficients()
{
System.out.println( "getNumMovingAverageCoefficients" );
final int num = 10;
MovingAverageFilter instance = new MovingAverageFilter( num );
assertEquals( num, instance.getNumMovingAverageCoefficients() );
assertEquals( instance.getNumMovingAverageCoefficients(), instance.getMovingAverageCoefficients().getDimensionality() );
assertEquals( instance.getNumMovingAverageCoefficients(), instance.getState().getCapacity() );
}
/**
* Test of getMovingAverageCoefficients method, of class MovingAverageFilter.
*/
public void testGetMovingAverageCoefficients()
{
System.out.println( "getMovingAverageCoefficients" );
final int num = 10;
MovingAverageFilter instance = new MovingAverageFilter( num );
assertEquals( num, instance.getMovingAverageCoefficients().getDimensionality() );
}
/**
* Test of setMovingAverageCoefficients method, of class MovingAverageFilter.
*/
public void testSetMovingAverageCoefficients()
{
System.out.println( "setMovingAverageCoefficients" );
final int num = 10;
MovingAverageFilter instance = new MovingAverageFilter( num );
Vector v = instance.getMovingAverageCoefficients();
assertNotNull( v );
instance.setMovingAverageCoefficients( null );
assertNull( instance.getMovingAverageCoefficients() );
instance.setMovingAverageCoefficients( v );
assertSame( v, instance.getMovingAverageCoefficients() );
}
}