/*
* File: WeightedAveragingEnsembleTest.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.evaluator.Evaluator;
import gov.sandia.cognition.learning.function.scalar.LinearFunction;
import gov.sandia.cognition.util.WeightedValue;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Justin Basilico
*/
public class WeightedAveragingEnsembleTest
extends AbstractWeightedEnsembleTest
{
/**
* Creates a new test.
*/
public WeightedAveragingEnsembleTest()
{
super();
}
/**
* Test of constructors of class WeightedAveragingEnsemble.
*/
@Test
public void testConstructors()
{
WeightedAveragingEnsemble<Double, Evaluator<Double, Double>> instance =
new WeightedAveragingEnsemble<Double, Evaluator<Double, Double>>();
assertNotNull(instance.getMembers());
assertTrue(instance.getMembers().isEmpty());
List<WeightedValue<Evaluator<Double, Double>>> members =
new ArrayList<WeightedValue<Evaluator<Double, Double>>>();
instance = new WeightedAveragingEnsemble<Double, Evaluator<Double, Double>>(
members);
assertSame(members, instance.getMembers());
}
@Test
public void testAdd()
{
super.testAdd();
WeightedAveragingEnsemble<Double, Evaluator<Double, Double>> instance =
new WeightedAveragingEnsemble<Double, Evaluator<Double, Double>>();
boolean exceptionThrown = false;
try
{
instance.add(new LinearFunction(), -0.1);
}
catch (IllegalArgumentException e)
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
assertEquals(0, instance.getMembers().size());
}
/**
* Test of evaluate method, of class WeightedAveragingEnsemble.
*/
@Test
public void testEvaluate()
{
WeightedAveragingEnsemble<Double, Evaluator<Double, Double>> instance =
new WeightedAveragingEnsemble<Double, Evaluator<Double, Double>>();
assertEquals(0.0, instance.evaluate(1.0), 0.0);
assertEquals(0.0, instance.evaluate(3.0), 0.0);
instance.add(new LinearFunction(0.5, 2.0));
assertEquals(2.5, instance.evaluate(1.0), 0.0);
assertEquals(3.5, instance.evaluate(3.0), 0.0);
instance.add(new LinearFunction(1.0, 0.0));
instance.add(new LinearFunction(2.0, 0.0), 2.0);
instance.add(new LinearFunction(0.0, -1.0), 0.5);
assertEquals(1.5 / 4.5, instance.evaluate(0.0), 0.0);
assertEquals(7.0 / 4.5, instance.evaluate(1.0), 0.0);
assertEquals(12.5 / 4.5, instance.evaluate(2.0), 0.0);
assertEquals(18.0 / 4.5, instance.evaluate(3.0), 0.0);
assertEquals(4.25 / 4.5, instance.evaluate(0.5), 0.0);
assertEquals(-1.25 / 4.5, instance.evaluate(-0.5), 0.0);
assertEquals(-15.0 / 4.5, instance.evaluate(-3.0), 0.0);
}
/**
* Test of evaluateAsDouble method, of class WeightedAveragingEnsemble.
*/
@Test
public void testEvaluateAsDouble()
{
WeightedAveragingEnsemble<Double, Evaluator<Double, Double>> instance =
new WeightedAveragingEnsemble<Double, Evaluator<Double, Double>>();
assertEquals(0.0, instance.evaluateAsDouble(1.0), 0.0);
assertEquals(0.0, instance.evaluateAsDouble(3.0), 0.0);
instance.add(new LinearFunction(0.5, 2.0));
assertEquals(2.5, instance.evaluateAsDouble(1.0), 0.0);
assertEquals(3.5, instance.evaluateAsDouble(3.0), 0.0);
instance.add(new LinearFunction(1.0, 0.0));
instance.add(new LinearFunction(2.0, 0.0), 2.0);
instance.add(new LinearFunction(0.0, -1.0), 0.5);
assertEquals(1.5 / 4.5, instance.evaluateAsDouble(0.0), 0.0);
assertEquals(7.0 / 4.5, instance.evaluateAsDouble(1.0), 0.0);
assertEquals(12.5 / 4.5, instance.evaluateAsDouble(2.0), 0.0);
assertEquals(18.0 / 4.5, instance.evaluateAsDouble(3.0), 0.0);
assertEquals(4.25 / 4.5, instance.evaluateAsDouble(0.5), 0.0);
assertEquals(-1.25 / 4.5, instance.evaluateAsDouble(-0.5), 0.0);
assertEquals(-15.0 / 4.5, instance.evaluateAsDouble(-3.0), 0.0);
}
}