/* * File: SimplePatternRecognizerTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Framework Lite * * Copyright March 16, 2006, 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.framework.lite; import gov.sandia.cognition.framework.CognitiveModuleState; import gov.sandia.cognition.framework.DefaultSemanticLabel; import gov.sandia.cognition.framework.DefaultSemanticNetwork; import gov.sandia.cognition.framework.SemanticNetwork; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.mtj.Vector2; import junit.framework.*; import gov.sandia.cognition.framework.SemanticLabel; import java.util.Collection; /** * This class implements JUnit tests for the following classes: * * SimplePatternRecognizer * * @author Justin Basilico * @since 1.0 */ public class SimplePatternRecognizerTest extends TestCase { /** * Creates a new instance of SimplePatternRecognizerTest. * * @param testName The test name. */ public SimplePatternRecognizerTest( String testName) { super(testName); } /** * Tests the creation of a simple pattern recognizer. * * If this test fails, contact Justin Basilico. */ public void testCreation() { DefaultSemanticNetwork testNetwork = new DefaultSemanticNetwork(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); testNetwork.addNode(a); testNetwork.addNode(b); testNetwork.addNode(c); testNetwork.setAssociation(a, b, 1.0); SimplePatternRecognizer recognizer = new SimplePatternRecognizer(testNetwork); assertEquals(3, recognizer.getInputDimensionality()); assertEquals(3, recognizer.getOutputDimensionality()); assertEquals(3, recognizer.createEmptyInputVector().getDimensionality()); } /** * Tests the getNetwork method in SimplePatternRecognizer. * * If this test fails, contact Justin Basilico. */ public void testGetNetwork() { DefaultSemanticNetwork testNetwork = new DefaultSemanticNetwork(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); DefaultSemanticLabel d = new DefaultSemanticLabel("d"); testNetwork.addNode(a); testNetwork.addNode(b); testNetwork.addNode(c); testNetwork.setAssociation(a, b, 1.0); SimplePatternRecognizer recognizer = new SimplePatternRecognizer(testNetwork); SemanticNetwork recognizerNetwork = recognizer.getNetwork(); assertEquals(3, recognizerNetwork.getNumNodes()); assertTrue(recognizerNetwork.isNode(a)); assertTrue(recognizerNetwork.isNode(b)); assertTrue(recognizerNetwork.isNode(c)); assertFalse(recognizerNetwork.isNode(d)); testNetwork.addNode(d); assertFalse(recognizerNetwork.isNode(d)); assertTrue(recognizerNetwork.getNodes().contains(a)); assertTrue(recognizerNetwork.getNodes().contains(b)); assertTrue(recognizerNetwork.getNodes().contains(c)); assertTrue(recognizerNetwork.getOutLinks(a).contains(b)); assertTrue(!recognizerNetwork.getOutLinks(a).contains(c)); assertEquals(1.0, recognizerNetwork.getAssociation(a, b)); assertEquals(0.0, recognizerNetwork.getAssociation(b, a)); } /** * Tests the recognize method in SimplePatternRecognizer. * * If this test fails, contact Justin Basilico. */ public void testRecognize() { DefaultSemanticNetwork testNetwork = new DefaultSemanticNetwork(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); testNetwork.addNode(a); testNetwork.addNode(b); testNetwork.addNode(c); testNetwork.setAssociation(a, b, 1.0); SimplePatternRecognizer recognizer = new SimplePatternRecognizer(testNetwork); CognitiveModuleState state = recognizer.initialState(); Vector inputs = recognizer.createEmptyInputVector(); inputs.setElement(0, 1.0); Vector outputs = recognizer.recognize(state, inputs); assertNotNull(outputs); assertEquals(3, outputs.getDimensionality()); assertEquals(1.0, outputs.getElement(0)); assertEquals(0.0, outputs.getElement(1)); assertEquals(0.0, outputs.getElement(2)); inputs = recognizer.createEmptyInputVector(); outputs = recognizer.recognize(state, inputs); assertNotNull(outputs); assertEquals(3, outputs.getDimensionality()); assertEquals(0.0, outputs.getElement(0)); assertEquals(1.0, outputs.getElement(1)); assertEquals(0.0, outputs.getElement(2)); } public static Test suite() { TestSuite suite = new TestSuite(SimplePatternRecognizerTest.class); return suite; } /** * Test of clone method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testClone() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); instance.setAssociation(a, b, 1.0); instance.setAssociation(b, b, 0.5); SimplePatternRecognizer clone = instance.clone(); assertNotNull(clone); assertNotSame(clone, instance); assertTrue(clone.isLabel(a)); assertTrue(clone.isLabel(b)); assertEquals(1.0, clone.getAssociation(a, b)); assertEquals(0.5, clone.getAssociation(b, b)); instance.setAssociation(a, b, 2.0); assertEquals(2.0, instance.getAssociation(a, b)); assertEquals(1.0, clone.getAssociation(a, b)); instance.addNode(c); assertTrue(instance.isLabel(c)); assertFalse(clone.isLabel(c)); instance.removeNode(b); assertFalse(instance.isLabel(b)); assertTrue(clone.isLabel(b)); } /** * Test of initialState method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testInitialState() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); instance.addNode(new DefaultSemanticLabel("a")); instance.addNode(new DefaultSemanticLabel("b")); SimplePatternRecognizerState state = instance.initialState(); assertNotNull(state); assertEquals(2, state.getStateVector().getDimensionality()); } /** * Test of addNode method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testAddNode() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); assertFalse(instance.isLabel(a)); instance.addNode(a); assertTrue(instance.isLabel(a)); assertTrue(instance.isInputLabel(a)); assertTrue(instance.isOutputLabel(a)); assertTrue(instance.getAllLabels().contains(a)); } /** * Test of removeNode method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testRemoveNode() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); instance.addNode(a); instance.addNode(b); instance.setAssociation(a, b, 1.0); instance.setAssociation(b, b, 0.5); assertTrue(instance.isLabel(b)); instance.removeNode(b); assertFalse(instance.isLabel(b)); assertFalse(instance.getAllLabels().contains(b)); } public void testGetAssociation() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); assertEquals(0.0, instance.getAssociation(a, b)); instance.setAssociation(a, b, 1.0); assertEquals(1.0, instance.getAssociation(a, b)); assertEquals(0.0, instance.getAssociation(a, c)); } /** * Test of setAssociation method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testSetAssociation() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); instance.addNode(a); instance.addNode(b); instance.setAssociation(a, b, 1.0); assertEquals(1.0, instance.getAssociation(a, b)); assertEquals(0.0, instance.getAssociation(b, a)); instance.setAssociation(a, b, 2.0); assertEquals(2.0, instance.getAssociation(a, b)); } /** * Test of getIndex method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetIndex() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); instance.addNode(a); instance.addNode(b); assertEquals(0, instance.getIndex(a)); assertEquals(1, instance.getIndex(b)); } /** * Test of isLabel method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testIsLabel() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); assertTrue(instance.isLabel(a)); assertTrue(instance.isLabel(b)); assertFalse(instance.isLabel(c)); instance.removeNode(b); assertFalse(instance.isLabel(b)); } /** * Test of isInputLabel method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testIsInputLabel() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); assertTrue(instance.isInputLabel(a)); assertTrue(instance.isInputLabel(b)); assertFalse(instance.isInputLabel(c)); instance.removeNode(b); assertFalse(instance.isInputLabel(b)); } /** * Test of isOutputLabel method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testIsOutputLabel() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); assertTrue(instance.isOutputLabel(a)); assertTrue(instance.isOutputLabel(b)); assertFalse(instance.isOutputLabel(c)); instance.removeNode(b); assertFalse(instance.isOutputLabel(b)); } /** * Test of getAllLabels method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetAllLabels() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); Collection<SemanticLabel> result = instance.getAllLabels(); assertTrue(result.contains(a)); assertTrue(result.contains(b)); assertFalse(result.contains(c)); } /** * Test of trySetInputLabel method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testTrySetInputLabel() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); instance.addNode(a); assertTrue(instance.isInputLabel(a)); assertTrue(instance.trySetInputLabel(a, true)); assertTrue(instance.isInputLabel(a)); assertFalse(instance.trySetInputLabel(a, false)); assertTrue(instance.isInputLabel(a)); assertFalse(instance.trySetInputLabel(b, true)); } /** * Test of trySetOutputLabel method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testTrySetOutputLabel() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); instance.addNode(a); assertTrue(instance.isOutputLabel(a)); assertTrue(instance.trySetOutputLabel(a, true)); assertTrue(instance.isOutputLabel(a)); assertFalse(instance.trySetOutputLabel(a, false)); assertTrue(instance.isOutputLabel(a)); assertFalse(instance.trySetOutputLabel(b, true)); } /** * Test of buildNodeToIDMap method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testBuildNodeToIDMap() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); instance.buildNodeToIDMap(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); instance.addNode(a); instance.buildNodeToIDMap(); } /** * Test of createEmptyInputVector method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testCreateEmptyInputVector() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); Vector result = instance.createEmptyInputVector(); assertNotNull(result); assertEquals(0, result.getDimensionality()); assertEquals(VectorFactory.getDefault().createVector(0), result); instance.addNode(new DefaultSemanticLabel("a")); instance.addNode(new DefaultSemanticLabel("b")); result = instance.createEmptyInputVector(); assertNotNull(result); assertEquals(2, result.getDimensionality()); assertEquals(new Vector2(), result); } /** * Test of getInputDimensionality method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetInputDimensionality() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); assertEquals(0, instance.getInputDimensionality()); instance.addNode(new DefaultSemanticLabel("a")); instance.addNode(new DefaultSemanticLabel("b")); assertEquals(2, instance.getInputDimensionality()); int result = instance.getInputDimensionality(); } /** * Test of getOutputDimensionality method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetOutputDimensionality() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); assertEquals(0, instance.getOutputDimensionality()); instance.addNode(new DefaultSemanticLabel("a")); instance.addNode(new DefaultSemanticLabel("b")); assertEquals(2, instance.getOutputDimensionality()); int result = instance.getOutputDimensionality(); } /** * Test of getInputLabels method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetInputLabels() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); Collection<SemanticLabel> result = instance.getInputLabels(); assertTrue(result.contains(a)); assertTrue(result.contains(b)); assertFalse(result.contains(c)); } /** * Test of getOutputLabels method, of class gov.sandia.isrc.cognition.framework.lite.SimplePatternRecognizer. */ public void testGetOutputLabels() { SimplePatternRecognizer instance = new SimplePatternRecognizer(); DefaultSemanticLabel a = new DefaultSemanticLabel("a"); DefaultSemanticLabel b = new DefaultSemanticLabel("b"); DefaultSemanticLabel c = new DefaultSemanticLabel("c"); instance.addNode(a); instance.addNode(b); Collection<SemanticLabel> result = instance.getOutputLabels(); assertTrue(result.contains(a)); assertTrue(result.contains(b)); assertFalse(result.contains(c)); } }