/* * File: ProjectronTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry Learning Core * * Copyright May 04, 2011, 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. */ package gov.sandia.cognition.learning.algorithm.perceptron.kernel; import gov.sandia.cognition.learning.data.DefaultInputOutputPair; import gov.sandia.cognition.learning.function.kernel.LinearKernel; import gov.sandia.cognition.math.matrix.mtj.Vector2; import gov.sandia.cognition.learning.function.categorization.DefaultKernelBinaryCategorizer; import gov.sandia.cognition.learning.function.kernel.Kernel; import gov.sandia.cognition.learning.function.kernel.PolynomialKernel; import gov.sandia.cognition.math.matrix.Vector; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class Projectron. * * @author Justin Basilico * @since 3.3.0 */ public class ProjectronTest extends OnlineKernelBinaryLearnerTestHarness<DefaultKernelBinaryCategorizer<Vector>> { /** * Creates a new test. */ public ProjectronTest() { } @Override protected Projectron<Vector> createInstance( final Kernel<? super Vector> kernel) { return new Projectron<Vector>(kernel); } /** * Test of constructors of class Projectron. */ @Test public void testConstructors() { Kernel<? super Vector> kernel = null; double eta = Projectron.DEFAULT_ETA; Projectron<Vector> instance = new Projectron<Vector>(); assertSame(kernel, instance.getKernel()); assertEquals(eta, instance.getEta(), 0.0); kernel = new PolynomialKernel( 1 + this.random.nextInt(10), this.random.nextDouble()); instance = new Projectron<Vector>(kernel); assertSame(kernel, instance.getKernel()); assertEquals(eta, instance.getEta(), 0.0); eta = random.nextDouble(); instance = new Projectron<Vector>(kernel, eta); assertSame(kernel, instance.getKernel()); assertEquals(eta, instance.getEta(), 0.0); } /** * Test of update method, of class Projectron. */ @Test public void testUpdate() { Projectron<Vector> instance = this.createInstance(new LinearKernel()); DefaultKernelBinaryCategorizer<Vector> learned = instance.createInitialLearnedObject();; Vector input = new Vector2(2.0, 3.0); Boolean output = true; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(1, learned.getExamples().size()); assertEquals(output, learned.evaluate(input)); input = new Vector2(4.0, 4.0); output = true; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(1, learned.getExamples().size()); assertEquals(output, learned.evaluate(input)); input = new Vector2(1.0, -1.0); output = false; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(output, learned.evaluate(input)); input = new Vector2(1.0, -1.0); output = false; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(output, learned.evaluate(input)); input = new Vector2(2.0, 3.0); output = true; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(output, learned.evaluate(input)); input = new Vector2(2.0, -3.0); output = false; instance.update(learned, DefaultInputOutputPair.create(input, output)); assertEquals(output, learned.evaluate(input)); } /** * Test of getEta method, of class Projectron. */ @Test public void testGetEta() { this.testSetEta(); } /** * Test of setEta method, of class Projectron. */ @Test public void testSetEta() { double eta = Projectron.DEFAULT_ETA; Projectron<Vector> instance = this.createInstance(null); assertEquals(eta, instance.getEta(), 0.0); double[] goodValues = {0.0, 0.1, 0.001, 1.0, 2.0, random.nextDouble()}; for (double goodValue : goodValues) { eta = goodValue; instance.setEta(eta); assertEquals(eta, instance.getEta(), 0.0); } double[] badValues = {-0.1, -1.0, -1.0, -random.nextDouble() }; for (double badValue : badValues) { boolean exceptionThrown = false; try { instance.setEta(badValue); } catch (IllegalArgumentException e) { exceptionThrown = true; } finally { assertTrue(exceptionThrown); } assertEquals(eta, instance.getEta(), 0.0); } } }