/* * File: RegressionTreeNodeTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright November 30, 2007, 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.learning.algorithm.tree; import gov.sandia.cognition.learning.function.categorization.VectorElementThresholdCategorizer; import gov.sandia.cognition.learning.function.kernel.LinearKernel; import junit.framework.*; import gov.sandia.cognition.learning.function.scalar.KernelScalarFunction; import gov.sandia.cognition.math.matrix.Vectorizable; import gov.sandia.cognition.math.matrix.mtj.Vector3; import gov.sandia.cognition.util.DefaultWeightedValue; import java.util.Collections; /** * This class implements JUnit tests for the following classes: * * RegressionTreeNode * * @author Justin Basilico * @since 2.0 */ public class RegressionTreeNodeTest extends TestCase { /** * Creates a new RegressionTreeNodeTest. * * @param testName The test name. */ public RegressionTreeNodeTest( String testName) { super(testName); } /** * Test of constructors of class gov.sandia.cognition.learning.algorithm.tree.RegressionTreeNode. */ public void testConstructors() { DecisionTreeNode<Vectorizable, Double> parent = null; RegressionTreeNode<Vectorizable, Object> instance = new RegressionTreeNode<Vectorizable, Object>(); assertSame(parent, instance.getParent()); assertNull(instance.getScalarFunction()); assertNull(instance.getDecider()); assertEquals(RegressionTreeNode.DEFAULT_VALUE, instance.getValue()); assertNull(instance.getIncomingValue()); parent = new RegressionTreeNode<Vectorizable, Object>(); double value = Math.random(); instance = new RegressionTreeNode<Vectorizable, Object>(parent, value); assertSame(parent, instance.getParent()); assertNull(instance.getScalarFunction()); assertNull(instance.getDecider()); assertEquals(value, instance.getValue()); assertNull(instance.getIncomingValue()); VectorElementThresholdCategorizer decider = new VectorElementThresholdCategorizer(4, Math.random()); instance = new RegressionTreeNode<Vectorizable, Object>(parent, decider, value); assertSame(parent, instance.getParent()); assertNull(instance.getScalarFunction()); assertSame(decider, instance.getDecider()); assertEquals(value, instance.getValue()); assertNull(instance.getIncomingValue()); KernelScalarFunction<Vectorizable> scalarFunction = new KernelScalarFunction<Vectorizable>(); instance = new RegressionTreeNode<Vectorizable, Object>(parent, scalarFunction, value); assertSame(parent, instance.getParent()); assertSame(scalarFunction, instance.getScalarFunction()); assertNull(instance.getDecider()); assertEquals(value, instance.getValue()); assertNull(instance.getIncomingValue()); Object incomingValue = "something"; instance = new RegressionTreeNode<Vectorizable, Object>(parent, scalarFunction, value, incomingValue); assertSame(parent, instance.getParent()); assertSame(scalarFunction, instance.getScalarFunction()); assertNull(instance.getDecider()); assertEquals(value, instance.getValue()); assertEquals(incomingValue, instance.getIncomingValue()); instance = new RegressionTreeNode<Vectorizable, Object>(parent, decider, scalarFunction, value, incomingValue); assertSame(parent, instance.getParent()); assertSame(scalarFunction, instance.getScalarFunction()); assertSame(decider, instance.getDecider()); assertEquals(value, instance.getValue()); assertEquals(incomingValue, instance.getIncomingValue()); } /** * Test of clone method, of class gov.sandia.cognition.learning.algorithm.tree.RegressionTreeNode. */ public void testClone() { VectorElementThresholdCategorizer decider = new VectorElementThresholdCategorizer(4, Math.random()); KernelScalarFunction<Vectorizable> scalarFunction = new KernelScalarFunction<Vectorizable>(); Object incomingValue = "something"; double value = Math.random(); RegressionTreeNode<Vectorizable, Object> instance = new RegressionTreeNode<Vectorizable, Object>(null, decider, scalarFunction, value, incomingValue); RegressionTreeNode<Vectorizable, Object> clone = instance.clone(); assertSame(scalarFunction, instance.getScalarFunction()); assertSame(decider, instance.getDecider()); assertEquals(incomingValue, instance.getIncomingValue()); } /** * Test of getOutput method, of class gov.sandia.cognition.learning.algorithm.tree.RegressionTreeNode. */ public void testGetOutput() { double value = Math.random(); RegressionTreeNode<Vectorizable, Object> instance = new RegressionTreeNode<Vectorizable, Object>(null, value); assertEquals(value, instance.getOutput(new Vector3())); KernelScalarFunction<Vectorizable> scalarFunction = new KernelScalarFunction<Vectorizable>(); scalarFunction.setKernel(LinearKernel.getInstance()); scalarFunction.setBias(Math.random()); scalarFunction.setExamples(Collections.singleton( new DefaultWeightedValue<Vector3>( new Vector3(Math.random(), Math.random(), Math.random()), Math.random()))); instance.setScalarFunction(scalarFunction); for (int i = 0; i < 5; i++) { Vector3 input = new Vector3( Math.random(), Math.random(), Math.random()); double expected = scalarFunction.evaluate(input); assertEquals(expected, (double) instance.getOutput(input)); } } /** * Test of getScalarFunction method, of class gov.sandia.cognition.learning.algorithm.tree.RegressionTreeNode. */ public void testGetScalarFunction() { this.testSetScalarFunction(); } /** * Test of setScalarFunction method, of class gov.sandia.cognition.learning.algorithm.tree.RegressionTreeNode. */ public void testSetScalarFunction() { RegressionTreeNode<Vectorizable, Object> instance = new RegressionTreeNode<Vectorizable, Object>(); assertNull(instance.getScalarFunction()); KernelScalarFunction<Vectorizable> scalarFunction = new KernelScalarFunction<Vectorizable>(); instance.setScalarFunction(scalarFunction); assertSame(scalarFunction, instance.getScalarFunction()); instance.setScalarFunction(null); assertNull(instance.getScalarFunction()); } /** * Test of getValue method, of class RegressionTreeNode. */ public void testGetValue() { this.testSetValue(); } /** * Test of setValue method, of class RegressionTreeNode. */ public void testSetValue() { RegressionTreeNode<Vectorizable, Object> instance = new RegressionTreeNode<Vectorizable, Object>(); assertEquals(RegressionTreeNode.DEFAULT_VALUE, instance.getValue()); double value = Math.random(); instance.setValue(value); assertEquals(value, instance.getValue()); value = -Math.random(); instance.setValue(value); assertEquals(value, instance.getValue()); } }