/*
* File: AdditiveEnsembleTest.java
* Authors: Justin Basilico
* Project: Cognitive Foundry Learning Core
*
* Copyright 2011 Cognitive Foundry. All rights reserved.
*/
package gov.sandia.cognition.learning.algorithm.ensemble;
import java.util.List;
import gov.sandia.cognition.evaluator.Evaluator;
import gov.sandia.cognition.learning.function.scalar.LinearFunction;
import java.util.ArrayList;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class AdditiveEnsemble.
*
* @author Justin Basilico
* @since 3.3.3
*/
public class AdditiveEnsembleTest
{
/**
* Creates a new test.
*/
public AdditiveEnsembleTest()
{
super();
}
/**
* Test of constructors of class AdditiveEnsemble.
*/
@Test
public void testConstructors()
{
double bias = 0.0;
AdditiveEnsemble<Double, Evaluator<Double, Double>> instance =
new AdditiveEnsemble<Double, Evaluator<Double, Double>>();
assertNotNull(instance.getMembers());
assertTrue(instance.getMembers().isEmpty());
assertEquals(bias, instance.getBias(), 0.0);
List<Evaluator<Double, Double>> members =
new ArrayList<Evaluator<Double, Double>>();
instance = new AdditiveEnsemble<Double, Evaluator<Double, Double>>(
members);
assertSame(members, instance.getMembers());
assertEquals(bias, instance.getBias(), 0.0);
bias = 3.3;
instance = new AdditiveEnsemble<Double, Evaluator<Double, Double>>(
members, bias);
assertSame(members, instance.getMembers());
assertEquals(bias, instance.getBias(), 0.0);
}
/**
* Test of evaluate method, of class AdditiveEnsemble.
*/
@Test
public void testEvaluate()
{
AdditiveEnsemble<Double, Evaluator<Double, Double>> instance =
new AdditiveEnsemble<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));
instance.add(new LinearFunction(0.0, -1.0));
assertEquals(1.0, instance.evaluate(0.0), 0.0);
assertEquals(4.5, instance.evaluate(1.0), 0.0);
assertEquals(8.0, instance.evaluate(2.0), 0.0);
assertEquals(11.5, instance.evaluate(3.0), 0.0);
assertEquals(2.75, instance.evaluate(0.5), 0.0);
assertEquals(-0.75, instance.evaluate(-0.5), 0.0);
assertEquals(-9.5, instance.evaluate(-3.0), 0.0);
// Make sure the bias is used.
instance.setBias(0.5);
assertEquals(1.5, instance.evaluate(0.0), 0.0);
assertEquals(5.0, instance.evaluate(1.0), 0.0);
}
/**
* Test of evaluateAsDouble method, of class AdditiveEnsemble.
*/
@Test
public void testEvaluateAsDouble()
{
AdditiveEnsemble<Double, Evaluator<Double, Double>> instance =
new AdditiveEnsemble<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));
instance.add(new LinearFunction(0.0, -1.0));
assertEquals(1.0, instance.evaluateAsDouble(0.0), 0.0);
assertEquals(4.5, instance.evaluateAsDouble(1.0), 0.0);
assertEquals(8.0, instance.evaluateAsDouble(2.0), 0.0);
assertEquals(11.5, instance.evaluateAsDouble(3.0), 0.0);
assertEquals(2.75, instance.evaluateAsDouble(0.5), 0.0);
assertEquals(-0.75, instance.evaluateAsDouble(-0.5), 0.0);
assertEquals(-9.5, instance.evaluateAsDouble(-3.0), 0.0);
// Make sure the bias is used.
instance.setBias(0.5);
assertEquals(1.5, instance.evaluateAsDouble(0.0), 0.0);
assertEquals(5.0, instance.evaluateAsDouble(1.0), 0.0);
}
@Test
public void testGetBias()
{
this.testSetBias();
}
@Test
public void testSetBias()
{
double bias = 0.0;
AdditiveEnsemble<Double, Evaluator<Double, Double>> instance =
new AdditiveEnsemble<Double, Evaluator<Double, Double>>();
assertEquals(bias, instance.getBias(), 0.0);
bias = 1.3;
instance.setBias(bias);
assertEquals(bias, instance.getBias(), 0.0);
bias = -3.1;
instance.setBias(bias);
assertEquals(bias, instance.getBias(), 0.0);
}
}