/* * File: CogxelVectorConverterTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright June 26, 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.framework.learning; import gov.sandia.cognition.framework.learning.converter.CogxelVectorConverter; import gov.sandia.cognition.framework.DefaultSemanticIdentifierMap; import gov.sandia.cognition.framework.DefaultSemanticLabel; import gov.sandia.cognition.framework.lite.CogxelStateLite; import gov.sandia.cognition.math.matrix.DimensionalityMismatchException; import gov.sandia.cognition.math.matrix.mtj.DenseVectorFactoryMTJ; import gov.sandia.cognition.framework.CogxelFactory; import gov.sandia.cognition.framework.CogxelState; import gov.sandia.cognition.framework.DefaultCogxel; import gov.sandia.cognition.framework.DefaultCogxelFactory; import gov.sandia.cognition.framework.SemanticIdentifierMap; import gov.sandia.cognition.framework.SemanticLabel; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.mtj.Vector3; import java.util.ArrayList; import junit.framework.TestCase; /** * This class implements JUnit tests for the following classes: CogxelVectorConverter * * @author Justin Basilico * @since 2.0 */ public class CogxelVectorConverterTest extends TestCase { public CogxelVectorConverterTest( String testName) { super(testName); } protected static int LABEL_COUNT = 0; public static CogxelVectorConverter createInstance() { int N = (int) (Math.random() * 10) + 2; ArrayList<SemanticLabel> labels = new ArrayList<SemanticLabel>( N ); for( int n = 0; n < N; n++ ) { LABEL_COUNT++; labels.add( new DefaultSemanticLabel( "Label" + LABEL_COUNT ) ); } return new CogxelVectorConverter( labels ); } public void testConstructors() { SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); SemanticLabel[] array = new SemanticLabel[] { a, b, c }; ArrayList<SemanticLabel> list = new ArrayList<SemanticLabel>(); list.add(a); list.add(b); list.add(c); SemanticIdentifierMap map = new DefaultSemanticIdentifierMap(); VectorFactory<?> defaultVectorFactory = VectorFactory.getDefault(); CogxelFactory defaultCogxelFactory = DefaultCogxelFactory.INSTANCE; VectorFactory<?> vectorFactory = new DenseVectorFactoryMTJ(); CogxelFactory cogxelFactory = new DefaultCogxelFactory(); CogxelVectorConverter instance = new CogxelVectorConverter(); assertNotNull(instance.getLabels()); assertEquals(0, instance.getLabels().size()); assertSame(instance.getSemanticIdentifierMap(), null); assertSame(instance.getVectorFactory(), defaultVectorFactory); assertSame(instance.getCogxelFactory(), defaultCogxelFactory); instance = new CogxelVectorConverter(array); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), null); assertSame(instance.getVectorFactory(), defaultVectorFactory); assertSame(instance.getCogxelFactory(), defaultCogxelFactory); instance = new CogxelVectorConverter(list); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), null); assertSame(instance.getVectorFactory(), defaultVectorFactory); assertSame(instance.getCogxelFactory(), defaultCogxelFactory); instance = new CogxelVectorConverter(array, map); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), map); assertSame(instance.getVectorFactory(), defaultVectorFactory); assertSame(instance.getCogxelFactory(), defaultCogxelFactory); instance = new CogxelVectorConverter(list, map); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), map); assertSame(instance.getVectorFactory(), defaultVectorFactory); assertSame(instance.getCogxelFactory(), defaultCogxelFactory); instance = new CogxelVectorConverter(array, map, vectorFactory, cogxelFactory); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), map); assertSame(instance.getVectorFactory(), vectorFactory); assertSame(instance.getCogxelFactory(), cogxelFactory); instance = new CogxelVectorConverter(list, map, vectorFactory, cogxelFactory); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), map); assertSame(instance.getVectorFactory(), vectorFactory); assertSame(instance.getCogxelFactory(), cogxelFactory); instance = new CogxelVectorConverter(instance); assertNotNull(instance.getLabels()); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertSame(instance.getSemanticIdentifierMap(), map); assertSame(instance.getVectorFactory(), vectorFactory); assertSame(instance.getCogxelFactory(), cogxelFactory); } /** * Test of clone method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testClone() { CogxelVectorConverter instance = new CogxelVectorConverter(); SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); instance.addLabel(a); instance.addLabel(b); instance.addLabel(c); assertEquals(3, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertEquals(null, instance.getSemanticIdentifierMap()); assertSame(instance.getVectorFactory(), VectorFactory.getDefault()); assertSame(instance.getCogxelFactory(), DefaultCogxelFactory.INSTANCE); CogxelVectorConverter clone = instance.clone(); assertNotSame(instance, clone); assertNotSame(clone.getLabels(), instance.getLabels()); assertEquals(3, clone.getLabels().size()); assertEquals(a, clone.getLabels().get(0)); assertEquals(b, clone.getLabels().get(1)); assertEquals(c, clone.getLabels().get(2)); assertEquals(null, clone.getSemanticIdentifierMap()); assertSame(clone.getVectorFactory(), VectorFactory.getDefault()); assertSame(clone.getCogxelFactory(), DefaultCogxelFactory.INSTANCE); } /** * Test of addLabel method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testAddLabel() { CogxelVectorConverter instance = new CogxelVectorConverter(); SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); assertEquals(0, instance.getLabels().size()); instance.addLabel(a); assertEquals(1, instance.getLabels().size()); instance.addLabel(b); assertEquals(2, instance.getLabels().size()); instance.addLabel(c); assertEquals(3, instance.getLabels().size()); instance.addLabel(a); assertEquals(4, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertEquals(a, instance.getLabels().get(3)); } /** * Test of addLabels method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testAddLabels() { CogxelVectorConverter instance = new CogxelVectorConverter(); SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); ArrayList<SemanticLabel> labels = new ArrayList<SemanticLabel>(); labels.add(b); labels.add(c); labels.add(a); assertEquals(0, instance.getLabels().size()); instance.addLabel(a); assertEquals(1, instance.getLabels().size()); instance.addLabels(labels); assertEquals(4, instance.getLabels().size()); assertEquals(a, instance.getLabels().get(0)); assertEquals(b, instance.getLabels().get(1)); assertEquals(c, instance.getLabels().get(2)); assertEquals(a, instance.getLabels().get(3)); } /** * Test of fromCogxels method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testFromCogxels() { CogxelVectorConverter instance = new CogxelVectorConverter(); SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); instance.addLabel(a); instance.addLabel(b); instance.addLabel(c); SemanticIdentifierMap map = new DefaultSemanticIdentifierMap(); instance.setSemanticIdentifierMap(map); CogxelState cogxels = new CogxelStateLite(); cogxels.addCogxel(new DefaultCogxel(map.findIdentifier(a), 0.0)); cogxels.addCogxel(new DefaultCogxel(map.findIdentifier(b), -1.0)); cogxels.addCogxel(new DefaultCogxel(map.findIdentifier(c), 2.0)); Vector v = instance.fromCogxels(cogxels); assertNotNull(v); assertEquals(3, v.getDimensionality()); assertEquals(new Vector3(0.0, -1.0, 2.0), v); } /** * Test of toCogxels method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testToCogxels() { CogxelVectorConverter instance = new CogxelVectorConverter(); SemanticLabel a = new DefaultSemanticLabel("a"); SemanticLabel b = new DefaultSemanticLabel("b"); SemanticLabel c = new DefaultSemanticLabel("c"); instance.addLabel(a); instance.addLabel(b); instance.addLabel(c); SemanticIdentifierMap map = new DefaultSemanticIdentifierMap(); instance.setSemanticIdentifierMap(map); CogxelState cogxels = new CogxelStateLite(); Vector v = new Vector3(0.0, -1.0, 2.0); instance.toCogxels(v, cogxels); assertEquals(0.0, cogxels.getCogxelActivation(map.findIdentifier(a))); assertEquals(-1.0, cogxels.getCogxelActivation(map.findIdentifier(b))); assertEquals(2.0, cogxels.getCogxelActivation(map.findIdentifier(c))); instance.addLabel(a); boolean exceptionThrown = false; try { instance.toCogxels(v, cogxels); } catch ( DimensionalityMismatchException e ) { exceptionThrown = true; } finally { assertTrue(exceptionThrown); } } /** * Test of equals method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testEquals() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertTrue(instance.equals(instance)); assertTrue(instance.equals(new CogxelVectorConverter())); assertFalse(instance.equals(null)); instance.addLabel(new DefaultSemanticLabel("a")); CogxelVectorConverter instance2 = new CogxelVectorConverter(); instance2.addLabel(new DefaultSemanticLabel("a")); assertTrue(instance.equals(instance)); assertTrue(instance.equals(instance2)); assertTrue(instance2.equals(instance)); instance.addLabel(new DefaultSemanticLabel("b")); assertTrue(instance.equals(instance)); assertFalse(instance.equals(instance2)); assertFalse(instance2.equals(instance)); assertTrue(instance.equals(instance.clone())); } /** * Test of createEmptyVector method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testCreateEmptyVector() { CogxelVectorConverter instance = new CogxelVectorConverter(); instance.addLabel(new DefaultSemanticLabel("a")); Vector v = instance.createEmptyVector(); assertEquals(1, v.getDimensionality(), 1); assertEquals(0.0, v.norm2()); assertNotSame(instance.createEmptyVector(), v); instance.addLabel(new DefaultSemanticLabel("b")); v = instance.createEmptyVector(); assertEquals(2, v.getDimensionality()); assertEquals(0.0, v.norm2()); } /** * Test of getDimensionality method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testGetDimensionality() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertEquals(0, instance.getDimensionality()); instance.addLabel(new DefaultSemanticLabel("a")); assertEquals(1, instance.getDimensionality()); instance.addLabel(new DefaultSemanticLabel("b")); assertEquals(2, instance.getDimensionality()); instance.addLabel(new DefaultSemanticLabel("c")); assertEquals(3, instance.getDimensionality()); instance.setLabels(new ArrayList<SemanticLabel>()); assertEquals(0, instance.getDimensionality()); } /** * Test of getSemanticIdentifierMap method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testGetSemanticIdentifierMap() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertNull(instance.getSemanticIdentifierMap()); SemanticIdentifierMap map = new DefaultSemanticIdentifierMap(); instance.setSemanticIdentifierMap(map); assertSame(instance.getSemanticIdentifierMap(), map); } /** * Test of setSemanticIdentifierMap method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testSetSemanticIdentifierMap() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertNull(instance.getSemanticIdentifierMap()); SemanticIdentifierMap map = new DefaultSemanticIdentifierMap(); instance.setSemanticIdentifierMap(map); assertSame(instance.getSemanticIdentifierMap(), map); instance.setSemanticIdentifierMap(null); assertNull(instance.getSemanticIdentifierMap()); } /** * Test of getLabels method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testGetLabels() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertNotNull(instance.getLabels()); assertTrue(instance.getLabels().isEmpty()); ArrayList<SemanticLabel> labels = new ArrayList<SemanticLabel>(); labels.add(new DefaultSemanticLabel("a")); labels.add(new DefaultSemanticLabel("b")); labels.add(new DefaultSemanticLabel("c")); instance.setLabels(labels); assertSame(instance.getLabels(), labels); } /** * Test of setLabels method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testSetLabels() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertNotNull(instance.getLabels()); assertTrue(instance.getLabels().isEmpty()); ArrayList<SemanticLabel> labels = new ArrayList<SemanticLabel>(); labels.add(new DefaultSemanticLabel("a")); labels.add(new DefaultSemanticLabel("b")); labels.add(new DefaultSemanticLabel("c")); instance.setLabels(labels); assertSame(instance.getLabels(), labels); labels = new ArrayList<SemanticLabel>(); instance.setLabels(labels); assertSame(instance.getLabels(), labels); instance.setLabels(null); assertNull(instance.getLabels()); } /** * Test of getVectorFactory method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testGetVectorFactory() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertSame(instance.getVectorFactory(), VectorFactory.getDefault()); VectorFactory<?> factory = new DenseVectorFactoryMTJ(); instance.setVectorFactory(factory); assertSame(instance.getVectorFactory(), factory); } /** * Test of setVectorFactory method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testSetVectorFactory() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertSame(instance.getVectorFactory(), VectorFactory.getDefault()); VectorFactory<?> factory = new DenseVectorFactoryMTJ(); instance.setVectorFactory(factory); assertSame(instance.getVectorFactory(), factory); instance.setVectorFactory(null); assertNull(instance.getVectorFactory()); } /** * Test of getCogxelFactory method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testGetCogxelFactory() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertSame(instance.getCogxelFactory(), DefaultCogxelFactory.INSTANCE); CogxelFactory factory = new DefaultCogxelFactory(); instance.setCogxelFactory(factory); assertSame(instance.getCogxelFactory(), factory); } /** * Test of setCogxelFactory method, of class gov.sandia.cognition.framework.learning.CogxelVectorConverter. */ public void testSetCogxelFactory() { CogxelVectorConverter instance = new CogxelVectorConverter(); assertSame(instance.getCogxelFactory(), DefaultCogxelFactory.INSTANCE); CogxelFactory factory = new DefaultCogxelFactory(); instance.setCogxelFactory(factory); assertSame(instance.getCogxelFactory(), factory); instance.setCogxelFactory(null); assertNull(instance.getCogxelFactory()); } }