/* * File: EntropyGlobalTermWeighterTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright April 29, 2009, 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.text.term.vector.weighter.global; import gov.sandia.cognition.math.matrix.DimensionalityMismatchException; import gov.sandia.cognition.math.matrix.SparseVectorFactory; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.mtj.Vector3; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class EntropyGlobalTermWeighter. * * @author Justin Basilico * @since 3.0 */ public class EntropyGlobalTermWeighterTest { /** * Creates a new test. */ public EntropyGlobalTermWeighterTest() { } /** * Test of constructors of class EntropyGlobalTermWeighter. */ @Test public void testConstructors() { VectorFactory<? extends Vector> vectorFactory = SparseVectorFactory.getDefault(); EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); assertSame(vectorFactory, instance.getVectorFactory()); assertNull(instance.getEntropy()); vectorFactory = VectorFactory.getDefault(); instance = new EntropyGlobalTermWeighter(vectorFactory); assertSame(vectorFactory, instance.getVectorFactory()); assertNull(instance.getEntropy()); } /** * Test of clone method, of class EntropyGlobalTermWeighter. */ @Test public void testClone() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); EntropyGlobalTermWeighter clone = instance.clone(); assertNotSame(clone, instance); assertEquals(instance.getDimensionality(), clone.getDimensionality()); assertEquals(instance.getDocumentCount(), clone.getDocumentCount()); assertEquals(instance.getTermDocumentFrequencies(), clone.getTermDocumentFrequencies()); assertEquals(instance.getTermGlobalFrequencies(), clone.getTermDocumentFrequencies()); assertEquals(instance.getTermEntropiesSum(), clone.getTermEntropiesSum()); assertEquals(instance.getEntropy(), clone.getEntropy()); instance.add(new Vector3(3.0, 0.0, 1.0)); clone = instance.clone(); assertNotSame(clone, instance); assertEquals(instance.getDimensionality(), clone.getDimensionality()); assertEquals(instance.getDocumentCount(), clone.getDocumentCount()); assertEquals(instance.getTermDocumentFrequencies(), clone.getTermDocumentFrequencies()); assertNotSame(instance.getTermDocumentFrequencies(), clone.getTermDocumentFrequencies()); assertEquals(instance.getTermGlobalFrequencies(), clone.getTermGlobalFrequencies()); assertNotSame(instance.getTermGlobalFrequencies(), clone.getTermGlobalFrequencies()); assertEquals(instance.getTermEntropiesSum(), clone.getTermEntropiesSum()); assertNotSame(instance.getTermEntropiesSum(), clone.getTermEntropiesSum()); assertEquals(instance.getEntropy(), clone.getEntropy()); assertNotSame(instance.getEntropy(), clone.getEntropy()); } /** * Test of add method, of class EntropyGlobalTermWeighter. */ @Test public void testAdd() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); assertEquals(0, instance.getDocumentCount()); assertNull(instance.getTermDocumentFrequencies()); instance.add(new Vector3(3.0, 0.0, 1.0)); assertEquals(1, instance.getDocumentCount()); assertEquals(new Vector3(1.0, 0.0, 1.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(3.0, 0.0, 1.0), instance.getTermGlobalFrequencies()); instance.add(new Vector3()); assertEquals(2, instance.getDocumentCount()); assertEquals(new Vector3(1.0, 0.0, 1.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(3.0, 0.0, 1.0), instance.getTermGlobalFrequencies()); instance.add(new Vector3(0.0, 1.0, 1.0)); assertEquals(3, instance.getDocumentCount()); assertEquals(new Vector3(1.0, 1.0, 2.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(3.0, 1.0, 2.0), instance.getTermGlobalFrequencies()); VectorFactory<?> f = VectorFactory.getDefault(); instance.add(f.copyValues(0.0, 0.0, 0.0, 2.0)); assertEquals(4, instance.getDocumentCount()); assertEquals(f.copyValues(1.0, 1.0, 2.0, 1.0), instance.getTermDocumentFrequencies()); assertEquals(f.copyValues(3.0, 1.0, 2.0, 2.0), instance.getTermGlobalFrequencies()); boolean exceptionThrown = false; try { instance.add(new Vector3()); } catch (DimensionalityMismatchException e) { exceptionThrown = true; } finally { assertTrue(exceptionThrown); } assertEquals(4, instance.getDocumentCount()); } /** * Test of remove method, of class EntropyGlobalTermWeighter. */ @Test public void testRemove() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); instance.add(new Vector3(3.0, 0.0, 1.0)); instance.add(new Vector3()); instance.add(new Vector3(0.0, 1.0, 1.0)); assertEquals(3, instance.getDocumentCount()); assertEquals(new Vector3(1.0, 1.0, 2.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(3.0, 1.0, 2.0), instance.getTermGlobalFrequencies()); instance.remove(new Vector3()); assertEquals(2, instance.getDocumentCount()); assertEquals(new Vector3(1.0, 1.0, 2.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(3.0, 1.0, 2.0), instance.getTermGlobalFrequencies()); instance.remove(new Vector3(3.0, 0.0, 1.0)); assertEquals(1, instance.getDocumentCount()); assertEquals(new Vector3(0.0, 1.0, 1.0), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(0.0, 1.0, 1.0), instance.getTermGlobalFrequencies()); instance.remove(new Vector3(0.0, 1.0, 1.0)); assertEquals(0, instance.getDocumentCount()); assertEquals(new Vector3(), instance.getTermDocumentFrequencies()); assertEquals(new Vector3(), instance.getTermGlobalFrequencies()); } /** * Test of getDimensionality method, of class EntropyGlobalTermWeighter. */ @Test public void testGetDimensionality() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); assertEquals(-1, instance.getDimensionality()); instance.add(new Vector3()); assertEquals(3, instance.getDimensionality()); } /** * Test of getGlobalWeights method, of class EntropyGlobalTermWeighter. */ @Test public void testGetGlobalWeights() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); assertSame(instance.getEntropy(), instance.getGlobalWeights()); instance.add(new Vector3(3.0, 0.0, 1.0)); instance.add(new Vector3(4.0, 0.0, 0.0)); instance.add(new Vector3(9.0, 0.0, 1.0)); instance.add(new Vector3(3.0, 0.0, 2.0)); assertSame(instance.getEntropy(), instance.getGlobalWeights()); } /** * Test of getEntropy method, of class EntropyGlobalTermWeighter. */ @Test public void testGetEntropy() { EntropyGlobalTermWeighter instance = new EntropyGlobalTermWeighter(); assertNull(instance.getEntropy()); instance.add(new Vector3(3.0, 0.0, 1.0)); instance.add(new Vector3(4.0, 0.0, 0.0)); instance.add(new Vector3(9.0, 0.0, 1.0)); instance.add(new Vector3(3.0, 0.0, 2.0)); double epsilon = 0.001; Vector expected = new Vector3(0.087, 1.0, 0.25); Vector actual = instance.getEntropy(); assertTrue(expected.equals(actual, epsilon)); instance.add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.214, 1.0, 0.353); actual = instance.getEntropy(); assertTrue(expected.equals(actual, epsilon)); // Test handling of dense. instance.setVectorFactory(VectorFactory.getDefault()); instance.setEntropy(null); actual = instance.getEntropy(); assertTrue(expected.equals(actual, epsilon)); } }