/*
* File: AbstractWeightedEnsembleTest.java
* Authors: Justin Basilico
* Project: Cognitive Foundry Learning Core
*
* Copyright 2011 Cognitive Foundry. All rights reserved.
*/
package gov.sandia.cognition.learning.algorithm.ensemble;
import gov.sandia.cognition.util.WeightedValue;
import gov.sandia.cognition.evaluator.Evaluator;
import gov.sandia.cognition.learning.function.scalar.LinearFunction;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class AbstractWeightedEnsemble.
*
* @author Justin Basilico
* @since 3.3.3
*/
public class AbstractWeightedEnsembleTest
{
/**
* Creates a new test.
*/
public AbstractWeightedEnsembleTest()
{
}
/**
* Test of constructors of class AbstractWeightedEnsemble.
*/
@Test
public void testConstructors()
{
AbstractWeightedEnsemble<Evaluator<Double, Double>> instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>();
assertNotNull(instance.getMembers());
assertTrue(instance.getMembers().isEmpty());
List<WeightedValue<Evaluator<Double, Double>>> members =
new ArrayList<WeightedValue<Evaluator<Double, Double>>>();
instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>(
members);
assertSame(members, instance.getMembers());
}
/**
* Test of clone method, of class AbstractWeightedEnsemble.
*/
@Test
public void testClone()
{
AbstractWeightedEnsemble<Evaluator<Double, Double>> instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>();
AbstractWeightedEnsemble<Evaluator<Double, Double>> clone =
instance.clone();
assertNotSame(instance, clone);
assertEquals(instance.getMembers(), clone.getMembers());
assertNotSame(instance.getMembers(), clone.getMembers());
assertNotSame(instance.getMembers(), clone.getMembers());
assertNotSame(clone, instance.clone());
}
/**
* Test of add method, of class AbstractWeightedEnsemble.
*/
@Test
public void testAdd()
{
AbstractWeightedEnsemble<Evaluator<Double, Double>> instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>();
assertTrue(instance.getMembers().isEmpty());
LinearFunction member = new LinearFunction();
instance.add(member);
assertEquals(1, instance.getMembers().size());
assertEquals(1.0, instance.getMembers().get(0).getWeight(), 0.0);
assertSame(member, instance.getMembers().get(0).getValue());
member = new LinearFunction(2.0, 1.0);
double weight = 3.4;
instance.add(member, weight);
assertEquals(2, instance.getMembers().size());
assertEquals(weight, instance.getMembers().get(1).getWeight(), 0.0);
assertSame(member, instance.getMembers().get(1).getValue());
member = new LinearFunction(-3.0, 3.0);
weight = -1.1;
instance.add(member, weight);
assertEquals(3, instance.getMembers().size());
assertEquals(weight, instance.getMembers().get(2).getWeight(), 0.0);
assertSame(member, instance.getMembers().get(2).getValue());
boolean exceptionThrown = false;
exceptionThrown = false;
try
{
instance.add(null);
}
catch (IllegalArgumentException e)
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
assertEquals(3, instance.getMembers().size());
}
/**
* Test of getWeightSum method, of class AbstractWeightedEnsemble.
*/
@Test
public void testGetWeightSum()
{
AbstractWeightedEnsemble<Evaluator<Double, Double>> instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>();
assertEquals(0.0, instance.getWeightSum(), 0.0);
}
/**
* Test of getMembers method, of class AbstractWeightedEnsemble.
*/
@Test
public void testGetMembers()
{
this.testSetMembers();
}
/**
* Test of setMembers method, of class AbstractWeightedEnsemble.
*/
@Test
public void testSetMembers()
{
AbstractWeightedEnsemble<Evaluator<Double, Double>> instance =
new DummyWeightedEnsemble<Evaluator<Double, Double>>();
assertNotNull(instance.getMembers());
assertTrue(instance.getMembers().isEmpty());
List<WeightedValue<Evaluator<Double, Double>>> members =
new ArrayList<WeightedValue<Evaluator<Double, Double>>>();
instance.setMembers(members);
assertSame(members, instance.getMembers());
members = null;
instance.setMembers(members);
assertSame(members, instance.getMembers());
}
/**
* A dummy pass-through class.
*
* @param <MemberType>
* The member type.
*/
public static class DummyWeightedEnsemble<MemberType>
extends AbstractWeightedEnsemble<MemberType>
{
public DummyWeightedEnsemble()
{
super();
}
public DummyWeightedEnsemble(
final List<WeightedValue<MemberType>> members)
{
super(members);
}
}
}